[Insight-users] TPS [compute new position of points]
agatte
wiatrak11 at poczta.onet.pl
Sat Aug 11 07:05:50 EDT 2012
Hi,
I have a question about TPS transformation in ITK.
I have set of 5 sources and target points(landmarks).
I want to compute TPS transformation.
I used ThinPlateSpline example for it.
I want to compute new positions of point after transformation.
What I can compute new position of each landmark after transformation ?
I would be appreciate for any help please.
Here I attach code :
int main()
{
double tab[30] =
{
// sources landmarks from tracker
-81.29,-31.07, -770.58,
-83.11, -21.26, -822.64,
-93.45, -32.44, -858.72,
-68.08, -126.89,-813.07,
-61.04, 75.74, -808.36,
// target landmarks from image - dicom
140.6, 230.7, -30.5,
140.2, 231.7, -71.1,
144.8, 235.9, -116.1,
45.8, 220.2, -66.7,
231.6, 211.3, -66.1
};
const unsigned int Dimension = 3;
typedef unsigned char PixelType;
typedef double CoordinateRepType;
typedef itk::ThinPlateSplineKernelTransform<
CoordinateRepType,Dimension> TPSTransformType;
typedef itk::Point< CoordinateRepType,Dimension > PointType;
typedef std::vector< PointType > PointArrayType;
typedef TPSTransformType::PointSetType PointSetType;
typedef PointSetType::Pointer PointSetPointer;
typedef PointSetType::PointIdentifier PointIdType;
// Landmarks correspondances may be associated with the
SplineKernelTransforms
// via Point Set containers. Let us define containers for the landmarks.
PointSetType::Pointer sourceLandMarks = PointSetType::New();
PointSetType::Pointer targetLandMarks = PointSetType::New();
PointType trackerPoint; PointType imagePoint;
PointSetType::PointsContainer::Pointer sourceLandMarkContainer =
sourceLandMarks->GetPoints();
PointSetType::PointsContainer::Pointer targetLandMarkContainer =
targetLandMarks->GetPoints();
// 1 Landmark
trackerPoint[0] = tab[0];
trackerPoint[1] = tab[1];
trackerPoint[2] = tab[2];
imagePoint[0] = tab[15];
imagePoint[1] = tab[16];
imagePoint[2] = tab[17];
sourceLandMarkContainer->InsertElement( 0,trackerPoint);
targetLandMarkContainer->InsertElement(0,imagePoint);
// 2 Landmark
trackerPoint[0] = tab[3];
trackerPoint[1] = tab[4];
trackerPoint[2] = tab[5];
imagePoint[0] = tab[18];
imagePoint[1] = tab[19];
imagePoint[2] = tab[20];
sourceLandMarkContainer->InsertElement(1,trackerPoint);
targetLandMarkContainer->InsertElement(1,imagePoint);
// 3 Landmark
trackerPoint[0] = tab[6];
trackerPoint[1] = tab[7];
trackerPoint[2] = tab[8];
imagePoint[0] = tab[21];
imagePoint[1] = tab[22];
imagePoint[2] = tab[23];
sourceLandMarkContainer->InsertElement( 2,trackerPoint);
targetLandMarkContainer->InsertElement(2,imagePoint);
// 4 Landmark
trackerPoint[0] = tab[9];
trackerPoint[1] = tab[10];
trackerPoint[2] = tab[11];
imagePoint[0] = tab[24];
imagePoint[1] = tab[25];
imagePoint[2] = tab[26];
sourceLandMarkContainer->InsertElement( 3,trackerPoint);
targetLandMarkContainer->InsertElement(3,imagePoint);
// 5 Landmark
trackerPoint[0] = tab[12];
trackerPoint[1] = tab[13];
trackerPoint[2] = tab[14];
imagePoint[0] = tab[27];
imagePoint[1] = tab[28];
imagePoint[2] = tab[29];
sourceLandMarkContainer->InsertElement(4,trackerPoint);
targetLandMarkContainer->InsertElement(4,imagePoint);
TPSTransformType::Pointer tps = TPSTransformType::New();
tps->SetSourceLandmarks(sourceLandMarks);
tps->SetTargetLandmarks(targetLandMarks);
// ComputeMAtrix
tps->ComputeWMatrix();
TPSTransformType::OutputPointType trackerPointNewPosition;
trackerPointNewPosition = tps->TransformPoint(trackerPoint);
std::cout<<"trackerPointNewPosition:
"<<trackerPointNewPosition<<std::endl;
// TPSTransformType::OutputVectorType pointsAfterTr;
// pointsAfterTr = tps->TransformVector(sourceLandMarks);
// save transformation
typedef itk::TransformFileWriter TransformWriterType;
TransformWriterType::Pointer transformWriter = TransformWriterType::New();
transformWriter->AddTransform( tps);
transformWriter->SetInput(tps);
transformWriter->SetFileName("tps.txt");
transformWriter->Update();
return EXIT_SUCCESS;
}
--
View this message in context: http://old.nabble.com/TPS--compute-new-position-of-points--tp34285325p34285325.html
Sent from the ITK - Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list