[Insight-users] itk ResampleImageFilter + OutputDirection Problem (dicom)

Aussensaiter s.ganger at hotmail.com
Mon Mar 8 03:56:44 EST 2010



Luis Ibanez wrote:
> 
> Hi Sebastian
> 
> 
> Thanks for your detailed description of the problem.
> 
> 
> 1) If you are using the latest release of ITK, you
>     don't need to use the itk::OrientedImage anymore.
>     The standard itk::Image now behaves the same
>     as the itk::OrientedImage.
> 
> 
> 2)  In order to interpret the correctness of the resampling,
>      we need you to tell us what parameters did you set up
>      in the Affine transform.
> 
>      Please post to the mailing list the Affine transform
>      parameters that you used.
> 
> 
> 3)  Before you called the method:
> 
>               SetOutputDirection(itkimage->GetDirection())
> 
>       did you make sure the the "itkimage" was read in memory ?
> 
>       For example, if "itkimage" is the output of a reader,
>       please make sure that you call "Update()" in that
>       reader, before you call the SetOutputDirection()
>       line shown above.
> 
> 
> 4)  To help you beyond this, we will need you to tell us:
> 
>       A) Parameters of the input image:
> 
>                Origin
>                Spacing
>                Direction cosines
> 
>        B) Parameters that you set in the resampling filter
> 
>                 OutputOrigin
>                 OutputSpacing
> 
>         C)  How did you initialized the AffineTransform
> 
> 
> 
> For a detailed description of how the ResampleImageFilter
> works, you should read the ITK Software Guide:
> 
>            http://www.itk.org/ItkSoftwareGuide.pdf
> 
> In particular,
> 
>             "Section  6.9.4 Resample Image Filter"
> 
> In pdf-pages 254-252
> 
> 
> The source code of the examples described in
> this section are available in:
> 
> 
> Insight/Examples/Filtering
>         ResampleImageFilter.cxx
>         ResampleImageFilter2.cxx
>         ResampleImageFilter3.cxx
>         ResampleImageFilter4.cxx
>         ResampleImageFilter5.cxx
>         ResampleImageFilter6.cxx
>         ResampleImageFilter7.cxx
>         ResampleImageFilter8.cxx
>         ResampleImageFilter9.cxx
>         ResampleOrientedImageFilter.cxx
>         ResampleVolumesToBeIsotropic.cxx
> 
> 
> 
> 
>       Regards,
> 
> 
>                Luis
> 
> 
> -----------------------------------------------------------------------------------
> On Wed, Mar 3, 2010 at 8:52 AM, Aussensaiter <s.ganger at hotmail.com> wrote:
>>
>> Hi.
>> Im using the latest Release of VTK/ITK/GDCM and currently I am working on
>> viewing slices in 3 dimension from a set of dicom slices. I stumbled
>> across
>> a problem and i can't figure out how to solve it, likely because i don't
>> fully understand what the transform/ResampleImageFilter does.
>>
>> I have  a itkOrientedImage that is created from slices, which results in
>> a
>> 3D image.
>> I then pass it to an ResampleImageFilter where i use LinearInterpolation
>> and
>> AffineTransform. So far so good, _but_ if I got 1 dataset that produces
>> problems:
>> http://pubimage.hcuge.ch:8080/     The set(one of them, afterwards i
>> found 2
>> more) that makes problems is the "KNEE" example.
>>
>> I got two cases and two sets, for an example that works heres the "brain"
>> set:
>> http://www.mathworks.com/matlabcentral/fileexchange/2762-dicom-example-files
>>
>> Case 1:
>> I _don't_ use the method "SetOutputDirection(itkimage->GetDirection())"
>> and
>> don't feed the filter with the direction from the image.
>> The brain image is shown exactly as in Slicer3 which i use to compare my
>> results, and isn't a cube with horizontal lines.
>> The images are not taken horizontally, so its a little bit rotated, which
>> can be seen in this image :
>> http://old.nabble.com/file/p27768466/Bildschirmphoto1.png
>> But, the knee image is just a monocoloured canvas with no texture at all,
>> just blank and one colour, so basically useless.
>>
>> Case2:
>> I  _use_ the method "SetOutputDirection(itkimage->GetDirection())" and
>> feed
>> the filter with the direction from the image.
>> Then i get both sample sets correct, but in the brain example the little
>> rotation is missing. And also in the Knee example of course, but that is
>> the
>> only way I can view it anyway.
>>
>> Can someone tell me how to get around this, and how to fix it ? I don't
>> know
>> if I am using the wrong transform, or how to tell the transform how to
>> translate the dimensions ?
>>
>> Thanks, and seeing forward to your help :)
>> --
>> View this message in context:
>> http://old.nabble.com/itk-ResampleImageFilter-%2B-OutputDirection-Problem-%28dicom%29-tp27768466p27768466.html
>> Sent from the ITK - Users mailing list archive at Nabble.com.
>>
>> _____________________________________
>> 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
>>
> _____________________________________
> 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
> 
> 
At first, thank you. I have look into the documentation and the
resampleimagefilter examples, but there are just a few examples for
3D-Resample. So, step by step answers to your questions:

