[Insight-users] exception when writing row or column images
Luis Ibanez
luis.ibanez at kitware.com
Mon, 19 Apr 2004 14:27:39 -0400
Hi Zach,
This is a safeguard that was introduced on purpose
in order to prevent the missuse of the writers.
If you are sure that you want to save 1-row images,
you can simply override this control.
For this, just go to:
Insight/Code/IO/
itkJPEGImageIO.cxx
move to line 457 and comment out the three lines:
// Make sure the region to be written is 2D
if ( ioRegion.GetRegionDimension() != 2 )
{
itkExceptionMacro(<<"JPEG Writer can only
write 2-dimensional images");
}
What happens is that the method: GetRegionDimension()
considers that an image should have more than one pixel
along every dimension. Therefore, dimensions that are
just one pixel wide, are assumed to be flattened.
We could probably set a flag on the file
itkImageIORegion.h
in order to change the limit from "1" to "0".
In this way, images of one pixel along a dimension
will not considered to be of inferior dimension.
Please let us know if this works for you,
and whether you will find useful to have such
a flag available or not.
Thanks,
Luis
----------------------
Zachary Pincus wrote:
> Hello,
>
> A tool that I'm building sometimes segments out an object that is it
> the far edge of an image, leading me to try to save to disk an image
> that, while 2D by type, consists of a single row or column. (i.e. that
> has a degenerate second dimension.)
>
> Unfortunately, this does not appear to be possible, and instead
> generates the exception:
>
>> itk::ERROR: JPEGImageIO(0x2101070): JPEG Writer can only write
>> 2-dimensional images
>
> (the same general error appears regardless of which ImageIO you choose.)
>
> I'm sure that 1 x n or n x 1 images are valid in most if not all image
> format specifications.
>
> Is this a bug? And if it's been brought up before, I apologize -- I
> didn't find anything on the mailing list archive.
>
> Thanks,
> Zach Pincus
>
> Department of Biochemistry and Program in Biomedical Informatics
> Stanford University School of Medicine
>
>
> Here is code to reproduce this error:
>
> #include "itkImageFileWriter.h"
> #include "itkImage.h"
> #include <iostream>
>
> const unsigned int Dimension = 2;
> typedef unsigned short PixelType;
> typedef itk::Image<PixelType, Dimension> ImageType;
> typedef itk::ImageFileWriter<ImageType> WriterType;
>
> int main(int argc, char *argv[]) {
> ImageType::Pointer image = ImageType::New();
>
> ImageType::IndexType start;
> start[0] = 0;
> start[1] = 0;
>
> ImageType::SizeType size;
> size[0] = 2;
> size[1] = 1;
>
> ImageType::RegionType region;
> region.SetSize( size );
> region.SetIndex( start );
>
> image->SetRegions( region );
> image->Allocate();
> std::cout << image << std::endl;
>
> WriterType::Pointer writer = WriterType::New();
> writer->SetFileName("foo.jpg");
> writer->SetInput(image);
>
> try {
> writer->Update();
> } catch( itk::ExceptionObject & err ) {
> std::cout << "ExceptionObject caught !" << std::endl;
> std::cout << err << std::endl;
> return -1;
> }
> return 0;
> }
>
>
> Running this code results in this:
>
> Image (0x2100420)
> RTTI typeinfo: N3itk5ImageItLj2EEE
> Reference Count: 2
> Modified Time: 4
> Debug: Off
> Observers:
> none
> Source: (none)
> Source output index: 0
> Release Data: Off
> Data Released: False
> Global Release Data: Off
> PipelineMTime: 0
> UpdateMTime: 0
> LargestPossibleRegion:
> Dimension: 2
> Index: [0, 0]
> Size: [2, 1]
> BufferedRegion:
> Dimension: 2
> Index: [0, 0]
> Size: [2, 1]
> RequestedRegion:
> Dimension: 2
> Index: [0, 0]
> Size: [2, 1]
> Spacing: [1, 1]
> Origin: [0, 0]
> PixelContainer: ImportImageContainer (0x21004f0)
> RTTI typeinfo: N3itk20ImportImageContainerImtEE
> Reference Count: 2
> Modified Time: 5
> Debug: Off
> Observers:
> none
> Pointer: 0x2100534
> Container manages memory: true
> Size: 2
> Capacity: 2
>
> ExceptionObject caught !
>
> itk::ExceptionObject (0x2101020)
> Location: "Unknown"
> File: /Volumes/Atlotl/Developer/ITK/ITK-CVS-src/Insight/Code/IO/
> itkJPEGImageIO.cxx
> Line: 459
> Description: itk::ERROR: JPEGImageIO(0x2101070): JPEG Writer can only
> write 2-dimensional images
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
>