[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