[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
>