[Insight-users] 3D deformable registration

ping chen miw2k at yahoo.com
Wed, 5 May 2004 11:01:40 -0700 (PDT)


Hi Luis, 
 
your suggestion is right. and 3d deformable
registration works great. 

I have one question. is there any example which shows
how to use the written displacement field, instead of
using X->GetDeformationField()? 
after I finished the registration with
deformableregistration1.cxx and saved the displacement
field, I still want to use the displacement field to
warp new regions. it there any way i can avoid doing
the registration again, and just use the displacement
field directly? 

Thanks,
Ping 


--- Luis Ibanez <luis.ibanez at kitware.com> wrote:
> 
> Hi Ping,
> 
> The error is that you are passing the output of the
> FEMRegistrationFilter as deformation field to the
> WarpImageFilter:
> 
> 
>  >   warper->SetDeformationField( X->GetOutput() );
> 
> 
> However, GetOutput() in the FEMREgistrationFilter
> returns
> the resampled moving image, not the deformation
> field.
> 
> 
> Please replace this line with:
> 
>  >   warper->SetDeformationField(
> X->GetDeformationField() );
> 
> 
> 
> Doxygen can always help:
> 
>
http://www.itk.org/Insight/Doxygen/html/classitk_1_1fem_1_1FEMRegistrationFilter.html
>
http://www.itk.org/Insight/Doxygen/html/classitk_1_1fem_1_1FEMRegistrationFilter.html#a24
> 
> 
> 
> Regards,
> 
> 
>     Luis
> 
> 
> -----------------
> ping chen wrote:
> 
> > Hi Luis,
> >  
> > I tried the way you suggested by using
> WarpImageFilter, the code i add 
> > to DeformableRegistration1.cxx is shown below (
> MaskImageType is exactly 
> > the same as the InputImageType)
> > 
> >     typedef itk::Vector< float, 2 >   
> VectorPixelType;
> >     typedef itk::Image<  VectorPixelType, 2 >
> DeformationFieldType;
> >     typedef itk::WarpImageFilter<
> >                           MaskImageType,
> >                           MaskImageType,
> >                           DeformationFieldType  > 
>    WarperType;
> >   typedef itk::LinearInterpolateImageFunction<
> >                                    MaskImageType,
> >                                    double         
> >  InterpolatorType;
> >   WarperType::Pointer warper = WarperType::New();
> >   InterpolatorType::Pointer interpolator =
> InterpolatorType::New();
> >   warper->SetInput( maskreader->GetOutput() );
> >   warper->SetInterpolator( interpolator );
> >   warper->SetOutputSpacing(
> inputreader->GetOutput()->GetSpacing() );
> >   warper->SetOutputOrigin(
> inputreader->GetOutput()->GetOrigin() );
> >   warper->SetDeformationField( X->GetOutput() );
> >   warper->Update();
> >  
> > just like what in DeformableRegistration2.cxx did.
> >  
> > but i got below errors:
> >  
> > Building dependencies cmake.check_depends...
> > Building object file DeformableRegistration1.o...
> >
>
/Users/ping/Desktop/deformableR_worksfor2D/DeformableRegistration1.cxx:
> In
> >    function `int main(int, char**)':
> >
>
/Users/ping/Desktop/deformableR_worksfor2D/DeformableRegistration1.cxx:417:
> 
> > error: no
> >    matching function for call to
> `itk::WarpImageFilter<MaskImageType,
> >    MaskImageType, main(int, 
> > char**):DeformationFieldType>:setDeformationField
> >    (ImageType*)'
> >
>
/Users/ping/Desktop/InsightToolkit-1.6.0/Code/BasicFilters/itkWarpImageFilter.txx:115:
> 
> > error: candidates
> > are: void itk::WarpImageFilter<TInputImage,
> TOutputImage,
> >   
>
TDeformationField>:setDeformationField(TDeformationField*)
> [with
> >    TInputImage = MaskImageType, TOutputImage =
> MaskImageType, 
> > TDeformationField
> >    = main(int, char**):DeformationFieldType]
> > make[1]: *** [DeformableRegistration1.o] Error 1
> > make: *** [default_target] Error 2
> > since i want to count the voxels in regions of
> each subjects, i need to 
> > convert the reference brain(for which i have the
> Alta mask) to each 
> > subject brain, when i look into the
> DeformableRegistration1.cxx code, i 
> > cant find anywhere i can replace the moving image
> with mask image. to 
> > me, in DeformableRegistration1.cxx, the only line
> connected to warped 
> > image is
>
X->WriteWarpedImage((X->GetResultsFileName()).c_str());
> which 
> > is defined in itkFEMRegistrationFilter.h,
> itkFEMRegistrationFilter.txx   
> > Can you show me a simple way to replace this
> movingimage input with the 
> > Mask?
> >  
> > Thank you.
> > Ping
> > *//* 
> > */Luis Ibanez <luis.ibanez at kitware.com>/* wrote:
> > 
> > 
> >     Hi Ping,
> > 
> >     Your process of Atlas-Based segmentation can
> easily
> >     be done with small modifications of the
> Example:
> > 
> >     DeformableRegistration1.cxx
> >     or DeformableRegistration2.cxx
> > 
> >     You don't need the MaskImageFilter,
> >     you don't need the AndImageFilter,
> > 
> >     You simply need to make sure that you use as
> Moving
> >     image, the Brain image for which you do have
> the
> >     segmentation mask.
> > 
> >     In the current examples, the input of the
> WarpImage
> >     filter is the Moving image. You simply have to
> >     replace this input with the Mask that is
> representing
> >     your segmentation of the Moving image. The
> WarpImage
> >     filter will use the deformation field
> resulting from
> >     the registration process in order to map the
> Mask
> >     into the fixed image.
> > 
> >     In that way you will obtain a deformed Mask
> that
> >     corresponds to a segmentation of the Fixed
> Image.
> > 
> >     You will f ind this illustrated in the Slided
> on
> >     Non-Rigid Registration from the MICCAI 2004
> Tutorial
> > 
> >     http://www.itk.org/HTML/Tutorials.htm
> > 
> >     more specifically:
> > 
> >    
>
http://www.itk.org/CourseWare/Training/NonRigidRegistrationMethods.pdf
> > 
> > 
> >     You just need to add an extra ImageFileReader
> to the
> >     example, and connect the output of this reader
> as
> >     input to the WarpImageFilter. Then set the
> filename
> >     of this reader to the filename of the Mask.
> > 
> > 
> > 
> >     Regards,
> > 
> > 
> >     Luis
> > 
> > 
> >     -----------------
> >     ping chen wrote:
> > 
> 
=== message truncated ===


	
		
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs  
http://hotjobs.sweepstakes.yahoo.com/careermakeover