[Insight-users] hi

Luis Ibanez luis.ibanez at kitware.com
Sat Apr 28 13:55:34 EDT 2012


Hi Santhosh,

Here are some ideas that may help.

0) In the resample filter use the SetReferenceImage option
     instead of using SetSize, SetOrigin, SetSpacing... etc.
     Using the Reference image is a less error-prone method.

1)  Test the code with a null transformation (zero rotation,
     zero translation).

2)  Take advantage of the CenteredTransformInitializer class,
      (with the "Geometry" option) to create a transform that by
     default maps the input image to the output image. In that
     way you don't have to manually compute the centering
     transformation.


Please let us know how it goes.


   Thanks


      Luis


-------------------------------------------
On Thu, Apr 19, 2012 at 8:37 AM, santhosh jayapal <nuteron at gmail.com> wrote:
> Hi Luis,
> How are you doing?
> Am working on displaying dicom files on the ipad using itk. Had mailed you
> few months back about some issues i was facing with dicom and itk and your
> suggestions were greatly helpfull. The project was on hold for some reason
> and got resumed few days back.
> Am facing with a problem from 2 days, ie i want to rotate a dicom image
> using the 'itk: resamping filters' for rotation. I followed the example file
> and implemented it as you had given. But what is happening is the filters
> output is always coming null to the writers input.
> Will share the code with you, please see if you can find any thing wrong
> happening in this code.
>
>  const     unsigned int   Dimension = 2;
>     typedef unsigned short GrayScalePixelType;
>     typedef itk::Image <GrayScalePixelType,2> GrayscaleImageType; //Image -
> Contain the pixels and no. of dimensions.
>
>     typedef itk::ImageFileWriter <GrayscaleImageType> writerType;
>     writerType::Pointer writer = writerType::New();
>     writer->SetFileName([@"/Users/santoshjayapal/skullTempNewFileter.dcm"
> UTF8String]);
>
>     typedef itk::ImageFileReader <GrayscaleImageType> GrayScaleReaderType;
> //ImageFileReader -This source object is a general filter to read data from
>     GrayScaleReaderType::Pointer GrayScaleReader =
> GrayScaleReaderType::New(); //pointer - LightObject is the highest level
> base class for most itk objects.
>
>     //*/
>     //adding gdcm object for the reader:
>     typedef itk::GDCMImageIO    ImageIOType; //GDCMImageIO.h - brief ImageIO
> class for reading and writing DICOM V3.0
>     ImageIOType::Pointer dicomIO = ImageIOType::New();
>     GrayScaleReader->SetImageIO( dicomIO );
>     GrayScaleReader->SetFileName([dicomFilePath UTF8String]);
>
>
>     typedef itk::ResampleImageFilter<
>     GrayscaleImageType, GrayscaleImageType >  FilterType;
>
>     FilterType::Pointer filter = FilterType::New();
>
>
>     typedef itk::AffineTransform< double, Dimension >  TransformType;
>     TransformType::Pointer transform = TransformType::New();
>     // Software Guide : EndCodeSnippet
>
>
>     typedef itk::LinearInterpolateImageFunction<
>     GrayscaleImageType, double >  InterpolatorType;
>     InterpolatorType::Pointer interpolator = InterpolatorType::New();
>
>     filter->SetInterpolator( interpolator );
>
>     filter->SetDefaultPixelValue( 100 );
>
>     GrayScaleReader->Update();
>
>     const GrayscaleImageType * inputImage = GrayScaleReader->GetOutput();
>
>     const GrayscaleImageType::SpacingType & spacing =
> inputImage->GetSpacing();
>     const GrayscaleImageType::PointType & origin  = inputImage->GetOrigin();
>     GrayscaleImageType::SizeType size =
>     inputImage->GetLargestPossibleRegion().GetSize();
>
>     filter->SetOutputOrigin( origin );
>     filter->SetOutputSpacing( spacing );
>     filter->SetOutputDirection( inputImage->GetDirection() );
>     filter->SetSize( size );
>
>     filter->SetInput( GrayScaleReader->GetOutput() );
>     writer->SetInput( filter->GetOutput() );
>
>
>        TransformType::OutputVectorType translation1;
>
>     const double imageCenterX = origin[0] + spacing[0] * size[0] / 2.0;
>     const double imageCenterY = origin[1] + spacing[1] * size[1] / 2.0;
>
>     translation1[0] =   -imageCenterX;
>     translation1[1] =   -imageCenterY;
>
>     transform->Translate( translation1 );
>
>
>     const double degreesToRadians = vcl_atan(1.0) / 45.0;
>     const double angle = 45.00 * degreesToRadians;
>     transform->Rotate2D( -angle, false );
>
>     TransformType::OutputVectorType translation2;
>     translation2[0] =   imageCenterX;
>     translation2[1] =   imageCenterY;
>     transform->Translate( translation2, false );
>     filter->SetTransform( transform );
>         try
>     {
>         writer->Update();
>     }
>     catch( itk::ExceptionObject & excep )
>     {
>         std::cerr << "Exception caught !" << std::endl;
>         std::cerr << excep << std::endl;
>     }
>
> Am not getting any errors though, but wen i update the write outside the try
> the code crashes. Please let me know what is wrong , i was thinking i need
> to compile the itk libraries again using cmake since its been a long time
> since i worked on the project and some file might have been deleted, should
> i do that pls let me know.
>
> Thanks ,
> Santhosh


More information about the Insight-users mailing list