[Insight-users] Registration method, PointSet, BSplineDeformableTransform

Luis Ibanez luis.ibanez at kitware.com
Wed Dec 10 13:46:23 EST 2008


Hi Lars,


1) The recommendation of turning ITK_USE_REVIEW on
    was based on making the itkVTKPolyDataReader
    available. (it is unrelated to the ICP method).


2) Yes, the BSpline deformable transform is applicable
    to the ICP problem in the context of a deformable
    transform. BUT you certainly MUST first solve the
    rigid and Affine alignment of the two point sets
    BEFORE attempting to use a deformable transform.

    There are alternatives to the BSpline deformable
    transform, in particular you may want to consider
    the family of KernelTransforms.


3) Yes, unfortunately the direction of transformation
    was inverted in the implementation of the
    itkEuclideanDistancePointMetric.txx file.

    You can easily verify this by looking at lines 88-91,

    where you will see that the points from the MOVING
    PointSet are passed to the Transform.


       "Glimpsing at the source, leaves no doubt" !

    I can't answer your question regarding how you should
    use the resulting transform when applying it to a 3D
    image.

    You failed to specify what the image's role is in this
    problem, and whether it is associated to the space of
    the fixed point set or the moving point set.

4) Instead of playing with this InverseDeformationField filter,
    I would simply suggest you to swap the Fixed Point Set and
    the Moving Point Set at the input of the PointSetToPointSet
    registration method.


5) You asked:
    What is the recommended number of points for a BSpline registration ?

    This question doesn't make any sense without more context.

    What is your target problem ?
    What is your needed precision ?
    Do you have access to supercomputers ?
    Do you need to solve this in real time ?
    Is this a research project or are you going to use this for
    image guided surgery ?

    Image registration is not a scientific problem,
    it is an engineering problem.

    Your current question is akin to asking:

         What is the recommended size of a bridge ?

    Well....
    you may have to tell us more about the river over which
    you are building this bridge...


    Please tell us more about your actual goal.
    It might be that BSplines are not the best option for what you
    are doing.


6) Constraining the BSplines coefficient is not possible in the
    current implementation. You may be better off by using
    KernelTransforms and making a judicious decision on how many
    landmarks to use and where to locate them.



Again, you will have to make a better description of the real
original problem before we can advice you on how to tune the
tools for it.




    Regards,



       Luis



-----------------------
Hegenbart, Lars wrote:
> Hi Louis,
> 
> I am working with ITK 3.4.0 for half a year now. I am trying to do PointSet-registrations as well as Nour. In addition I am trying to use deformable transforms. My results are not satisfying so far, so I have a couple of question and would appreciate any comment by ITK users or by you as the expert.
> 
>>From your post (see below) I learned to turn on the ITK_USE_REVIEW option. 
> 
> 1) Is this because of the itkVTKPolyDataReader or because of the ICP method? I tried both, with the ITK_USE_REVIEW option turned on and off. I did not notice a difference.
> 
> I understood, that I have to begin with a rigid and/or affine registration to align the point sets as good as possible before starting with deformable registration methods. 
> 
> 2) Is the BSplineDeformableTransform suitable at all with ICP? Are there alternatives?
> 
> I use the TransformPoint-function to transform a point from a PointSet. 
> 
> 3) Is the transformation, obtained by the ICP-Registration: is it true, that it is based on a "forward-warping" principle, which is different to other registration methods?
> 
> To apply the transform to a 3D-image I would have to invert the transform. I tried the InverseDeformationFieldImageFilter to generate an approximation of the inverse deformation field. I ended up varying the SubSamplingFactor from 100 down to lower numbers to improve the result. At about 10 my memory was not sufficient but the result still looked odd.
> 
> 4) Besides varying the SubSamplingFactor, are there other ways of tuning this filter?
> 
> BTW: Due to lack of success with InverseDeformationFieldImageFilter, I am now playing with an approach suggested by Matthias (post from October, 15th, 2008)(map and invert the displacements for each voxel at the corresponding position in the moving image grid). 
> 
> I learned, that it is a trade-off with computer-time and quality of the result, but:
> 
> 5) What are recommended maximum numbers of points for a BSpline-PointSetRegistration? 
> 
> I reduced my point clouds to about 2000 points to speed up the registration. I know, that to some extend it depends on the number coefficients to be determined, e.g. one cannot do a PointSet-Registration with a PointSet of 300 points and then calculate a BSpline-Grid (3rd order in 3D) with ((3+2)^3)*3 = 375 unknown coefficients. 
> 
> The coefficients do not converge after 4000 iterations with the Levenberg-Marquardt optimizer. ("too many iterations error"). Some of the coefficients I got from the registration pointer, are too high. The should be in the the range of 0 to +/-100, while some are far beyond the grid-spacing, e.g. 1e3 ... 1e5.
> 
> 6) Can I constrain the BSpline-Grid coefficients in order to improve or speed up the calculation?
> 
> Sorry for the long list of questions.
> 
> Thanks for any hints in advance!
> 
> Best regards
> Lars
> 
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: insight-users-bounces at itk.org [mailto:insight-users-bounces at itk.org] Im Auftrag von Luis Ibanez
> Gesendet: Sonntag, 7. Dezember 2008 00:11
> An: nourmestiri at yahoo.fr
> Cc: ITK
> Betreff: Re: [Insight-users] Registration method
> 
> 
> Hi Nour,
> 
> 
>               Welcome to ITK !
> 
> 
> Yes,
> you can do PointSet registration with ITK.
> 
> 
> Please do the following:
> 
> 
> 1) Build ITK by turning ON the ITK_USE_REVIEW (advanced) flag in CMake.
> 
> 
> 2) Use the itkVTKPolyDataReader.h class that you can find in
>     Insight/Code/Review, in order to load the two polydata files
>     into ITK. This will read legacy files in .vtk format.
> 
>     If you have VRML file, then convert them first to .vtk files.
>     You can do this by using VTK readers and writers.
> 
> 
> 3) Use the ICP method, as described in the examples:
> 
>        Insight/Examples/Patented
>           IterativeClosestPoint1.cxx
>           IterativeClosestPoint2.cxx
>           IterativeClosestPoint3.cxx
> 
> 
>      Please note that the patent on the ICP method has expired,
>      so you don't have to worry about it at this point.
> 
> 
> 
>     Regards,
> 
> 
>        Luis
> 
> 
> --------------------
> Nour Mestiri wrote:
> 
>>Hi all ITK users,
>>I'm new with you so please don't blame me if my questions are evident 
>>and try to help me if possible.
>>I wanna do the registration of 2 objects (polydatas generated from vrml 
>>files).
>>Is it possible? Is there a code example which allows to make that?
>>Please i need help.
>>Thank you so much
>>
>>
>>
>>------------------------------------------------------------------------
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 


More information about the Insight-users mailing list