[Insight-users] question about a mapping obtained from combining a bulk affine transform with a deformable registration

John Drozd john.drozd at gmail.com
Mon Nov 9 17:26:23 EST 2009


Never mind. I figured it out. It is the original unaltered moving image.

john

On Mon, Nov 9, 2009 at 4:59 PM, John Drozd <john.drozd at gmail.com> wrote:

> Hello,
>
> I successfully combined an 3D affine transform (as a result of a 3D centred
> affine registration "ImageRegistration9revised.cxx" ), and then I fed this
> in as a bulk affine transform to be used with a deformable transformation to
> register two different subject dicom mri 3d images from two different
> people. In both cases I used a Mattes Mutual Information metric for
> multi-modality registration.
>
> I have my original fixed image which I am using as an atlas and my original
> moving image which is my brain subject. In the code I obtained the mapping
> of specific points in the brain ventricles from the fixed image atlas to the
> moving image brain subject as per the code snippet  below (*I have also
> attached to this email the affine and deformable registration ".cxx" files
> and affine transform ".tfm" file*):
>
> *My confusion is, that I am wondering in reference to this "mapping from a
> point in the fixed image to a point in the moving image":  Is this mapped
> point a point in the moving image in its original unaltered state, or is the
> mapped point a point in the moving image in a state that has had the bulk
> affine transform applied to it, or is the mapped point a point in the moving
> image in a state that has had the bulk affine transform and deformation
> applied to it?*
>
> CODE SNIPPET BELOW:
> // Generate the explicit deformation field resulting from the registration.
>   if( argc > 6 )
>     {
>
>     typedef itk::Vector< float, ImageDimension >  VectorType;
>     typedef itk::Image< VectorType, ImageDimension >  DeformationFieldType;
>
>     DeformationFieldType::Pointer field = DeformationFieldType::New();
>     field->SetRegions( fixedRegion );
>     field->SetOrigin( fixedImage->GetOrigin() );
>     field->SetSpacing( fixedImage->GetSpacing() );
>     field->SetDirection( fixedImage->GetDirection() );
>     field->Allocate();
>
>     typedef itk::ImageRegionIterator< DeformationFieldType > FieldIterator;
>     FieldIterator fi( field, fixedRegion );
>
>     fi.GoToBegin();
>
>     TransformType::InputPointType  fixedPoint;
>     TransformType::OutputPointType movingPoint;
>     DeformationFieldType::IndexType index;
>
>     VectorType displacement;
>
>     while( ! fi.IsAtEnd() )
>       {
>       index = fi.GetIndex();
>       field->TransformIndexToPhysicalPoint( index, fixedPoint );
>
>       movingPoint = transform->TransformPoint( fixedPoint );
>
>       displacement = movingPoint - fixedPoint;
>       fi.Set( displacement );
>       ++fi;
>       }
>
>     //added by jd
>     TransformType::InputPointType  fixedPoint2;
>     TransformType::OutputPointType movingPoint2;
>
>     //picked a point in right ventricle in atlas (fixed subject)
>     fixedPoint2[0] = 299.6;
>     fixedPoint2[1] = 138.7;
>     fixedPoint2[2] = -104.9;
>
>     movingPoint2 = transform->TransformPoint( fixedPoint2 );
>
>     std::cout << "fixedPoint2[0] = " << fixedPoint2[0] << std::endl;
>     std::cout << "fixedPoint2[1] = " << fixedPoint2[1] << std::endl;
>     std::cout << "fixedPoint2[2] = " << fixedPoint2[2] << std::endl <<
> std::endl;
>
>     std::cout << "movingPoint2[0] = " << movingPoint2[0] << std::endl;
>     std::cout << "movingPoint2[1] = " << movingPoint2[1] << std::endl;
>     std::cout << "movingPoint2[2] = " << movingPoint2[2] << std::endl;
>
> Thanks,
> john
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20091109/c8a2516d/attachment.htm>


More information about the Insight-users mailing list