[Insight-users] 2D deformable registration
ping chen
miw2k@yahoo.com
Wed May 19 17:48:24 EDT 2004
Hi Luis,
I just CVS Insight yesterday and reinstall the
Insight, I Compile the code with the newly installed
ITK, the warped image is still the same as input
image. do you have any suggestions? Thanks.
-Ping
--- Luis Ibanez <luis.ibanez@kitware.com> wrote:
>
> Hi Ping,
>
> A quick question before we go into details...
>
> Did you tried this process with a CVS updated
> *this week* ?
>
> A bug was recently found in the process of
> reading Vector images. The effect is that
> when reading an image of vectors, such as a
> deformation field, all the pixels turned out
> to be null. This bug was fixed at the end
> of last week.
>
> If you are using a version with this bug,
> your deformation field is being set as null
> vectors in memory and therefore is not
> applying *any* deformation to your data.
>
> Please try updating your CVS checkout and
> let us know if you continue experiencing
> any problems.
>
>
> Thanks,
>
>
> Luis
>
>
>
> -------------------
> ping chen wrote:
> > Hi Luis,
> >
> > I try to use the deformation field to warp a
> image. i
> > use the deformation field generated by
> > DeformableRegistration1.cxx, in which displacement
> for
> > x and displacement for y are both generated, also
> a
> > vector displacement image
> VectorDeformationField.mhd
> > is generated.
> >
> > the 1st way for me to use the generated x y
> > displacement, i use itkCompose2DVectorImageFilter
> to
> > combine x displacement and y displacement into a
> > vector image. and then use this vector image to
> set
> > the deformation field for the warper.
> >
> > the problem with this way is that the warped
> result
> > from this way is different from the warped image
> from
> > the DeformableRegistration1.cxx, though similiar.
> >
> > the 2nd way, i just generated the imagereader to
> > directly read VectorDeformationField.mhd, and then
> use
> > this reader output to set the deformation field of
> the
> > warper.
> >
> > the problem with this way is that this method
> didnt
> > work. the output of warper is exactly the same as
> the
> > moving image.
> >
> > below is part of the code: the 1st way
> > typedef itk::Compose2DVectorImageFilter<
> >
> InputImageType,DeformationFieldType>
> > FilterType;
> > FilterType::Pointer filter = FilterType::New();
> > filter->SetInput1(inputreader1->GetOutput());
> > filter->SetInput2(inputreader1->GetOutput());
> > filter->Update();
> > warper->SetInterpolator( interpolator );
> > warper->SetOutputSpacing(
> > towarpreader->GetOutput()->GetSpacing() );
> > warper->SetOutputOrigin(
> > towarpreader->GetOutput()->GetOrigin() );
> > warper->SetDeformationField( filter->GetOutput()
> );
> > warper->SetInput( towarpreader->GetOutput() );
> > try
> > {
> > warper->Update();
> > }
> >
> > the 2nd way:
> > typedef itk::Vector< float, 2 >
> VectorPixelType;
> > typedef itk::Image< VectorPixelType, 2 >
> > DeformationFieldType;
> > typedef itk::ImageFileReader< DeformationFieldType
> >
> > FieldReaderType;
> > typedef itk::WarpImageFilter<
> > InputImageType,
> > InputImageType,
> > DeformationFieldType >
>
> > WarperType;
> > warper->SetInput( towarpreader->GetOutput() );
> > try
> > {
> > warper->Update();
> > }
> > WarperType::Pointer warper = WarperType::New();
> > InterpolatorType::Pointer interpolator =
> > InterpolatorType::New();
> > warper->SetInterpolator( interpolator );
> > warper->SetOutputSpacing(
> > towarpreader->GetOutput()->GetSpacing() );
> > warper->SetOutputOrigin(
> > towarpreader->GetOutput()->GetOrigin() );
> >
> >
>
warper->SetDeformationField(fieldreader1->GetOutput());
> > warper->SetInput( towarpreader->GetOutput() );
> > try
> > {
> > warper->Update();
> > }
> >
> > I cant figure out why the warped result from 1way
> is
> > different from the warped result from
> > DeformableRegistration1.cxx, and why the 2nd way
> > doesnt work. do you have any suggestions? Thanks.
> >
> > -Ping
> >
> >
> > --- ping chen <miw2k@yahoo.com> wrote:
> >
> >>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@kitware.com> wrote:
> >>
> >>>Hi Ping,WarperType::Pointer warper =
> >
> > WarperType::New();
> > InterpolatorType::Pointer interpolator =
> > InterpolatorType::New();
> > warper->SetInterpolator( interpolator );
> > warper->SetOutputSpacing(
> > towarpreader->GetOutput()->GetSpacing() );
> > warper->SetOutputOrigin(
> > towarpreader->GetOutput()->GetOrigin() );
> >
> >
>
warper->SetDeformationField(fieldreader1->GetOutput());
> >
> >
> >
> >>>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
>
=== message truncated ===
__________________________________
Do you Yahoo!?
SBC Yahoo! - Internet access at a great low price.
http://promo.yahoo.com/sbc/
More information about the Insight-users
mailing list