Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkLandmarkWarping.h"
00019
00020 mitk::LandmarkWarping::LandmarkWarping()
00021 {
00022 m_Deformer = DeformationSourceType::New();
00023 m_LandmarkDeformer = DeformationSourceType::New();
00024 }
00025
00026 mitk::LandmarkWarping::~LandmarkWarping()
00027 {
00028 }
00029
00030 void mitk::LandmarkWarping::SetFixedImage(FixedImageType::Pointer fixedImage)
00031 {
00032 m_FixedImage = fixedImage;
00033 m_Deformer->SetOutputSpacing( m_FixedImage->GetSpacing() );
00034 m_Deformer->SetOutputOrigin( m_FixedImage->GetOrigin() );
00035 m_Deformer->SetOutputRegion( m_FixedImage->GetLargestPossibleRegion() );
00036 }
00037
00038 void mitk::LandmarkWarping::SetMovingImage(MovingImageType::Pointer movingImage)
00039 {
00040 m_MovingImage = movingImage;
00041 m_LandmarkDeformer->SetOutputSpacing( m_MovingImage->GetSpacing() );
00042 m_LandmarkDeformer->SetOutputOrigin( m_MovingImage->GetOrigin() );
00043 m_LandmarkDeformer->SetOutputRegion( m_MovingImage->GetLargestPossibleRegion() );
00044 }
00045
00046 void mitk::LandmarkWarping::SetLandmarks(LandmarkContainerType::Pointer source, LandmarkContainerType::Pointer target)
00047 {
00048 m_SourceLandmarks = source;
00049 m_TargetLandmarks = target;
00050 m_Deformer->SetSourceLandmarks( source );
00051 m_Deformer->SetTargetLandmarks( target );
00052 m_LandmarkDeformer->SetSourceLandmarks( target );
00053 m_LandmarkDeformer->SetTargetLandmarks( source );
00054 }
00055
00056 mitk::LandmarkWarping::MovingImageType::Pointer mitk::LandmarkWarping::Register()
00057 {
00058 try
00059 {
00060 m_Observer = Observer::New();
00061 unsigned long obs = m_Deformer->AddObserver(itk::ProgressEvent(), m_Observer);
00062 mitk::ProgressBar::GetInstance()->AddStepsToDo(120);
00063 m_Deformer->UpdateLargestPossibleRegion();
00064 m_Deformer->RemoveObserver(obs);
00065 }
00066 catch( itk::ExceptionObject & excp )
00067 {
00068 std::cerr << "Exception thrown " << std::endl;
00069 std::cerr << excp << std::endl;
00070 return NULL;
00071 }
00072
00073 try
00074 {
00075 unsigned long obs2 = m_LandmarkDeformer->AddObserver(itk::ProgressEvent(), m_Observer);
00076 m_LandmarkDeformer->UpdateLargestPossibleRegion();
00077 m_LandmarkDeformer->RemoveObserver(obs2);
00078 }
00079 catch( itk::ExceptionObject & excp )
00080 {
00081 std::cerr << "Exception thrown " << std::endl;
00082 std::cerr << excp << std::endl;
00083 return NULL;
00084 }
00085
00086 m_DeformationField = m_Deformer->GetOutput();
00087 m_InverseDeformationField = m_LandmarkDeformer->GetOutput();
00088
00089 m_Warper = FilterType::New();
00090
00091 typedef itk::LinearInterpolateImageFunction<
00092 MovingImageType, double > InterpolatorType;
00093
00094 InterpolatorType::Pointer interpolator = InterpolatorType::New();
00095
00096 m_Warper->SetInterpolator( interpolator );
00097
00098
00099 m_Warper->SetOutputSpacing( m_DeformationField->GetSpacing() );
00100 m_Warper->SetOutputOrigin( m_DeformationField->GetOrigin() );
00101
00102 m_Warper->SetDeformationField( m_DeformationField );
00103
00104 m_Warper->SetInput( m_MovingImage );
00105
00106 unsigned long obs3 = m_Warper->AddObserver(itk::ProgressEvent(), m_Observer);
00107 m_Warper->UpdateLargestPossibleRegion();
00108 m_Warper->RemoveObserver(obs3);
00109
00110 return m_Warper->GetOutput();
00111 }
00112
00113 mitk::LandmarkWarping::LandmarkContainerType::Pointer mitk::LandmarkWarping::GetTransformedTargetLandmarks()
00114 {
00115 LandmarkContainerType::Pointer landmarks = LandmarkContainerType::New();
00116 LandmarkWarping::LandmarkPointType transformedTargetPoint;
00117
00118 for(unsigned int pointId=0; pointId<m_TargetLandmarks->Size();++pointId)
00119 {
00120 LandmarkWarping::LandmarkPointType targetPoint=m_TargetLandmarks->GetElement(pointId);
00121 transformedTargetPoint = m_LandmarkDeformer->GetKernelTransform()->TransformPoint(targetPoint);
00122 landmarks->InsertElement(pointId, transformedTargetPoint );
00123 }
00124 return landmarks;
00125 }