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
00019 #include "mitkThinPlateSplineCurvedGeometry.h"
00020 #include <vtkThinPlateSplineTransform.h>
00021 #include <vtkPoints.h>
00022
00023 mitk::ThinPlateSplineCurvedGeometry::ThinPlateSplineCurvedGeometry()
00024 {
00025 m_InterpolatingAbstractTransform = m_ThinPlateSplineTransform = vtkThinPlateSplineTransform::New();
00026
00027 m_VtkTargetLandmarks = vtkPoints::New();
00028 m_VtkProjectedLandmarks = vtkPoints::New();
00029 m_ThinPlateSplineTransform->SetInverseIterations(5000);
00030 }
00031
00032 mitk::ThinPlateSplineCurvedGeometry::~ThinPlateSplineCurvedGeometry()
00033 {
00034
00035
00036
00037
00038 if(m_VtkTargetLandmarks!=NULL)
00039 m_VtkTargetLandmarks->Delete();
00040 if(m_VtkProjectedLandmarks!=NULL)
00041 m_VtkProjectedLandmarks->Delete();
00042 }
00043
00044 bool mitk::ThinPlateSplineCurvedGeometry::IsValid() const
00045 {
00046 return m_TargetLandmarks.IsNotNull() && (m_TargetLandmarks->Size() >= 3) && m_LandmarkProjector.IsNotNull();
00047 }
00048
00049 void mitk::ThinPlateSplineCurvedGeometry::SetSigma(float sigma)
00050 {
00051 m_ThinPlateSplineTransform->SetSigma(sigma);
00052 }
00053
00054 float mitk::ThinPlateSplineCurvedGeometry::GetSigma() const
00055 {
00056 return m_ThinPlateSplineTransform->GetSigma();
00057
00058 }
00059
00060 void mitk::ThinPlateSplineCurvedGeometry::ComputeGeometry()
00061 {
00062 Superclass::ComputeGeometry();
00063
00064 const mitk::PointSet::DataType::PointsContainer *finalTargetLandmarks, *projectedTargetLandmarks;
00065
00066 finalTargetLandmarks = m_LandmarkProjector->GetFinalTargetLandmarks();
00067 projectedTargetLandmarks = m_LandmarkProjector->GetProjectedLandmarks();
00068
00069 mitk::PointSet::DataType::PointsContainer::ConstIterator targetIt, projectedIt;
00070
00071 targetIt = finalTargetLandmarks->Begin();
00072 projectedIt = projectedTargetLandmarks->Begin();
00073
00074
00075 m_VtkTargetLandmarks->Reset();
00076 m_VtkProjectedLandmarks->Reset();
00077 vtkIdType id;
00078 int size=finalTargetLandmarks->Size();
00079 for(id=0; id < size; ++id, ++targetIt, ++projectedIt)
00080 {
00081 const mitk::PointSet::PointType& target = targetIt->Value();
00082 m_VtkTargetLandmarks->InsertPoint(id, target[0], target[1], target[2]);
00083 const mitk::PointSet::PointType& projected = projectedIt->Value();
00084 m_VtkProjectedLandmarks->InsertPoint(id, projected[0], projected[1], projected[2]);
00085 }
00086 m_VtkTargetLandmarks->Modified();
00087 m_VtkProjectedLandmarks->Modified();
00088
00089 m_ThinPlateSplineTransform->SetSourceLandmarks(m_VtkProjectedLandmarks);
00090 m_ThinPlateSplineTransform->SetTargetLandmarks(m_VtkTargetLandmarks);
00091 }
00092
00093 mitk::AffineGeometryFrame3D::Pointer mitk::ThinPlateSplineCurvedGeometry::Clone() const
00094 {
00095 Self::Pointer newGeometry = Self::New();
00096 newGeometry->Initialize();
00097 InitializeGeometry(newGeometry);
00098 return newGeometry.GetPointer();
00099 }
00100
00101 void mitk::ThinPlateSplineCurvedGeometry::InitializeGeometry(Self * newGeometry) const
00102 {
00103 newGeometry->SetSigma(GetSigma());
00104 Superclass::InitializeGeometry(newGeometry);
00105 }