[Insight-users] 3D deformable registration
Luis Ibanez
luis.ibanez at kitware.com
Fri, 30 Apr 2004 20:43:45 -0400
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:
>
> > Hi Luis,
> >
> > The problem I want to solve is take out same regions
> > of brains with registration. we have reference brain
> > images and its region mask, then by MaskImageFilter,
> > we can get the region of reference brain, then by
> > using the transformation information given by
> > deformableRegistration1, we warp the region of the
> > reference image, and get the region from the subject*> brain.
> >
> > I have used the MaskImageFilter to get the region i
> > need. and then i try to use WarpImageFilter to get the
> > warped region.
> >
> >
> > I have three questions.
> >
> >
> > through deformableRegistration1, the registration of
> > the fixed 3d brain image and moving 3d brain images
> > has finished.
> >
> > 1. in deformableRegistration1, the transformation
> > information is saved by X->WriteDisplacementField,
> > right? since we are dealing with 3d dataset, we need
> > to uncomment X->WriteDisplacementField(2); right?
> >
> > or can we just use
> > X->WriteDisplacementFieldMultiComponent(); is this
> > for save the whole transform information?
> >
> > 2. how to use the above saved transform information
> > in warpimagefilter in
> > warper->SetDeformationField( ???);
> >
> > 3. warp the region image of the reference image to
> > subject image with the available transform
> > information, or warp the region mask(binary) of
> > reference image and then add MaskImageFilter with the
> > whole warped brain will produce the same results?
> >
> > -Emily
> >
> >
> > --- Luis Ibanez wrote:
> >
> >>Hi Emily,
> >>
> >>
> >>1) You can mask a region of an image by
> >> using the AND image filter.
> >>
> >>
> >
> >
> http://www.itk.org/Insight/Doxygen/html/classitk_1_1AndImageFilter.html
> >
> >> This will work ok if both the mask and
> >> the image are of the same pixel type and
> >> are of "integer" type: {char, short, int,
> >> long}.
> >>
> >>
> >>2) You resample the moving image, using the
> >> WarpImageFilter and providing the deformation
> >> field. Note that the WarpImageFilter requires
> >> you to s pecify an Origin (in physical space)
> >> and a size (in pixels) for the output image.
> >>
> >> What you could do is to take the region from the
> >> moving image and figure out what will be its
> >> bounding box once it is mapped to the coordinate
> >> system of the fixed image. Once you have such
> >> bounding box, you simply feed this information
> >> into the origin and size provided to the Warp
> >> ImageFilter.
> >>
> >> The resulting image will only have the size of
> >> that specified bounding box.
> >>
> >>
> >>
> >>
> >>Regards,
> >>
> >>
> >> Luis
> >>
> >>
> >>------------------
> >>ping chen wrote:
> >>
> >>
> >>>Hello,
> >>>
> >>>I have used DeformableRegistration1.cxx to
> >>
> >>register 3d
> >>
> >>>MRI brain images and i go t the warped whole brain
> >>>image and also the DisplacementField.
> >>>
> >>>I have two problems:
> >>>1. If I have a mask of one region, how i can use
> >>
> >>this
> >>
> >>>mask to take out that only region from the 3d
> >>
> >>images?
> >>
> >>>2. I wonder how i can use this transform
> >>
> >>information
> >>
> >>>from DeformableRegistration1 to warp this region,
> >>>instead of a whole brain?
> >>>
> >>>Thank you.
> >>>emily
> >>>
> >>>
> >>>
> >>
> >>
> >>_______________________________________________
> >>Insight-users mailing list
> >>Insight-users at itk.org
> >>http://www.itk.org/mailman/listinfo/insight-users
> >
> >
> >
> >
> >
> > __________________________________
> > Do you Yahoo!?
> > W in a $20,000 Career Makeover at Yahoo! HotJobs
> > http://hotjobs.sweepstakes.yahoo.com/careermakeover
> >
>
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> *
>
> * *
>
> ------------------------------------------------------------------------
> *Do you Yahoo!?
> Win a $20,000 Career Makeover at Yahoo! HotJobs
> <http://pa.yahoo.com/*http://us.rd.yahoo.com/hotjobs/hotjobs_mail_signature_footer_textlink/evt=23983/*http://hotjobs.sweepstakes.yahoo.com/careermakeover>
> *