1, I tried that before, it doesn't have any effect so I sticked to
orientedimage till i got the problem solved.
2, I gonna attach the code here
3, Yes, update of the image was called, and the orientation at least in my
opinion seemed to be right 
4, See #2. And im gonna post the last lines of the
itkimage->Print(std::cout) after and before the resample.

So, here's a minimal example of the code:
	itkimage1 = reader1->GetOutput();
	itkimage1->Update();

	typedef itk::AffineTransform<double> TransformType;
	TransformType::Pointer transform = TransformType::New();
	
	typedef itk::LinearInterpolateImageFunction<ImageType, double>
InterpolateType;
	InterpolateType::Pointer interpolator = InterpolateType::New();
	filter1->SetInput(reader1->GetOutput());
	filter1->SetInterpolator(interpolator);
	filter1->SetDefaultPixelValue(0);

	filter1->SetOutputOrigin(itkimage1->GetOrigin());
	filter1->SetOutputSpacing(itkimage1->GetSpacing());

	//This (SetOutputDir) produces the mistake
	//if enabled, just a cubic image is created
        //if disabled, some images are oriented right, while others just
show a blank canvas
	filter1->SetOutputDirection(itkimage1->GetDirection());


filter1->SetOutputStartIndex(itkimage1->GetLargestPossibleRegion().GetIndex());
	ImageType::RegionType inputRegion =
	itkimage1->GetLargestPossibleRegion();
	ImageType::SizeType size = inputRegion.GetSize();
	filter1->SetSize(inputRegion.GetSize());

	filter1->UpdateLargestPossibleRegion();

	filter1->SetTransform( transform );
	filter1->Update();
	itkimage1 = filter1->GetOutput();
	itkimage1->Update();
	itkimage1->Print(std::cout);

Here are the orientations and dimensions
brain before resample:

  RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [256, 256, 20]
  Spacing: [0.859375, 0.859375, 7.07107]
  Origin: [-110.5, -78.3063, -72.7575]
  Direction: 
1 0 0
0 0.99096 -0.134158
0 0.134158 0.99096

  IndexToPointMatrix: 
  0.859375 0 0
0 0.851606 -0.94864
0 0.115292 7.00715

  PointToIndexMatrix: 
  1.16364 0 0
0 1.15312 0.156111
0 -0.0189728 0.140143


brain after Resample with SetOutputDirection:
 RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [256, 256, 20]
  Spacing: [0.859375, 0.859375, 7.07107]
  Origin: [-110.5, -78.3063, -72.7575]
  Direction: 
1 0 0
0 0.99096 -0.134158
0 0.134158 0.99096

  IndexToPointMatrix: 
  0.859375 0 0
0 0.851606 -0.94864
0 0.115292 7.00715

  PointToIndexMatrix: 
  1.16364 0 0
0 1.15312 0.156111
0 -0.0189728 0.140143


brain after Resample with SetOutputDirection commented out(showing the right
orientation):
  RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [256, 256, 20]
  Spacing: [0.859375, 0.859375, 7.07107]
  Origin: [-110.5, -78.3063, -72.7575]
  Direction: 
1 0 0
0 1 0
0 0 1

  IndexToPointMatrix: 
  0.859375 0 0
0 0.859375 0
0 0 7.07107

  PointToIndexMatrix: 
  1.16364 0 0
0 1.16364 0
0 0 0.141421




KNEE before resample:

  RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [560, 560, 26]
  Spacing: [0.285714, 0.285714, 3.79999]
  Origin: [149.324, -115.483, 75.9866]
  Direction: 
-0.10118 0 -0.994868
0.994868 0 -0.10118
0 -1 -0

  IndexToPointMatrix: 
  -0.0289084 0 -3.78049
0.284248 0 -0.384481
0 -0.285714 0

  PointToIndexMatrix: 
  -0.354128 3.48204 0
0 0 -3.5
-0.261808 -0.0266263 0



KNEE after Resample with SetOutputDirection(showing an output):
  RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [560, 560, 26]
  Spacing: [0.285714, 0.285714, 3.79999]
  Origin: [149.324, -115.483, 75.9866]
  Direction: 
-0.10118 0 -0.994868
0.994868 0 -0.10118
0 -1 -0

  IndexToPointMatrix: 
  -0.0289084 0 -3.78049
0.284248 0 -0.384481
0 -0.285714 0

  PointToIndexMatrix: 
  -0.354128 3.48204 0
0 0 -3.5
-0.261808 -0.0266263 0

KNEE after Resample with SetOutputDirection commented out(showing blank
image):
  RequestedRegion: 
    Dimension: 3
    Index: [0, 0, 0]
    Size: [560, 560, 26]
  Spacing: [0.285714, 0.285714, 3.79999]
  Origin: [149.324, -115.483, 75.9866]
  Direction: 
1 0 0
0 1 0
0 0 1

  IndexToPointMatrix: 
  0.285714 0 0
0 0.285714 0
0 0 3.79999

  PointToIndexMatrix: 
  3.5 0 0
0 3.5 0
0 0 0.263159




Sorry for having such an immense information here, and thanks for your help.
:)
-- 
View this message in context: http://old.nabble.com/itk-ResampleImageFilter-%2B-OutputDirection-Problem-%28dicom%29-tp27768466p27818617.html
Sent from the ITK - Users mailing list archive at Nabble.com.



More information about the Insight-users mailing list