[prev in list] [next in list] [prev in thread] [next in thread] 

List:       insight-users
Subject:    Re: [Insight-users] 3D deformable registration
From:       George Iordanescu <giordanescu () cmr ! nunet ! net>
Date:       2004-04-29 2:46:44
Message-ID: 1083206804.4690.15.camel () hp6000
[Download RAW message or body]

Hi Ping, hi Luis,

I am trying to do something similar in 2D (I want to warp the image
myself, based on the results given by the FEMRegistrationFilter). What I
am doing is this:

///cast my image to match the type desired by the warper
  typedef itk::CastImageFilter<Image2DType,FemRegisteredImageType>
CasterType1;
  CasterType1::Pointer caster1 = CasterType1::New();
  caster1->SetInput(ImageToWarp);

  typedef FemRegisteredImageType MovingImageType;
  typedef FemRegisteredImageType FixedImageType;
  typedef FemRegistratorDeformationFieldType     FieldType;

///and now do the warping, using almost the same code 
//from the FEMRegistrationFilter

typedef itk::WarpImageFilter<MovingImageType,FixedImageType,FieldType>
WarperType;
  WarperType::Pointer warper = WarperType::New();


  typedef WarperType::CoordRepType CoordRepType;
  typedef
itk::LinearInterpolateImageFunction<MovingImageType,CoordRepType>
    InterpolatorType1;

  InterpolatorType1::Pointer interpolator = InterpolatorType1::New();

  warper = WarperType::New();
  warper->SetInput( caster1->GetOutput() );
  warper->SetDeformationField( X->GetDeformationField() );
  warper->SetInterpolator( interpolator );
  double spacing[2];
  spacing[0] = m_FixedImage->GetSpacing()[0];
  spacing[1] = m_FixedImage->GetSpacing()[1];
  warper->SetOutputSpacing( spacing );
  double origin[2];
  origin[0] = m_FixedImage->GetOrigin()[0];
  origin[1] = m_FixedImage->GetOrigin()[1];
  warper->SetOutputOrigin( origin );
  FixedImageType::PixelType padValue = 0;
  warper->SetEdgePaddingValue( padValue );
  warper->Update();

Ping I think this should fix your error - the deformation field is of
different type than X->GetOutput(). 

In my case however, the resulted (warped) image is different than
X->GetOutput(). Is this a normal behaviour? 

Thank you for your help.

George


On Wed, 2004-04-28 at 14:43, 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@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@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@itk.org
> 
> 
> ______________________________________________________________________
> Do you Yahoo!?
> Win a $20,000 Career Makeover at Yahoo! HotJobs 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic