[Insight-users] Versor problem
tony hakki
tony2007vtk at yahoo.com
Sun Apr 8 14:17:43 EDT 2007
Dear Luis;
I convert my STL data to itk pointset like that:first I read it with VTK ,then i converted vtk polydata to itk mesh and lastly i converted itk mesh to itk pointset with the following code?Is that code incorrect? Is there an easier way to convert vtkpolydata to itkpointset?
const unsigned int Dimension = 3;
typedef unsigned short PixelType;
typedef itk::PointSet< float, Dimension > FixedPointSetType;
typedef itk::Image< PixelType, Dimension > MovingImageType;
typedef FixedPointSetType::PointsContainer PointsContainer;
PointsContainer::Pointer pointsContainer = PointsContainer::New();
pointsContainer = input_mesh->GetPoints();
itk::PointSet<float, 3>::Pointer pointSet = itk::PointSet<float,3>::New();
pointSet->SetPoints(pointsContainer);
unsigned long pointId = 0;
typedef FMeshType::PointsContainer::Iterator PointsIterator;
PointsIterator pointIterator = input_mesh->GetPoints()->Begin();
PointsIterator end = input_mesh->GetPoints()->End();
while( pointIterator != end )
{
FMeshType::PointType p = pointIterator.Value(); // access the point
std::cout << p << std::endl; // print the point
pointSet->SetPoint( pointId, p );// advance to next point
pointSet->SetPointData( pointId, pointSet->GetBufferedRegion() );
++pointIterator;
++pointId;
}
----- Original Message ----
From: Luis Ibanez <luis.ibanez at kitware.com>
To: tony hakki <tony2007vtk at yahoo.com>
Cc: insight-users at itk.org
Sent: Sunday, April 8, 2007 12:01:48 AM
Subject: Re: [Insight-users] Versor problem
Hi Tony,
1) Are you using the TransformFileWriter class ?
http://www.itk.org/Insight/Doxygen/html/classitk_1_1TransformFileWriter.html
2) The code in your email is inconsistent.
You are declaring a QuaternionRigidTransform in the code,
but the print out indicates that what you have in the file
is a VersorRigidTransform.
The transform in the file *MUST* match the type
of the transform that you declare in the code.
3) The fact that your point set is stored in an STL file
is irrelevant for the purpose of the registration.
As we suggested in a previous email, you should use VTK
for reading the STL file, and then convert the points from
a vtkPolyData into an itkPointSet.
4) The fact that your image is stored in a .raw file is
also irrelevant for the purpose of the registration.
What matter is whether you are able to read the image file
into an itk Image.
5) Yes,
You can do PointSet to Image registration in ITK.
Regards,
Luis
---------------------
tony hakki wrote:
> Dear Luis;
>
> I set the Center like the following code. I think it is correct to set
> center. At the end of the registration I write the transform staffs to
> the a txt folder. In this folder center is seen [0,0,0],as if I hadn't
> set it. What might the problem?I apply finalparameters to the
> TransformMeshfilter as a input like that
>
> transform->SetParameters( finalParameters );
>
> filter->SetTransform(transform );
>
> but The pointset goes far away from the image instead of the overlapping
>
> If you like to see my whole code I can add it.
>
>
>
>
>
> typedef itk::QuaternionRigidTransform< double > TransformType;
>
> TransformType::Pointer transform = TransformType::New();
>
> TransformType::InputPointType centerFixed;
>
> centerFixed[0] = 15 ;
>
> centerFixed[1] =-20;
>
> centerFixed[2] =0;
>
> transform->SetCenter(centerFixed);
>
>
>
> here is the Transform staff at the end of the registration : Also here
> the transformation and the versor variables are too small according to
> me?Is ITK capable to registrate STL Polydata(I convert it to ITK mesh
> then to a pointset) and .raw extension 3D image?
>
>
>
> VersorRigid3DTransform (04D73558)
> RTTI typeinfo: class itk::VersorRigid3DTransform<double>
> Reference Count: 4
> Modified Time: 1221
> Debug: Off
> Observers:
> none
> Matrix:
> 0.999912 -0.00431884 0.0125821
> 0.00426851 0.999983 0.00402404
> -0.0125992 -0.00396998 0.999913
> Offset: [1.00003, -0.73264, -1.39039]
> Center: [0, 0, 0]
> Translation: [1.00003, -0.73264, -1.39039]
> Inverse:
> 0.999912 0.00426851 -0.0125992
> -0.00431884 0.999983 -0.00396998
> 0.0125821 0.00402404 0.999913
> Singular: 0
> Versor: [ -0.00199855, 0.00629548, 0.00214689, 0.999976 ]
>
>
> ----- Original Message ----
> From: Luis Ibanez <luis.ibanez at kitware.com>
> To: tony hakki <tony2007vtk at yahoo.com>
> Cc: insight-users at itk.org
> Sent: Friday, April 6, 2007 4:15:48 PM
> Subject: Re: [Insight-users] Versor problem
>
> Hi Tony,
>
>
> 1) The center of the Transform should be set to the Center of the
> Fixed object. In your case, that will be the Fixed Point Set.
>
>
>
> 2) FORGET EULER ANGLES !!
>
>
>
> They are a *BAD* representation of 3D rotations
>
>
> Versors ARE NOT EULER ANGLES
> Versors are unit Quaternions
>
>
> The methods SetRotationAroundX,Y,Z, *ARE NOT* cumulative.
>
> The rotation that you set with SetRotationAroundY is
> overriding the rotation that you set around X previously.
>
> The correct way of setting a versor is via an Axis and an Angle.
>
> You should provide the three components (x,y,z) of the axis
> of rotation, as a unit vector. And you should provide the
> angle of rotation in radians. Note that the component of the
> axis *ARE NOT* the Euler angles either.
>
>
>
> Please read the tutorial on Quaternions:
>
> http://www.itk.org/CourseWare/Training/QuaternionsI.pdf
> http://www.itk.org/CourseWare/Training/QuaternionsII.pdf
>
> and the description of Versors in the Wikipedia:
>
> http://en.wikipedia.org/wiki/Versor
>
> The four components of a Quaternion correspond to:
>
>
> q0 = Ax * sin( T / 2 )
> q0 = Ay * sin( T / 2 )
> q0 = Az * sin( T / 2 )
> q0 = cos( T / 2 )
>
>
> where (Ax,Ay,Az) are the components of the axis
> of rotation and T is the angle of rotation.
>
>
>
> Regards,
>
>
> Luis
>
>
> ------------------------
> tony hakki wrote:
> > hello;
> > I have 2 questions:
> > 1- When we implement pointSetToImageRegistration Should we Set the
> > center of transform like SetTransform(Center) ,if yes which data's
> > center should it be,PointSet center or image center?
> >
> > 2- I use VersorRigid3DTransform,and I want to set Versor by my self and
> > see the effect of Versor. But I set the versor type like the following
> > then I get the transform parameters to confirm the versor variables it
> > says that *versor[0, 0, -0.26745, 0.963572] Why do the versor
> > variables not same what I set at the beginning?and What does the
> > fourth one( 0.963572) indicate?*
> > **
> > **
> >
> > *TransformType::VersorType versor;*
> >
> > *versor.SetRotationAroundX( 0.276538 );*
> >
> > *versor.SetRotationAroundY( 1.595315);*
> >
> > *versor.SetRotationAroundZ( -0.5414906);*
> >
> > *transform->SetRotation( versor );*
> >
> >
> > ------------------------------------------------------------------------
> > Expecting? Get great news right away with email Auto-Check.
> >
> <http://us.rd.yahoo.com/evt=49982/*http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html>
> > Try the Yahoo! Mail Beta.
> >
> <http://us.rd.yahoo.com/evt=49982/*http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html>
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Insight-users mailing list
> > Insight-users at itk.org
> > http://www.itk.org/mailman/listinfo/insight-users
>
>
> ------------------------------------------------------------------------
> The fish are biting.
> Get more visitors
> <http://us.rd.yahoo.com/evt=49679/*http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php?o=US2140&cmp=Yahoo&ctv=Q107Tagline&s=Y&s2=EM&b=50>
> on your site using Yahoo! Search Marketing. <
> http://us.rd.yahoo.com/evt=49679/*http://searchmarketing.yahoo.com/arp/sponsoredsearch_v2.php?o=US2140&cmp=Yahoo&ctv=Q107Tagline&s=Y&s2=EM&b=50>
____________________________________________________________________________________
We won't tell. Get more on shows you hate to love
(and love to hate): Yahoo! TV's Guilty Pleasures list.
http://tv.yahoo.com/collections/265
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070408/951c1366/attachment-0001.htm
More information about the Insight-users
mailing list