<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>RE: [Insight-users] Applying a transform? PointSet registration?</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->
<P><FONT SIZE=2>Thanks Luis! I thought was something like that ,but for some reason it was not clear to me that a PointSet is able to be used where a 'mesh type' is asked for. I had looked at this doxygen page but assumed it had to be a mesh (with polygons, edges etc) I guess you meant TransformMeshFilter when you typed TransformMeshImageFilter.<BR>
<BR>
Can a transform be applied to a single point, or would you create a pointset with one point in it ? More generally , how do I know what types of class can go in TInputMesh?<BR>
<BR>
itk::TransformMeshFilter< TInputMesh, TOutputMesh, TTransform > Class Template Reference<BR>
<BR>
Next question: Since I successfully used VersorRigid3dTransform for registering 3D image files I thought I could use this transform for registring point sets that may be offset and rotated. However, if I try to plug the special Versor optimizer into the registration method, it comlains that it requires a MultipleValuedNonLinearOptimizer. I don't know exactly what that means in this context, but follwing the example in the Software Guide I used Euler3dTransform instead. So far so good...<BR>
<BR>
But, when looking in the Doxygen pages for PointSetToPOintSetRegistrationMethod it says:<BR>
<BR>
"The registration method also support a generic optimizer that can be selected at run-time. The only restriction for the optimizer is that it should be able to operate in single-valued cost functions given that the metrics used to compare PointSet with PointSets provide a single value as output."<BR>
<BR>
Then, when I look at the optimizer used in the example<BR>
LevenbergMarquardtOptimizer , and go to its parent class,<BR>
MultipleValuedNonLinearVnlOptimizer, it says:<BR>
<BR>
"This class is a base for the Optimization methods that optimize a single valued function."<BR>
<BR>
Its parent class says:<BR>
<BR>
MultipleValuedNonLinearOptimizer<BR>
"This class is a base for the Optimization methods that optimize a multiple valued function."<BR>
<BR>
So I am confused about when it is, or just what is, "single" or "multiple" valued and then how to decide which optimizer will work with which registration method?<BR>
<BR>
I am thinking about future uses as I think the Levenberg-Marquardt with Euler3d will work for this purpose. For example we might wish to register images and/or point-scans of the prosthsis to various medical images of the patient , then I would need to use other registration methods and figure out which optimizer works with it!<BR>
<BR>
<BR>
Thanks again.<BR>
Robert<BR>
<BR>
<BR>
<BR>
-----Original Message-----<BR>
From: Luis Ibanez [<A HREF="mailto:luis.ibanez@kitware.com">mailto:luis.ibanez@kitware.com</A>]<BR>
Sent: Fri 5/13/2005 1:48 PM<BR>
To: Atwood, Robert C<BR>
Cc: ITK Users<BR>
Subject: Re: [Insight-users] Applying a transform? PointSet registration?<BR>
<BR>
<BR>
Hi Robert,<BR>
<BR>
<BR>
The class that you are looking for is the:<BR>
<BR>
TransformMeshImageFilter:<BR>
<A HREF="http://www.itk.org/Insight/Doxygen/html/classitk_1_1TransformMeshFilter.html">http://www.itk.org/Insight/Doxygen/html/classitk_1_1TransformMeshFilter.html</A><BR>
<BR>
Simply instantiate this filter using your PointSet<> as template<BR>
parameter. Then connect as inputs your Transform and your input<BR>
PointSet.<BR>
<BR>
The filter will apply the Transform to all the Points in your PointSet.<BR>
<BR>
<BR>
Regards,<BR>
<BR>
<BR>
Luis<BR>
<BR>
<BR>
<BR>
--------------------------------------------------------------------------------<BR>
Atwood, Robert C wrote:<BR>
> I have been poring through the software guide and the Doxygen for hours,<BR>
> and I cannot see how to apply a transform to a point or a PointSet? I<BR>
> know how to apply to an image, you create a resample image filter and<BR>
> set the transform , is there a similar filter for PointSets (and what is<BR>
> it called) or is the process different?<BR>
><BR>
><BR>
> The immediate goal is to register two point sets, then somehow quantify<BR>
> the difference between them. I believe that this would be enabled by<BR>
> transforming one of the point set into the space of the other according<BR>
> to the result of the registration.<BR>
><BR>
> The overall goal is to quantify (and eventually minimize) the misfit of<BR>
> certain prostheses introduced at certain stages during the manufacturing<BR>
> process, by scanning 'before' and 'after' examples. The scan method<BR>
> produces a point set. The point set is not necessarily any sort of<BR>
> regular grid. (The points are in 3-d by the way) The 2 sets should<BR>
> generally be reasonably close to each other to start with (by placing<BR>
> the example in the same location and orientation)<BR>
><BR>
><BR>
><BR>
> Thanks,<BR>
> Robert<BR>
><BR>
><BR>
><BR>
><BR>
><BR>
> ------------------------------------------------------------------------<BR>
><BR>
> _______________________________________________<BR>
> Insight-users mailing list<BR>
> Insight-users@itk.org<BR>
> <A HREF="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</A><BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
</FONT>
</P>
</BODY>
</HTML>