[ITK-users] [ITK] Transforming a point
Swetha Sharma
swetha.bsharma at gmail.com
Thu Apr 13 01:12:20 EDT 2017
It was helpful thanks ziv
Swetha
On Wed, 12 Apr 2017, 19:11 Yaniv, Ziv Rafael (NIH/NLM/LHC) [C], <
zivrafael.yaniv at nih.gov> wrote:
> Hello Swetha,
>
>
>
> In general, the transformations computed using the ITK registration
> framework are from the fixed coordinate system to the moving coordinate
> system. Thus, the transformation should be applied as T(point_fixed) =
> point_moving.
>
>
>
> I did not read your code so I may be missing something specific to your
> work, but this mapping is something that many newcomers to ITK seem to get
> confused with.
>
>
>
> hope this helps
>
> Ziv
>
>
>
>
>
> *From: *Swetha Sharma <swetha.bsharma at gmail.com>
> *Date: *Wednesday, April 12, 2017 at 4:11 AM
> *To: *Insight-users <insight-users at itk.org>
> *Subject: *[ITK] [ITK-users] Transforming a point
>
>
>
> Hi,
>
>
>
> I have a affine transformation matrix with a set of points as fixed
> landmarks and moving landmarks. I was trying to verify the transformation
> by using the transform point method in the transformation class,ideally i
> should get back the fixed points when i give the moving points as input ,
> but I am not getting it as the output. The code which i used is as below:
>
>
>
> typedef itk::AffineTransform<double,3> AffineTransformType;
>
> AffineTransformType::Pointer transf;
>
>
>
> transf = dynamic_cast<AffineTransformType*>( transfm.GetPointer() );
>
> typedef itk::Similarity3DTransform<double> SimilarityTransformType;
>
> SimilarityTransformType::Pointer transform =
> SimilarityTransformType::New();
>
>
>
> typedef itk::LandmarkBasedTransformInitializer< SimilarityTransformType,
> InputImageType, InputImageType >
>
> LandmarkBasedTransformInitializerType;
>
> LandmarkBasedTransformInitializerType::Pointer
> landmarkBasedTransformInitializer =
>
> LandmarkBasedTransformInitializerType::New();
>
>
>
> typedef LandmarkBasedTransformInitializerType::LandmarkPointContainer
> LandmarkContainerType;
>
> typedef LandmarkBasedTransformInitializerType::LandmarkPointType
> LandmarkPointType;
>
>
>
> LandmarkContainerType movingLandmarks;
>
>
>
> LandmarkPointType movingPoint;
>
>
>
> double *ptrf_moving_point = ptf_moving_landmark_pointslist;
>
> for(int
> iPointIndex=0;iPointIndex<iNumberofLandMarkPoints_moving;iPointIndex++){
>
> movingPoint[0] = (*( ptrf_moving_point )) ;
>
> movingPoint[1] = (*( ptrf_moving_point + 1));
>
> movingPoint[2] = (*( ptrf_moving_point + 2));
>
> movingLandmarks.push_back( movingPoint );
>
> ptrf_moving_point = ptrf_moving_point + 3;
>
> }
>
>
>
> typedef itk::PointSet< double, 3 > PointSetType;
>
> PointSetType::Pointer registeredPointSet = PointSetType::New();
>
> typedef PointSetType::PointType PointType;
>
> PointType registeredPoint;
>
> typedef PointSetType::PointsContainer PointsContainer;
>
> PointsContainer::Pointer registeredPointContainer =
> PointsContainer::New();
>
>
>
> for(int i=0;i<movingLandmarks.size();i++){
>
> registeredPoint = transf->TransformPoint( movingLandmarks[i] );
>
> registeredPointContainer->InsertElement( i, registeredPoint );
>
> }
>
>
>
> registeredPointSet->SetPoints(registeredPointContainer);
>
>
>
> //Write the registered pointset into file
>
> std::ofstream registeredFile;
>
> registeredFile.open( "registered_points.txt");
>
> if( registeredFile.fail() )
>
> {
>
> return -1;
>
> }
>
> for( int i = 0; i<registeredPointSet->GetNumberOfPoints(); i++)
>
> {
>
> registeredPointSet->GetPoint( i, & registeredPoint );
>
> for(int j = 0; j<3; j++)
>
> {
>
> registeredFile<<registeredPoint[j]<<"\t";
>
> }
>
> registeredFile<<"\n";
>
> }
>
>
>
> Is there a mistake in the code ?How do I transform the points?
>
> -swetha
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20170413/42c718fc/attachment.html>
More information about the Insight-users
mailing list