[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