[Insight-users] trouble using the bulktransform
Luis Ibanez
luis.ibanez at kitware.com
Sun Feb 28 17:03:52 EST 2010
Hi Erik,
Why are you using a static_cast in ?:
m_BSplineTransform->SetBulkTransform(
static_cast<VersorRigid3DTransformType*> (initialTransform));
That static_cast should be necessary.
---
I suspect that the problem is mostly related to
the initialization of the BSpline Transform itself.
Particularly related to the image Direction.
You may want to use the following class:
Insight/Code/Review/
itkBSplineDeformableTransformInitializer.h
itkBSplineDeformableTransformInitializer.txx
That is described in this Insight Journal paper:
"Helper class for initializing the grid parameters of a
BSpline deformable transform by using an image as reference"
http://www.insight-journal.org/browse/publication/216
http://hdl.handle.net/1926/1338
Note that is simply a complement to the use of the
Bulk Transform, not a replacement for it.
Regards,
Luis
-----------------------------------------------------------------------
On Fri, Feb 26, 2010 at 10:42 AM, Erik Türke <tuerke at cbs.mpg.de> wrote:
> Hi!
>
> I am trying to use the SetBulkTransform method of the
> BSplineDeformableTransform.
>
> The two images which i want to register are totally shifted, so i want to
> use a simple translation as the bulk transform.
>
> So what i am doing is:
>
> m_BSplineTransform->SetBulkTransform(static_cast<VersorRigid3DTransformType*>
> (initialTransform));
>
> If i print out the parameters of the initialTransform with:
>
> std::cout << static_cast<VersorRigid3DTransformType*>
> (initialTransform)->GetParameters() << std::endl;
>
> the output is: [0, 0, 0, 96.2941, 92.5804, 38.6559], what is totally right.
>
> Now i setup the BSplineTransform:
>
> typedef typename BSplineTransformType::RegionType
> BSplineRegionType;
> typedef typename BSplineTransformType::SpacingType
> BSplineSpacingType;
> typedef typename BSplineTransformType::OriginType
> BSplineOriginType;
> typedef typename BSplineTransformType::DirectionType
> BSplineDirectionType;
>
> BSplineRegionType bsplineRegion;
> typename BSplineRegionType::SizeType gridSizeOnImage;
> typename BSplineRegionType::SizeType gridBorderSize;
> typename BSplineRegionType::SizeType totalGridSize;
>
> gridSizeOnImage.Fill(UserOptions.BSplineGridSize);
> gridBorderSize.Fill(3); //Border for spline order = 3 (1
> lower, 2 upper)
> totalGridSize = gridSizeOnImage + gridBorderSize;
>
> bsplineRegion.SetSize(totalGridSize);
> BSplineSpacingType bsplineSpacing =
> m_FixedImage->GetSpacing();
>
> BSplineOriginType bsplineOrigin = m_FixedImage->GetOrigin();
>
> typename FixedImageType::SizeType fixedImageSize =
> m_FixedImage->GetBufferedRegion().GetSize();
>
> for (unsigned int r = 0; r < FixedImageDimension; r++) {
> bsplineSpacing[r] *= static_cast<double>
> (fixedImageSize[r] - 1) / static_cast<double> (gridSizeOnImage[r]
> - 1);
> }
>
> BSplineDirectionType bsplineDirection =
> m_FixedImage->GetDirection();
> BSplineSpacingType gridOriginOffset = bsplineDirection *
> bsplineSpacing;
>
> bsplineOrigin = bsplineOrigin - gridOriginOffset;
>
> m_BSplineTransform->SetGridSpacing(bsplineSpacing);
> m_BSplineTransform->SetGridOrigin(bsplineOrigin);
> m_BSplineTransform->SetGridRegion(bsplineRegion);
> m_BSplineTransform->SetGridDirection(bsplineDirection);
>
> typedef typename BSplineTransformType::ParametersType
> BSplineParametersType;
>
> m_NumberOfParameters =
> m_BSplineTransform->GetNumberOfParameters();
>
> BSplineParametersType bsplineParameters(m_NumberOfParameters);
> bsplineParameters.Fill(0.0);
>
> m_BSplineTransform->SetParameters(bsplineParameters);
>
> m_RegistrationObject->SetInitialTransformParameters(m_BSplineTransform->GetParameters());
> If i now start the registration with 1 iteration, the result is
> totally shifted again.
> I am sure, the initial transform is right, because i got those values by
> using the itk initializer class and tested the values as the initial
> parameters of a VersorRigid3DTransform with iterations= 0 as well.
> With the VersorRigid3DTransform, the images are aligned.
> Why is the bulktransform not working here?
>
> I becoming a little desperate now :-( . Can somebody give me a hint?
>
> Thanks!
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
More information about the Insight-users
mailing list