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

Luis Ibanez luis.ibanez at kitware.com
Tue, 24 Feb 2004 15:22:26 -0500


Hi Lucas,

This exception indicates that the object you
are connecting is not actually an image.
The CopyInformation() method perform a dynamic_cast
from a DataObject pointer into an ImageBase pointer.

dynamic_casting throws exceptions when the pointer
is not actually the type that you are trying to
convert to.

Can you please post the typedef declarations that
your are using for:

1) The input image type  of the Fast Marching filter
2) The output image type of the Fast Marching filter
3) The Fast Marcnhing filter itself


The current tests of the FastMarching filter
are passing fine on all platforms. Including
the Examples in Insight/Examples/Segmentation.


Thanks


   Luis



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

> Hi Luis and Lydia,
> 
> I've just checked out a CVS copy so I'm using the last version of 
> FastMarchingImageFilter.
> When doing an Update on this filter I'm catching this exception:
> 
> /Exception caught ! fastMarching
> 
> itk::ExceptionObject (0x11021d0)
> Location: "Unknown"
> File: /bin/ITK-1.6.0/include/InsightToolkit/Common/itkImageBase.txx
> Line: 159
> Description: itk::ERROR: Image(0x1101f00): 
> itk::ImageBase::CopyInformation() cannot cast PKN3itk10DataObjectE to 
> PN3itk9ImageBaseILj2EEE
> /
> 
> Could you please give me some feed back on this ?
> 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
>