Hi Luis,<br><br>I finally could use the SpatialObjectToImageStatisticsCalculator, so I solved the unefficiency problem. The algorithm is now much quicker, between 10 and 100 times faster! This lets me increase the number of iterations so that in, say 10 minutes, i have a good result, which isn&#39;t still perfect, but approximate. By the way, the problem why I couldn&#39;t use the SpatialObjectToImageStatisticsCalculator seemed to be related with having a GroupSpatialObject, since when I switched to EllipseSpatialObject, it just worked perfectly and could calculate real numbers (otherwise the results were NaN).<br>
<br>Thank you very much for your advice, I really appreciate your interest. I&#39;ll try that as soon as possible, and will let you know what my results are. <br><br><br clear="all">Antonio Foncubierta<br>
<br><br><div class="gmail_quote">2009/2/2 Luis Ibanez <span dir="ltr">&lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Hi Antonio,<br>
<br>
It seems that part of the difficulty that you are facing is<br>
rooted in the fact that the metric that computes a binary<br>
overlap between the spatial object and the image will have<br>
a plateau for all the transform parameters that map the<br>
spatial object inside the object in the image.<br>
<br>
You may want to consider blurring the image, or computing<br>
its distance map, as a way of breaking that plateau, and<br>
converting it in to a function with a monotonic profile<br>
that could be tracked by an optimizer.<br>
<br>
The metric illustrated in the ModelToImage examples is<br>
a very basic one...<br>
<br>
<br>
 &nbsp; Regards,<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; Luis<br>
<br>
<br>
--------------------------<br>
Antonio Foncubierta wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">
Hello again, it seems i could overcome some of my difficulties re-defining a metric. This is what I did:<br>
<br>
 &nbsp; &nbsp;* First I tried a SpatialObjectToImageStatistis calculator, so that<br>
 &nbsp; &nbsp; &nbsp;I would be able to sum the values of pixels of the image included<br>
 &nbsp; &nbsp; &nbsp;inside the Spatial Object. I couln&#39;t make it, and struggled for<br>
 &nbsp; &nbsp; &nbsp;several days on that. So I decided I would look for another<br>
 &nbsp; &nbsp; &nbsp;solution that might not be as efficient, but could be used meanwhile.<br>
 &nbsp; &nbsp;* So I did the following, I used an SpatialObjectToImageFilter and<br>
 &nbsp; &nbsp; &nbsp;counted the pixels of that Spatial Object. This has given me a<br>
 &nbsp; &nbsp; &nbsp;metric that uses the points inside the image ratio, and the pixels<br>
 &nbsp; &nbsp; &nbsp;that includes the spatial object. With this I am able to register,<br>
 &nbsp; &nbsp; &nbsp;but I face the following problem, which is why I ask you for some<br>
 &nbsp; &nbsp; &nbsp;guidance:<br>
<br>
Given that my registration algorithm using this unefficient metric is quite slow, i would certainly need to have the right scales for dynamic range of paratemers. So what&#39;s the rule to choose them? I can see examples in the ITK Software Guide, but I&#39;d rather have some more information about why those values were chosen.<br>

<br>
Thank you in advance,<br>
<br>
<br>
Antonio Foncubierta<br>
<br>
<br></div>
2009/1/16 Antonio Foncubierta &lt;<a href="mailto:antonio.foncubierta@gmail.com" target="_blank">antonio.foncubierta@gmail.com</a> &lt;mailto:<a href="mailto:antonio.foncubierta@gmail.com" target="_blank">antonio.foncubierta@gmail.com</a>&gt;&gt;<div class="Ih2E3d">
<br>
<br>
 &nbsp; &nbsp;Thank you very much for your quick answer, Luis. As requested, I<br>
 &nbsp; &nbsp;will give as many details as possible:<br>
<br></div>
 &nbsp; &nbsp; &nbsp; 1. I create an itkImage using a SpatialObjectToImageFilter. This<div class="Ih2E3d"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;image contains an ellipsoid with radii 10 15 20, for instance.<br>
 &nbsp; &nbsp; &nbsp; 2. I want to make a registration of a certain Spatial Object with<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;that Image. The starting Spatial Object is another ellipsoid<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with radii, for example, 5, 5, 5. I set the Spatial Object<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;offset in a way so that the ellipsoid centre fits the Image<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Gravity Center (I use a MomentCalculator to get that value).<br></div>
 &nbsp; &nbsp; &nbsp; 3. I start the registration method using an Affine Transform,<div class="Ih2E3d"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;because the starting ellipsoid needs a scale change.<br></div>
 &nbsp; &nbsp; &nbsp; 4. The result is that the optimizer doesn&#39;t have anything to<div class="Ih2E3d"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;optimize, because the SimpleModelToImageMetric GetValue method<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;returns the number of Spatial Object points in the Image<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(every point in the image has value=1). Therefore, the metric<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;is already maximized. The result is a small ellipsoid fully<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;contained inside the image.<br></div>
 &nbsp; &nbsp; &nbsp; 5. In some other cases, I located the starting spatial object<div class="Ih2E3d"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;outside the gravity center of the image and then started the<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registration method. The result then was a randomly shaped<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ellipsoid (it depends on where I put the center and the<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;original size of it) which has all of its points inside the<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;image. The Optimizer returns the same parameters once it<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;achieves a maximum in the metric, no matter how many<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iterations I allow the registration method to run.<br>
