[Insight-users] Question on BSplineDecompositionImageFilter

Jochen Cammin jcammin1 at jhmi.edu
Thu Jan 21 14:49:41 EST 2010


Hi Luis,

Thanks a lot for your detailed explanation. It now makes perfect sense. 
My confusion was, as you suspected, that I thought the output of the 
upsampler are BSpline coefficients.

Cheers,
Jochen


Luis Ibanez wrote:
> Hi Jochen,
> 
> 
> Here is what the code in DeformableRegistration15.cxx is doing:
> 
> 
> A)   A BSplineDeformable transform is computed for
>        a coarse grid (small number of nodes = 5 inside + 3 in the
>        border, for a total of 8x8x8 nodes).
> 
>        This BSpline transform has been computed by the time
>        the first deformable registration stage finishes in line : 554
> 
> 
> B)   The BSpline transform internally store the coefficients in
>        image that can be accessed via the GetCoefficientImage()
>        method.  As it is done in line: 627.
> 
>        For the case of a 3D BSpline Deformable transform.
>        The coefficients are stored in three separate images,
>        One image contains the "X" components of the deformation
>        vectors in the grid nodes, another image contains the "Y"
>        components, and the third image contains the "Z" components.
> 
> 
> C)   The "upsampler" filter in lines 627  to 632 is resampling
>        these components from the 8x8x8 grid used in the Coarse
>        to a (20+3 = 23 nodes along one dimension, for a total of
>        23x23x23 nodes in the grid).
> 
>        The interpolator used in this process is the
>        BSplineResampleImageFunction.
> 
>        Note that, this is the part that may be misleading in the
>        process.  The output of this upsampling is NOT an image
>        of coefficients, but an actual sampling of the deformation
>        field that is represented by the BSpline grid.
> 
>        It just happens that we chose to sample this deformation
>        field at a resolution equal to the one of the new grid.
> 
>         Since these values are in the "space" of the deformation
>         field, we must follow with the filter that estimates the
>         coefficients of a BSpline grid, that will be a good representation
>         for this new deformation field.
> 
> 
> D)   The upsampled image (which is a deformation field) is then
>        passed to the BSplineDecomposition filter in lines 634-640.
> 
>        and from this we obtain actual BSpline coefficients that are
>        then used for initializing a higher resolution BSplineTransform.
> 
> 
> 
>      Please let us  know if you still see
>      any problem with this process,
> 
> 
>              Thanks
> 
> 
>                       Luis
> 
> 
> ---------------------------------------------------------------
> On Wed, Jan 20, 2010 at 5:23 PM, Jochen Cammin <jcammin1 at jhmi.edu> wrote:
>> Hi,
>>
>> Upon responding to another question on this forum, I looked at examples
>> using the class BSplineDecompositionImageFilter. DeformableRegistration6
>> and DeformableRegistration15 both make use of this filter.
>>
>> Here is my confusion: from the documentation of that class (and
>> logically) I understand that the input is an image and the output are
>> the b-spline coefficients. However, in the two examples a b-spline
>> coefficient image is the input which is then decomposed into b-spline
>> coefficients. There is a comment section in the example codes that says:
>>
>>   //  Software Guide : BeginLatex
>>   //
>>   //  Now we need to initialize the BSpline coefficients of the higher
>>   //  resolution transform. This is done by first computing the actual
>>   //  deformation field at the higher resolution from the lower
>>   //  resolution BSpline coefficients. Then a BSpline decomposition is
>>   //  done to obtain the BSpline coefficient of the higher resolution
>>   //  transform.
>>   //
>>   //  Software Guide : EndLatex
>>
>> From this comment I would expect the input to the decomposition filter
>> to be the components of the deformation field. However, I can't see any
>> code that would calculate the deformation vectors. Further down the code
>> the input to the decomposition filter is then given as
>>
>> ...
>> upsampler->SetInput( transformLow->GetCoefficientImage()[k] );
>> ...
>> decomposition->SetInput( upsampler->GetOutput() );
>> ...
>>
>> So clearly, the input are b-spline coefficients and not the deformation
>> field. What am I missing or misunderstanding?
>>
>> Thank you,
>> Jochen
>>
>>
>>
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.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
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jcammin1.vcf
Type: text/x-vcard
Size: 408 bytes
Desc: not available
URL: <http://www.itk.org/pipermail/insight-users/attachments/20100121/022591cf/attachment.vcf>


More information about the Insight-users mailing list