[Insight-users] BSpline Transformation and binary images

Luis Ibanez luis.ibanez at kitware.com
Sat Oct 24 16:05:59 EDT 2009


Hi Serena,

You seem to have forgotten to mention the:

    Number of samples used in the Mattes Mutual Information metric.

At this point, that's the main suspect of the
long computation time that you are observing.


Please let us know,


    Thanks


       Luis


---------------------------------------------------------------------------
On Thu, Oct 22, 2009 at 2:44 PM, Serena Fabbri <fabbri at u.washington.edu> wrote:
>
> Hi Luise,
>
> This is great, I will try the correct MMI!!
>
> Regarding the Observer: good idea, thank you for the suggestion.
>
> For the registration task:
> I am using:
> Cardinality Metric with Amoeba optmizer,  BSpline  Transformation and
> NearestNeighbor Interpolator
> My binary images are (80;80;101) pixelsize and (4;4;1) mm spacing and
> (13;13;13) nodes Bspline grid.
>
>
> Thank you again for any advice.
> Serena.
>
>
>
>
> On Thu, 22 Oct 2009, Luis Ibanez wrote:
>
>> Hi Serena,
>>
>>
>> The code in
>>
>>    Insight/Code/Algorithms
>>
>> has already been fixed.
>>
>> --
>>
>> I'm still working  on patching the one in
>>
>>     Insight/Code/Review
>>
>> This is described in :
>>
>>    http://public.kitware.com/Bug/view.php?id=9745
>>
>> ---
>>
>>
>> Regarding the Observer:
>>
>> The number of iterations, can actually be provided
>> by introducing a counter in the observer itself and
>> counting events.
>>
>> ---
>>
>>
>> The time that you report is unusually long for registering
>> an image of that size.
>>
>> How many samples are you using in MattesMI  ?
>>
>>
>>   Please let us know,
>>
>>
>>          Thanks
>>
>>
>>               Luis
>>
>>
>>
>> --------------------------------------------------------------------------------
>
> -------------
>>
>> On Thu, Oct 22, 2009 at 1:12 PM, Serena Fabbri <fabbri at u.washington.edu>
>> wrote:
>>>
>>>
>>> Hi Luise,
>>>
>>> I am glad that my suggestions were useful for you.
>>> When the MMI code will be fixed, do you write an email?
>>>
>>> Yes, I get output from  optimizer->GetCachedValue() This instruction is
>>> inside the observer code. The registration runs but it is very slow, my
>>> computer is new......so what could it be wrong in my Registration task?
>>> I am using (13;13;13) nodes Bspline grid.
>>>
>>> I have read the the Amoeba optimizer documentation again and I have not
>>> found a function to obtain the number of iteration. Am I wrong?
>>>
>>>
>>> Thank again for your help.
>>>
>>>
>>> Serena.
>>>
>>>
>>>
>>>
>>>
>>> On Tue, 20 Oct 2009, Luis Ibanez wrote:
>>>
>>>> Hi Serena,
>>>>
>>>> Thanks a lot for tracking this down.
>>>>
>>>> Your findings are quite interesting.
>>>>
>>>> The three lines of code that you have indicated are indeed performing
>>>> incorrect computations, in the case where of number of bins is == 2.
>>>>
>>>> I'm preparing a patch for this class,
>>>>
>>>> Insight/Code/Algorithms/
>>>> itkMattesMutualInformationImageToImageMetric.txx
>>>>
>>>> and its multi-threaded version:
>>>>
>>>> Insight/Code/Review/
>>>> itkOptMattesMutualInformationImageToImageMetric.txx
>>>>
>>>> that will cast properly the variable m_NumberOfHistogramBins
>>>> to the type OffsetValueType (which is signed).
>>>>
>>>> We need to run this in a couple of experimental builds first,
>>>> and then we should put together a test that exercises this
>>>> metric on a binary image.
>>>>
>>>>
>>>> Again, Thanks for tracking this issue,
>>>> and pointing to the location of the problem in the code.
>>>>
>>>>
>>>> About your second question:
>>>>
>>>> A typical registration process with images that are of size 100^3
>>>> pixels,  should take more than 30 minutes in a modern computer.
>>>>
>>>> Are you seeing any output from the Command observer ?
>>>> Something is certainly wrong with the process.
>>>>
>>>> Also, please not that the call
>>>>
>>>>      get_num_evaluations()
>>>>
>>>> is not quite equivalent, to number of Iterations.
>>>>
>>>> In the case of the Amoeba optimizer, what
>>>> happens is that the Metric may be computed multiple
>>>> times in the process of computing a single Iteration
>>>> of the optimizer.  The method get_num_evaluations
>>>> tells you how many times the metric was evaluated
>>>> in the last iteration of the optimizer, not how many
>>>> iterations have been used by the optimizer.
>>>>
>>>>
>>>>     Regards,
>>>>
>>>>
>>>>            Luis
>>>>
>>>>
>>>> -------------------------------------------------------------------
>>>> On Thu, Oct 15, 2009 at 2:49 PM, Serena Fabbri <fabbri at u.washington.edu>
>>>> wrote:
>>>>>
>>>>> Hi Luis,
>>>>>
>>>>> I have taken a look to itkMattesMutualInformationImageToImageMetric,
>>>>> and
>>>>> the
>>>>> problems seem to be:
>>>>> -line 241 (Initialize):  m_NumberOfHistogramBins is unsigned long and
>>>>> the
>>>>> value of brackets expression is (-2). It can not be assigned.
>>>>> -line 677 (ComputeFixedImageParzenWindowIndices): same problem and
>>>>> besides
>>>>> pindex is unsigned int and it can not be (-1) the correct value.
>>>>> -line 758 (GetValue): same problem and again
>>>>> movingImageParzenWindowindex
>>>>> is
>>>>> unsigned int and it can not be (-1).
>>>>>
>>>>> I am not sure that to do a cast is ok because after the cast (line 682
>>>>> ComputeFixedImageParzenWindowIndices),
>>>>>  (*iter).FixedimageParzenWindowIndex
>>>>> will be 1 and 2 and they (at least 2) can not be indexes  for
>>>>> m_FixedImageMarginalPDF (line 767 GetValue) because the dimension of
>>>>> this
>>>>> array is the number of the bin (=2).
>>>>>
>>>>> Do you agree with me?
>>>>>
>>>>>
>>>>> Now I am running Cardinality Metric with Amoeba optmizer and BSpline
>>>>>  Transformation.
>>>>> My image are (80;80;101) pixelsize and (4;4;1)mm spacing.
>>>>>
>>>>> I have set
>>>>>        simplexDelta.Fill( 5.0 );
>>>>>        optimizer->AutomaticInitialSimplexOff();
>>>>>        optimizer->SetInitialSimplexDelta( simplexDelta );
>>>>>        optimizer->SetParametersConvergenceTolerance( 2 );
>>>>>        optimizer->SetFunctionConvergenceTolerance(1);
>>>>>        optimizer->SetMaximumNumberOfIterations( 200 );
>>>>>
>>>>> I'd like to ask you how long the registration task can be, because it
>>>>> started 2 days ago and it is still running.
>>>>> Besides I have put optimizer->GetOptimizer()->get_num_evaluations() in
>>>>> observer code but it doesn't work. How can I do to visualize the number
>>>>> of
>>>>> iteration during the process?
>>>>>
>>>>>
>>>>> Thank you for any info.
>>>>>
>>>>> Serena.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Mon, 12 Oct 2009, Luis Ibanez wrote:
>>>>>
>>>>>> Hi Serena,
>>>>>>
>>>>>> I believe Hans Johnson reported a while ago that this
>>>>>> metric implementation had a bug that make it unsuitable
>>>>>> for registering binary images.
>>>>>>
>>>>>> (My mistake for suggesting to use this metric for this
>>>>>> case without having tried).
>>>>>>
>>>>>> Your options at this point are:
>>>>>>
>>>>>>
>>>>>>           A) Help us debug the metric   :-)
>>>>>>
>>>>>>
>>>>>>           B) Use the Cardinality Metric instead.
>>>>>>                itkMatchCardinalityImageToImageMetric.h
>>>>>>
>>>>>>
>>>>>> Please let us know what would be your preference,
>>>>>>
>>>>>>
>>>>>>    Thanks
>>>>>>
>>>>>>
>>>>>>           Luis
>>>>>>
>>>>>>
>>>>>> -----------------------------------------------------------------
>>>>>> On Mon, Oct 12, 2009 at 7:23 PM, Serena Fabbri
>>>>>> <fabbri at u.washington.edu>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> I am trying to register binary images of the head using Non Rigid
>>>>>>> Registration. They are (80;80;101) pixelsize and (4;4;1)mm spacing.
>>>>>>>
>>>>>>> I use Mattes-MI, LBFGSB, NearestNeighbor interpolator and BSpline
>>>>>>> Transformation.
>>>>>>> After reading the email
>>>>>>> http://www.itk.org/pipermail/insight-users/2007-November/024178.html
>>>>>>>
>>>>>>> I set 2 bin and 10% of statistic for MI and I have got this message:
>>>>>>>
>>>>>>> Starting Registration
>>>>>>> ExceptionObject caught !
>>>>>>>
>>>>>>> itk::ExceptionObject (0x1900fb0)
>>>>>>> Location: "void
>>>>>>> itk::MattesMutualInformationImageToImageMetric<TFixedImage,
>>>>>>> TMovingImage>::GetValueAndDerivative(typename
>>>>>>> itk::ImageToImageMetric<TFixedImage, TMovingImage>::ParametersType&,
>>>>>>> typename itk::ImageToImageMetric<TFixedImage,
>>>>>>> TMovingImage>::MeasureType&,
>>>>>>> typename itk::ImageToImageMetric<TFixedImage,
>>>>>>> TMovingImage>::DerivativeType&) const [with TFixedImage = main(int,
>>>>>>> char**)::FixedImageType, TMovingImage = main(int,
>>>>>>> char**)::MovingImageType]"
>>>>>>> File: /Users/InsightToolkit-
>>>>>>>
>>>>>>> 3.10.0/Code/Algorithms/itkMattesMutualInformationImageToImageMetric.txx
>>>>>>> Line: 1160
>>>>>>> Description: itk::ERROR:
>>>>>>> MattesMutualInformationImageToImageMetric(0x1900260): Fixed image
>>>>>>> marginal
>>>>>>> PDF summed to zero
>>>>>>>
>>>>>>> I have increased the statistic until 30% and I get the same error.
>>>>>>> Is it possible that BSpline Transformation is not suitable for binary
>>>>>>> images
>>>>>>> registration?
>>>>>>>
>>>>>>> Any suggestion will be appreciate.
>>>>>>>
>>>>>>> Thanks.
>>>>>>>
>>>>>>> Serena.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _____________________________________
>>>>>>> Powered by www.kitware.com
>>>>>>>
>>>>>>> Visit other Kitware open-source projects at
>>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>>
>>>>>>> Please keep messages on-topic and check the ITK FAQ at:
>>>>>>> http://www.itk.org/Wiki/ITK_FAQ
>>>>>>>
>>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>>> http://www.itk.org/mailman/listinfo/insight-users
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>
>
>


More information about the Insight-users mailing list