[Insight-users] setting the spacing when writing an image to disk

Luis Ibanez luis.ibanez at kitware.com
Sat, 24 Apr 2004 13:26:20 -0400


Hi Lucas,

Thanks for letting us know.

The message you get about regions is normal,
it is a remanent of a debugging effort that
we should now remove.


About your code: please try the following,
just after calling Update in the FastMarching
filter add the two lines:

  fastMarching->GetInput()->Print( std::cout );
  fastMarching->GetOutput()->Print( std::cout );

I'm wandering if the spacing of the image is
getting lost before it arrives to the fastMarching
filter.


Please let us know what you find.


    Thanks


      Luis


---------------------------------------------
Lucas Lorenzo wrote:

> Hi Luis,
> 
> I followed your directives and it does work fine.
> I'll go over my code again and if I find what's wrong I'll let you know.
> Also, if you have further suggestions please let me know.
> One last comment: the following message keeps appearing when I run this 
> program with my vtk file:
> 
> lucas:Borrar> FastMarchingImageFilter slc05fr_filt06.vtk out.vtk 114 115 
> 0.75 -0.4 12 10 11
> inputRequestedRegion: ImageRegion (0xbfffed60)
> Dimension: 2
> Index: [-1, -1]
> Size: [258, 258]
> 
> largestPossibleRegion: ImageRegion (0x11004fc)
> Dimension: 2
> Index: [0, 0]
> Size: [256, 256]
> 
> I don't know if this is useful but the header for the vtk file is as 
> follows:
> 
> # vtk DataFile Version 3.0
> VTK File Generated by Insight Segmentation and Registration Toolkit (ITK)
> BINARY
> DATASET STRUCTURED_POINTS
> DIMENSIONS 256 256 1
> SPACING 1.33 1.33 1.0
> ORIGIN 0 0 0.0
> POINT_DATA 65536
> SCALARS scalars unsigned_short 1
> LOOKUP_TABLE default
> 
> Thanks,
> 
> Lucas
> 
> On Apr 23, 2004, at 3:43 PM, Luis Ibanez wrote:
> 
> 
>     Hi Lucas,
> 
>     I just tested the capability of the FastMarching filter for using
>     the Image Spacing, and it is working fine with the CVS version.
> 
> 
>     Something else should be happening in your installation.
> 
>     Please do the following test:
> 
>     1) Compile the example:
> 
> 
>     Insight/Examples/Segmentation/
>     FastMarchingImageFitler.cxx
> 
>     2) Provide as input the .vtk image you have with pixel spacing
>     different from unit
> 
>     3) Check if the output image carries the same spacing as the
>     input one.
> 
> 
>     This tests works for me both for .vtk and .mhd (MetaImage)
>     images.
> 
> 
>     Please let us know what you find.
> 
> 
>     Thanks
> 
> 
> 
>     ----------------------
>     Lucas Lorenzo wrote:
> 
>         Sorry, I kept making the same mistake once and once again. I
>         guess that what I meant was obvious but let's clarify it anyway:
>         when I talk about the "header files" I meant the headers for the
>         image files (in vtk format).
>         Cheers,
>         Lucas
>         On Apr 22, 2004, at 10:49 AM, Lucas Lorenzo wrote:
>         Hi Luis,
>         I'm attaching the file GeoACPSLS.cxx (which is a modified
>         version of
>         itkGeodesicActiveContourShapePriorLevelSetImageFilterTest.cxx).
>         When compiling against released version 1.6 the output after
>         running
>         one single iteration is as follows (as you see all image files are
>         in vtk format):
>         lucas:GeodesicAcContPrSh> GeoACPSLS PrincipalModes_fr06 5 0.75 -0.4
>         12 0.2 2.0 0.15 0.8 1 slc5_fr_filt09.vtk 112 120
>         Potential map created successfully !
>         ../DATAP091703/Anatomical/SLICE_05/PrincipalModes_fr06/mean.vtk
>         shape components set successfully !
>         Filter parameters set successfully !
>         Thresholder parameters set successfully !
>         1: [0.00025, 0, 0, 0, 0, 0, 0] 0.185567
>         The input file header is:
>         # vtk DataFile Version 3.0
>         VTK File Generated by Insight Segmentation and Registration Toolkit
>         (ITK)
>         BINARY
>         DATASET STRUCTURED_POINTS
>         DIMENSIONS 256 256 1
>         SPACING 1.33 1.33 1.0
>         ORIGIN 0 0 0.0
>         POINT_DATA 65536
>         SCALARS scalars unsigned_short 1
>         LOOKUP_TABLE default
>         And the header file for the vtk image resulting from the fast
>         marching algorithm is like this:
>         # vtk DataFile Version 3.0
>         VTK File Generated by Insight Segmentation and Registration Toolkit
>         (ITK)
>         BINARY
>         DATASET STRUCTURED_POINTS
>         DIMENSIONS 256 256 1
>         SPACING 1 1 1.0
>         ORIGIN 0 0 0.0
>         POINT_DATA 65536
>         SCALARS scalars float 1
>         LOOKUP_TABLE default
>         When compiling against the CVS copy I checked out about one week
>         and
>         a half ago the output is like this:
>         lucas:GeodesicAcContPrSh> GeoACPSLS PrincipalModes_fr06 5 0.75 -0.4
>         12 0.2 2.0 0.15 0.8 1 slc5_fr_filt09.vtk 112 120
>         Potential map created successfully !
>         ../DATAP091703/Anatomical/SLICE_05/PrincipalModes_fr06/mean.vtk
>         shape components set successfully !
>         Filter parameters set successfully !
>         Thresholder parameters set successfully !
>         inputRequestedRegion: ImageRegion (0xbfffeb80)
>         Dimension: 2
>         Index: [-1, -1]
>         Size: [258, 258]
>         largestPossibleRegion: ImageRegion (0x1101f1c)
>         Dimension: 2
>         Index: [0, 0]
>         Size: [256, 256]
>         inputRequestedRegion: ImageRegion (0xbfffeb80)
>         Dimension: 2
>         Index: [-1, -1]
>         Size: [258, 258]
>         largestPossibleRegion: ImageRegion (0x1101f1c)
>         Dimension: 2
>         Index: [0, 0]
>         Size: [256, 256]
>         1: [0.00025, 0, 0, 0, 0, 0, 0] 0.185567
>         And the header files are still as before (that is, the spacing
>         problem still exists).
>         I hope that this information is clear enough. If not, please let me
>         know.
>         Thanks for your help,
>         Lucas
>         <GeoACPSLS.cxx>
>         On Apr 21, 2004, at 7:51 PM, Luis Ibanez wrote:
>         Hi Lucas,
>         Can you please post a minimal (working) example
>         of code that illustrates this behavior. We need
>         some initial code for reproducing the problem
>         that you report.
>         Thanks
>         Luis
>         -----------------------
>         Lucas Lorenzo wrote:
>         HI Luis,
>         I've checked out a CVS copy last week and I still have the
>         same problem.
>         Also now, when running my code the following messages appear:
>         inputRequestedRegion: ImageRegion (0xbfffeb70)
>         Dimension: 2
>         Index: [-1, -1]
>         Size: [258, 258]
>         largestPossibleRegion: ImageRegion (0x1101c5c)
>         Dimension: 2
>         Index: [0, 0]
>         Size: [256, 256]
>         inputRequestedRegion: ImageRegion (0xbfffeb70)
>         Dimension: 2
>         Index: [-1, -1]
>         Size: [258, 258]
>         largestPossibleRegion: ImageRegion (0x1101c5c)
>         Dimension: 2
>         Index: [0, 0]
>         Size: [256, 256]
>         Do you have any suggestions ?
>         Thanks,
>         Lucas
>         On Feb 19, 2004, at 12:05 AM, Luis Ibanez wrote:
>         Hi Lucas,
>         The changes to the FastMarchingImageFilter have
>         been commited. The output image now uses the
>         spacing and origin of the input image.
>         Please let us know if you find any problem.
>         Thanks
>         Luis
>         ------------------------
>         Lucas Lorenzo wrote:
>         Hi Luis,
>         sorry for answering so late.
>         I've tried what you suggested but I have a run time
>         error "Abort trap" when trying to apply the
>         GetOutput() method to my FastMarchingImageFilter
>         object.
>         Let me know if there are any other changes we could
>         try.
>         Thanks,
>         Lucas
>         On Feb 11, 2004, at 5:58 AM, Luis Ibanez wrote:
>         Hi Lucas,
>         Thanks for pointing this out.
>         Please try the following:
>         Edit the file:
>         Insight/Code/Algorithms/
>         itkFastMarchingImageFilter.txx
>         Go to to line : 150
>         and after the statement
>         output->Allocate();
>         add
>         output->CopyInformation( this->GetInput() );
>         Then, go to line : 157
>         and after the statement
>         m_LabelImage->Allocate();
>         add
>         m_LabelImage->CopyInformation( this->GetInput() );
>         This should copy the origin and spacing
>         of the input image into the output and
>         label images.
>         Then recompile your application and try
>         running it to see if the correct spacing
>         appears in the file.
>         Please let us know what you find, so we proceed
>         to do the same changes in the repository.
>         Thanks
>         Luis
>         ----------------------
>         Lucas Lorenzo wrote:
>         Hi Luis,
>         sorry for having such a mess in my code.
>         I'm using an application based on
>         ITK/Testing/Code/Algorithms/
> 
>         itkGeodesicActiveContourShapePriorLevelSetImageFilterTest_2.cxx
>         The spacing is being carried through the
>         pipeline with no problem, except when
>         arriving to the point when I have to
>         generate my initial contour (signed distance
>         map) from a seed point using
>         FastMarchingImageFilter. It is the output
>         from this filter the one that has the
>         "default" spacing (and I think that this new
>         spacing is carried to the end to the output
>         image) and I can't find any method to set
>         the correct spacing.
>         Thanks,
>         Lucas
>         On Tuesday, February 10, 2004, at 08:38 PM,
>         Luis Ibanez wrote:
>         Hi Lucas,
>         Why are you setting the spacing on the ImageIO
>         object instead of the image itself ?
>         You should just carry the spacing through the
>         pipeline. Does your input image has an invalid
>         spacing ?
>         An option in that case is to use the
>         ChangeInformationImageFilter
>         http://www.itk.org/Insight/Doxygen/html/
> 
>         classitk_1_1ChangeInformationImageFilter.html
>         This filter carries the data buffer of the
>         input image to the output image, and allows
>         you to alter the meta-data such as image
>         origin and spacing.
>         Please don't use this filter for processing
>         images of human beings or any other living
>         organisms, since chances are that you will
>         make somebody operate in a liver instead of
>         a lung.
>         In the long term the right thing to do is
>         to fix the source of your images which is
>         where the real spacing information should
>         be comming from.
>         Regards,
>         Luis
>         ======================================
>         -------------------
>         Lucas Lorenzo wrote:
>         Hi all,
>         I'm trying to write an image to disk in vtk
>         format.
>         By default the spacing is set to 1 1 1. I'd
>         like to change it so
>         I'm doing the following:
>         /#include "itkVTKImageIO.h"
>         int main( int argc, char * argv[] )
>         {
>         /* /* Typedefs of components. */*/
>         const unsigned int ImageDimension = 2;
>         typedef unsigned char BinaryPixelType;
>         typedef
>         itk::Image<BinaryPixelType,ImageDimension>
>         BinaryImageType;
>         /*// read the input image and get the
>         spacing from it:*/
>         typedef itk::VTKImageIO ImageIOType;
>         ImageIOType::Pointer IO1 = ImageIOType::New();
>         original_reader->SetImageIO(IO1);
>         double dx,dy,dz;
>         original_reader->Update();
>         dx = IO1->GetSpacing(0);
>         dy = IO1->GetSpacing(1);
>         dz = IO1->GetSpacing(2);
>         /*// here I'm omitting when I process the
>         input image
>         // write the image to a file but perviously
>         set the spacing
>         */
>         binary_writer->SetFileName("out.vtk");
> 
>         binary_writer->SetInput(thresholder->GetOutput());
>         ImageIOType::Pointer IO2 = ImageIOType::New();
>         IO2->SetSpacing(0,dx);
>         IO2->SetSpacing(1,dy);
>         IO2->SetSpacing(2,dz);
>         binary_writer->SetImageIO(IO2);
>         try
>         {
>         binary_writer->Update();
>         }
>         catch( itk::ExceptionObject & exp )
>         {
>         std::cerr << "Exception caught ! binary
>         image writer" << std::endl;
>         std::cerr << exp << std::endl;
>         return -1;
>         }
>         return 0;
>         }
>         /
>         When I execute this program I have a
>         "segmentation fault" run
>         time error.
>         If I ommit the line setting the spacing in
>         the z axis ("/
>         IO2->SetSpacing(2,dz); /") the programs
>         executes without
>         crashing but the spacing is not really set,
>         that is, in the
>         header of the output vtk file (out.vtk) you
>         can still see
>         "SPACING 1 1 1.0" instead of "SPACING dx dy
>         1.0".
>         Any clue of what am I doing wrong ?
>         Thanks,
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research
>         and Training Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
> 
>         _______________________________________________
>         Insight-users mailing list
>         Insight-users at itk.org
> 
>         http://www.itk.org/mailman/listinfo/insight-users
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research
>         and Training Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research and
>         Training Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
>         _______________________________________________
>         Insight-users mailing list
>         Insight-users at itk.org
>         http://www.itk.org/mailman/listinfo/insight-users
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research and Training
>         Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
>         _______________________________________________
>         Insight-users mailing list
>         Insight-users at itk.org
>         http://www.itk.org/mailman/listinfo/insight-users
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research and Training Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
>         Lucas Lorenzo
>         University of Utah
>         Nora Eccles Harrison CardioVascular Research and Training Institute
>         Fellows Room
>         95 South 2000 East
>         Salt Lake City, UT 84112-5000
>         e-mail: lucas at cvrti.utah.edu
>         telephone: 801-587-9536
> 
> 
> 
> 
> 
> Lucas Lorenzo
> 
> University of Utah
> Nora Eccles Harrison CardioVascular Research and Training Institute
> Fellows Room
> 95 South 2000 East
> Salt Lake City, UT 84112-5000
> 
> e-mail: lucas at cvrti.utah.edu
> telephone: 801-587-9536
>