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 #ifndef MITKNavigationDataLandmarkTransformFilter_H_HEADER_INCLUDED_
00019 #define MITKNavigationDataLandmarkTransformFilter_H_HEADER_INCLUDED_
00020
00021 #include <mitkNavigationDataToNavigationDataFilter.h>
00022 #include <mitkPointSet.h>
00023 #include <itkLandmarkBasedTransformInitializer.h>
00024 #include <itkQuaternionRigidTransform.h>
00025 #include <itkImage.h>
00026
00027
00028 namespace mitk {
00029
00047 class MitkIGT_EXPORT NavigationDataLandmarkTransformFilter : public NavigationDataToNavigationDataFilter
00048 {
00049 public:
00050 mitkClassMacro(NavigationDataLandmarkTransformFilter, NavigationDataToNavigationDataFilter);
00051 itkNewMacro(Self);
00052
00053 typedef std::vector<mitk::ScalarType> ErrorVector;
00054 typedef itk::VersorRigid3DTransform< double > LandmarkTransformType;
00055
00060 virtual void SetSourceLandmarks(mitk::PointSet::Pointer sourcePointSet);
00061
00066 virtual void SetTargetLandmarks(mitk::PointSet::Pointer targetPointSet);
00067
00068 virtual bool IsInitialized() const;
00069
00074 mitk::ScalarType GetFRE() const;
00075
00080 mitk::ScalarType GetFREStdDev() const;
00081
00086 mitk::ScalarType GetRMSError() const;
00087
00092 mitk::ScalarType GetMinError() const;
00093
00098 mitk::ScalarType GetMaxError() const;
00099
00104 mitk::ScalarType GetAbsMaxError() const;
00105
00110 const ErrorVector& GetErrorVector() const;
00111
00112 itkSetMacro(UseICPInitialization, bool);
00113 itkGetMacro(UseICPInitialization, bool);
00114 itkBooleanMacro(UseICPInitialization);
00115
00116 itkGetConstObjectMacro(LandmarkTransform, LandmarkTransformType);
00117
00118 protected:
00119 typedef itk::Image< signed short, 3> ImageType;
00120
00121 typedef itk::LandmarkBasedTransformInitializer< LandmarkTransformType, ImageType, ImageType > TransformInitializerType;
00122 typedef TransformInitializerType::LandmarkPointContainer LandmarkPointContainer;
00123 typedef itk::QuaternionRigidTransform<double> QuaternionTransformType;
00124
00128 NavigationDataLandmarkTransformFilter();
00129 virtual ~NavigationDataLandmarkTransformFilter();
00130
00135 virtual void GenerateData();
00136
00151 bool FindCorrespondentLandmarks(LandmarkPointContainer& sources, const LandmarkPointContainer& targets) const;
00152
00159 void InitializeLandmarkTransform(LandmarkPointContainer& sources, const LandmarkPointContainer& targets);
00160
00164 void UpdateLandmarkTransform(const LandmarkPointContainer &sources, const LandmarkPointContainer &targets);
00165 void AccumulateStatistics(ErrorVector& vector);
00166
00167 void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00168
00169 mitk::ScalarType m_ErrorMean;
00170 mitk::ScalarType m_ErrorStdDev;
00171 mitk::ScalarType m_ErrorRMS;
00172 mitk::ScalarType m_ErrorMin;
00173 mitk::ScalarType m_ErrorMax;
00174 mitk::ScalarType m_ErrorAbsMax;
00175
00176 LandmarkPointContainer m_SourcePoints;
00177 LandmarkPointContainer m_TargetPoints;
00178 TransformInitializerType::Pointer m_LandmarkTransformInitializer;
00179 LandmarkTransformType::Pointer m_LandmarkTransform;
00180
00181 QuaternionTransformType::Pointer m_QuatLandmarkTransform;
00182 QuaternionTransformType::Pointer m_QuatTransform;
00183
00184 ErrorVector m_Errors;
00185 bool m_UseICPInitialization;
00186 };
00187 }
00188 #endif