[Insight-developers] Re: Bug somewhere in ResampleImageFilter?
Mark Foskey
mark_foskey at unc . edu
Thu, 26 Jun 2003 09:45:09 -0400
Piloo --
As I think about it, Lydia and Luis are probably right. That suggests
that what you may really want to do is, when transforming a mask, set
the interpolator to NearestNeighborInterpolateImageFunction. That way
you always end up with a binary mask. And you shouldn't get any holes.
Luis Ibanez wrote:
>
> Hi Lydia,
>
> I agree with you in that interpolation in a binary image doesn't make
> much sense. However the same rounding error will degrade the
> interpolation of any image with integer pixel type (e.g. char, short
> long, signed or unsigned).
>
>
> Extending the trick to N-D should be possible, however the
> code in itkLinearInterpolateImageFunction.txx will have
> a very different look.
>
> Currently in itkLinearInterpolateImageFunction.txx we
> are computing the full contribution factor for each neighbor
> of the continuous index to be evaluated. We end up computing
> somehting like
>
> interpolatedValue = 0
>
> for all neighbors
> {
> interpolatedValue += K1 * K2 * K3 * K4.... * KN * neighborPixelValue
> }
>
>
> Where "N" is the image dimension and the terms Ki are
> "(overlap)" or "(1-overlap)" along dimension "i".
> The number of neighbors in the delaunay region used for linear
> interpolation is 2^N.
>
> The drawback of the current computation is that we are not
> taking advantage of the potential factorization in the products
> of the Ki terms,
>
> So in an N-D cell we are computing
>
> N * (2 ^ N) Multiplications
> N * (2^ (N-1) ) Sums
>
> (e.g. in 3D == 24 mult and 12 sums )
>
> when in principle the same task could be done with
>
> 2^N-1 Multiplications
> 2^(N+1) -2 Sums
>
> (e.g. in 3D == 7 mult and 14 sums )
>
> when the terms are factorized.
>
> The implementation will require a bit of auxiliary
> memory in which the interpolations will be done
> along a single direction at a time, and each time
> the dimension of the problem will be reduced by
> one.
>
>
> Since this is the most commonly used interpolator
> in the registration framework, it is worth to give
> it a try to implement the factorization.
>
>
>
> Luis
>
>
> ----------------------
> Lydia Ng wrote:
>
>> Hi Stephen and Luis,
>>
>> I am not totally convinced that we should classify the "rounding error"
>> as a bug.
>>
>> I am not quite sure that using a linear interpolation for a binary image
>> makes sense if what you really want back is a warp/transform binary
>> image. One way to this more robustly is to create a signed distance map
>> from the binary image, then warp/transform the map and threshold to get
>> the warped binary image - ala
>> S. P. Raya and J. K. Udupa, "Shape-based interpolation of
>> multidimensional objects",
>> IEEE Trans. on Medical Imaging, vol. 9, no. 1, pp 32-42, 1990.
>>
>>
>>
>>
>>>> If instead you do
>>>> v = pixel1 + overlap * (pixel2-pixel1)
>>>> there are fewer multiplications (faster?) and the rounding error
>>>>
>>>
>> will
>>
>>
>>>> not occur.
>>>>
>>>
>>
>> I agree this would help with rounding error. Does this trick extend to
>> N-D?
>>
>> In any case, if we are to replace/modify the existing linear
>> interpolator we really should do some performance testing so that we can
>> systematically compare before and after.
>>
>> My 2 cents worth ....
>>
>> - Lydia
>>
>>
>>
>>
>>
>
>
>
--
Mark Foskey (919) 843-5436 Computer-Aided Diagnosis and Display Lab
mark_foskey at unc . edu Department of Radiology, CB 7515, UNC
http://www . cs . unc . edu/~foskey Chapel Hill, NC 27599-7515