[ITK-users] Transforming a point

Swetha Sharma swetha.bsharma at gmail.com
Wed Apr 12 04:11:35 EDT 2017


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/20170412/fb0df69f/attachment.html>


More information about the Insight-users mailing list