Hi all,<br><br>I am trying to do BSpline transform with multi-resolution 
image registration, but I got some trouble on how to configure the itk::<div id=":5q">BSplineDeformableTransform&lt;double,3,3&gt;
 object when moving from one resolution level to the next.  Through google-search, I can not find any clear solution for this. ITK does have an example with multi-grid BSpline transform, but it is not in the framework of multi-resolution image registration.<br>
<br>I tried the stuff of GridScheduleComputer and 
UpsampleBSplineParametersFilter found in ITK-journal based on ITK&#39;s multi-resolution image registration example.  
Unfortunately, I got a crash when proceeding from resolution level 0 to 
level 1.  What I did is something like this:<br>
<br>//===================================================================================<br>void <br>RegistrationInterfaceCommand::Execute(itk::Object * object, <br>    const itk::EventObject &amp; event)<br>{<br>....<br>

<br>    if (Registration-&gt;GetCurrentLevel() != 0)<br>    {<br>        Optimizer-&gt;SetMaximumStepLength( Optimizer-&gt;GetMaximumStepLength() / 4.0 );<br>        Optimizer-&gt;SetMinimumStepLength( Optimizer-&gt;GetMinimumStepLength() / 10.0 );<br>

        Optimizer-&gt;SetNumberOfIterations( 100 );<br>        Optimizer-&gt;SetRelaxationFactor( 0.7 );<br>        <br><br>        typedef itk::UpsampleBSplineParametersFilter&lt;TransformType::ParametersType, TransformType::ImageType&gt;<br>

            GridUpsamplerType;<br>    <br>        GridUpsamplerType::Pointer Upsampler = GridUpsamplerType::New();<br>        Upsampler-&gt;SetCurrentGridOrigin(Transform-&gt;GetGridOrigin());<br>        Upsampler-&gt;SetCurrentGridSpacing(Transform-&gt;GetGridSpacing());<br>

        Upsampler-&gt;SetCurrentGridRegion(Transform-&gt;GetGridRegion());<br><br>        TransformType::OriginType    NewOrigin;<br>        TransformType::SpacingType    NewSpacing;<br>        TransformType::RegionType    NewRegion;<br>

        mGridScheduleComputer-&gt;GetBSplineGrid(vLevel, NewRegion, NewSpacing, NewOrigin);<br><br>        Upsampler-&gt;SetRequiredGridOrigin(NewOrigin);<br>        Upsampler-&gt;SetRequiredGridSpacing(NewSpacing);<br>        Upsampler-&gt;SetRequiredGridRegion(NewRegion);<br>

<br>        TransformType::ParametersType Parameters = Registration-&gt;GetLastTransformParameters();<br>        TransformType::ParametersType NewParameters;<br>        Upsampler-&gt;UpsampleParameters(Parameters, NewParameters);<br>

<br>        Transform-&gt;SetGridOrigin(NewOrigin);<br>        Transform-&gt;SetGridSpacing(NewSpacing);<br>        Transform-&gt;SetGridRegion(NewRegion);<br>        Transform-&gt;SetParameters(NewParameters);<br>
<br>        {<br>            std::cout &lt;&lt; &quot;Parameters: &quot; &lt;&lt; Transform-&gt;GetNumberOfParameters() &lt;&lt; std::endl;<br>            std::cout &lt;&lt; &quot;Full transform description &quot;;<br>            Transform-&gt;Print( std::cout );    <br>

        }<br><br>        Registration-&gt;SetInitialTransformParameters(Transform-&gt;GetParameters());<br>        Registration-&gt;SetInitialTransformParametersOfNextLevel(NewParameters);<br>
        unsigned int NumberOfParameters = Transform-&gt;GetNumberOfParameters();<br><br>        const unsigned long NumberOfSamples =<br>            static_cast&lt;unsigned long&gt;(<br>            vcl_sqrt( static_cast&lt;double&gt;( NumberOfParameters ) *<br>
            static_cast&lt;double&gt;( Registration-&gt;GetFixedImage()-&gt;GetLargestPossibleRegion().GetNumberOfPixels() ) ) );<br>
        Metric-&gt;SetNumberOfSpatialSamples( NumberOfSamples );<br><br>        OptimizerType::ScalesType OptimizerScales = OptimizerType::ScalesType( NumberOfParameters );<br>
        OptimizerScales.Fill( 1.0 );<br>        Optimizer-&gt;SetScales( OptimizerScales );<br>    }<br>....<br>}<br>//===================================================================================<br>
<br>I debugged into the code.  I found that when proceeding from level 0 to level 1, an exception was caught
 as:<br><br><br>&quot;<br>ExceptionObject caught!<br><br>itk::ExceptionObject (000000000000B6D6A0)<br>location: &quot;void __cdecl itkLLBSplineBaseTransform&lt;double, 3, 3&gt;::SetParameters(const calss itk::OptimizerParameters&lt;double&gt; &amp;)&quot;<br>
File: d\projects\itk\insighttoolkit-4.1.0\modules\core\transform\include<br>itkBSplineBaseTransform.hxx<br>Line 92<br>Description: itk::ERROR: BSplineDeformableTransform (00000000004595520): Mismatch between parameters size 3435973826 and expected number of parameters 5070<br>
&quot;<br><br>Am I wrong somewhere? I am working with ITK4.1 
in Visual Studio 2010.  Or, could you please point me any direction?  Any comments will be appreciated by the ITK newbie, me. Thanks!</div><br><br>