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

Luis Ibanez luis.ibanez at kitware.com
Wed, 21 Apr 2004 21:51:36 -0400


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