<br>
 &nbsp; &nbsp;Those results have made me think that I must change the metric so<br>
 &nbsp; &nbsp;that it has a maximum when all the points are inside the image and<br>
 &nbsp; &nbsp;the spatial object volume is as high as possible.<br>
<br>
 &nbsp; &nbsp;Any ideas?<br>
<br>
 &nbsp; &nbsp;I also would like to apologize if you understood that I was<br>
 &nbsp; &nbsp;reporting a problem in the registration methods or examples (which<br>
 &nbsp; &nbsp;obviously work perfectly). My intention was to find what I am doing<br>
 &nbsp; &nbsp;wrong or what I could probably use to solve _my_ problem.<br>
<br>
 &nbsp; &nbsp;Thank you in advance,<br>
<br>
 &nbsp; &nbsp;Antonio Foncubierta<br>
<br>
<br>
 &nbsp; &nbsp;2009/1/16 Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com" target="_blank">luis.ibanez@kitware.com</a><br></div>
 &nbsp; &nbsp;&lt;mailto:<a href="mailto:luis.ibanez@kitware.com" target="_blank">luis.ibanez@kitware.com</a>&gt;&gt;<div><div></div><div class="Wj3C7c"><br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Hi Antonio,<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;the ImageToSpatialObjectRegistrationMethod&lt;&gt; that is illustrated<br>
 &nbsp; &nbsp; &nbsp; &nbsp;in the<br>
 &nbsp; &nbsp; &nbsp; &nbsp;examples<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Insight/Examples/Registration<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ModelToImageRegistration1.cxx<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ModelToImageRegistration2.cxx<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;should, in principle, work with any of the ITK Transforms.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;It is likely that the problem that you faced when using an<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Affine transform are more related to:<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A) Poor choice of parameter scaling values (the array<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;that is passed to the Optimizer in order to compensate<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for the difference in dynamic range between Translation<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and Rotation/Scale components.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; B) Poor choice of Optmizer parameters.<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Of course, the option of writing your own Metric is always worth<br>
 &nbsp; &nbsp; &nbsp; &nbsp;considering, but that is independent of the need for solving (A)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;and (B) properly.<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;In general, when you report that something &quot;doesn&#39;t work&quot;, it is<br>
 &nbsp; &nbsp; &nbsp; &nbsp;very helpful to describe *exactly* what the result was, and how<br>
 &nbsp; &nbsp; &nbsp; &nbsp;do you arrive to the conclusion that &quot;it doesn&#39;t work&quot;.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Please give us more detail on what you observed....<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thanks<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Luis<br>
<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;---------------------------<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Antonio Foncubierta wrote:<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Hello,<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;I am trying to develop a Model Based Registration Method,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and I started using the example mentioned by the Itk<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Software Guide and included in the 3.6 version of Insight:<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;***ModelToImageRegistration1.cxx***. I have been trying to<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;adapt the example to work with my data: 3D Images. Achieving<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;that was not a big deal, but I started to struggle when I<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wanted the Transform to be an itkAffineTransform, which<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;includes a scale change. The example explicitly says that<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;the SimpleImageToSpatialObjectMetric is designed considering<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;no scale changes, and it says it right, because the metric<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;doesn&#39;t work as I required. (It does work as expected, though).<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;So my main problem now is finding a way to define a metric<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;that maximizes both the ****number of Spatial Object Points<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inside the Image**** and the ****Spatial Object Volume****.<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;The first one is easy, as it is exactly what the above<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mentioned example does, but I haven&#39;t found a way to compute<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;the Transformed SpatialObject Volume.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;And that&#39;s why I ask you if any of you have found a similar<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;problem and how did you solve it. Also, if any of you know a<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;not-as-simple metric which I could use.<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Thank you in advance,<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PS: The explanation migh be very blurry, so if you don&#39;t<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;undersrtand anything of it, please, just ask. I&#39;d rather<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repeat things in a different way, or attach images to not<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;having help at all ;)<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Antonio Foncubierta<br>
<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;------------------------------------------------------------------------<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_______________________________________________<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Insight-users mailing list<br></div></div>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="mailto:Insight-users@itk.org" target="_blank">Insight-users@itk.org</a> &lt;mailto:<a href="mailto:Insight-users@itk.org" target="_blank">Insight-users@itk.org</a>&gt;<div class="Ih2E3d"><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br>
<br>
<br>
</div></blockquote>
</blockquote></div><br>