[Insight-users] parameters of viola & wells mutual information metric

Kristina Grunewald k.grunewald at dkfz-heidelberg.de
Thu Oct 21 05:03:59 EDT 2004


Hi Luis,

thanks for your reply.
First of all I didn't call GetValueAndDerivative() but GetValue().
I have now reduced the number of sampling points to less than 200.
Using the gaussian kernel takes 0.015 sec per method call.
Using a bspline kernel  of
order 0     0.005 sec
order 1     0.01 sec
order 2     0.016 sec
order 3     0.02 sec
So the computation time is acceptable fast now, but the results are not 
satisfactory.
Anyway, I will probably use another metric.

One question remains though:
I also tried to employ a BSplineDerivativeKernelFunction.
This didn't work at all.
This is due to the fact that an invalid operation is conducted in line 
215 of itkMutualInformationImageToImageMetric.txx.
dLogSumFixed -= log( dSumFixed );
dSumFixed is often negative (it is the sum of the kernel evaluations, 
that are negative in most cases). There should at least be a check for that.

Is this kernel function not intended to be used with the viola & wells 
metric?

Thanks,
Kristina




Luis Ibanez wrote:

>
> Hi Kristina,
>
> In general terms, the computation time of one GetValueAndDerivatives()
> call of the MutualInformation metric, is proportional to he number of
> Sampling points.
>
> Note that, it has been shown both theoretically and experimentally
> that the number of sampling points is almost irrelevant for the
> results of registration based on Mutual Information.
>
> So, in principle, you want to experiment by reducing the number of
> sampling points in this metric.
>
>
> Note that your choice of the KernelFunction is also critical for
> the run-time performance of this metric. Did you found the BSpline
> Kernel to be faster than the default GaussianKernel ??
>
>
> Please let us know,
>
>
>    Thanks
>
>
>      Luis
>
>
>
> -------------------------
> Kristina Grunewald wrote:
>
>> Hello,
>>
>> I am translating an image over another. I now want to compute the 
>> values of the MutualInformationImageToImageMetric at 16 different 
>> positions.
>> It is about 2 3d MR images.
>> FI:
>>  size:    192x256x32
>>  spacing: 1.875x1.875x5.0
>> MI:
>>  size:    256x256x30
>>  spacing: 1.5625x1.5625x6.0
>>
>> I therefore normalised the 2 images, and then set the moving and the 
>> fixed image standard deviation to 0.4 as proposed.
>> As kernel function I use a BSplineKernelFunction of spline order 3.
>> Then I use 1% of the pixels of the larger of the 2 images.
>> This might of course not be enough but my question aims at sth. else.
>> I wonder about the computing time.
>> Computing these 16 values takes about 45 minutes.
>> I am not really translating the mi, i.e. I am not resampling it, I am 
>> just changing the parameters I pass the metric->GetValue() method.
>> Employing a gaussian kernel does't make a difference, it runs for ages.
>>
>> Doing exactly the same with the mattes metric, it goes a lot faster. 
>> But there I have the possiblity to set histogram bins.
>> Computing 6400 values with 1% of the pixels and 10 histogram bins 
>> takes less than 10 minutes and gives me a reasonable result.
>>
>> What could cause this huge difference in computing time?
>> Or am I applying the metric wrongly?
>>
>> Thanks,
>> Kristina
>>
>>
>> _______________________________________________
>> 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