[Insight-users] cannot read a tiff image

Julien Jomier jjomier at cs.unc.edu
Fri Jan 7 05:45:19 EST 2005


Hi Bear,

What version of Insight are you using? We have fixed a couple of bugs 
since 1.8, it might be a good idea to use the current ITK cvs.

Moreover, there is still a bug with your image, I think due to byte 
swapping on windows platforms, I'll try to fix it as soon as I can.

Julien

bear wrote:
> hi Luis,
>     I do not change my code.Below is the code I read as tiff and write as png
> I use *unsigned short* to read, *unsigned short* to *unsighed char* rescale to
> [0,255] and then *unsigned char* to save in png.
> 
> I am supprised the saved png file is only about 1k bytes are identify gives the
> result
> w1.png PNG 1280x1024 PseudoClass 256c 1kb 0.050u 0:01
>   Histogram:
>    1310720: (  0,  0,  0)       black
> it is all *black* indeed, not *seen* as black in naive image viewer.
> save as bmp also get all *black* pixels.
> 
> The code "readtiff.cxx" is used as below and run with "./readtiff w1.tiff w1.png"
> 
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkImage.h"
> #include "itkRescaleIntensityImageFilter.h"
> int main(int ac, char* av[])
> {
> 	if(ac < 3)
>         {  
> 		std::cerr << "Usage: " << av[0] << " input output\n";
> 		return 1;
>         }
> 	typedef unsigned short InputPixelType;
> 	typedef itk::Image< InputPixelType, 2 > InputImageType;
> 	typedef itk::ImageFileReader< InputImageType > ReaderType;
> 	ReaderType::Pointer reader = ReaderType::New();
> 	reader->SetFileName( av[1] );
> 
> 	typedef unsigned char WritePixelType;
> 	typedef itk::Image< WritePixelType, 2 > WriteImageType;
> 	typedef itk::RescaleIntensityImageFilter<
> 		InputImageType, WriteImageType > RescaleFilterType;
> 
> 	RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
> 	rescaler->SetOutputMinimum(   0 );
> 	rescaler->SetOutputMaximum( 255 );
> 
> 	typedef itk::ImageFileWriter< WriteImageType >  WriterType;
> 
> 	WriterType::Pointer writer = WriterType::New();
> 
> 	writer->SetFileName( av[2] );
> 
> 	rescaler->SetInput( reader->GetOutput() );
> 	writer->SetInput( rescaler->GetOutput() );
> 
> 	try
> 	{
> 	  writer->Update();
> 	}
> 	catch( itk::ExceptionObject & err )
> 	{
> 	  std::cout << "ExceptionObject caught !" << std::endl;
> 	  std::cout << err << std::endl;
> 	  return -1;
> 	}
> 	return 0;
> }
> 
> 
> 
> 
> 
>>From: Luis Ibanez <luis.ibanez at kitware.com>
>>Reply-To: 
>>To: bear <xgl99 at mails.tsinghua.edu.cn>
>>Subject: Re: [Insight-users] cannot read a tiff image
>>
>>
>>Hi Bear,
>>
>>Thanks for testing the try/catch blocks.
>>
>>You must however have changed your code when you ran the test,
>>since according to your email you are writing the image using
>>"unsigned char" pixels, which are indeed supported by the
>>JPEG writer.
>>
>>Please double check the image type that you are using for
>>instantiating the ImageFileWriter type.
>>
>>
>>Regarding the fact that you "see" black images when you save
>>in BMP and PNG,  that reinforces the suspicion above, that
>>you are actually using "unsigned short" as pixel type.
>>
>>It is a common mistake to save images using "unsigned short"
>>as pixel type but having actual pixels values in the range
>>from 0-255. The result is that most naive viewers show this
>>images as 'black' images because they are expecting pixel
>>values in the range 0-65535 (which is 2^32-1).
>>
>>
>>Yes, I'm sure that your TIFF image was loaded correctly by ITK.
>>I used the ImageViewer application in order to view your image.
>>This application is available in the InsightApplications
>>checkout. The application normalizes the intensities of images
>>before displaying them, and therefore it makes possible to look
>>at your image despite the fact that the intensity values do not
>>fill the dynamic range of 16 bits (unsigned short).
>>
>>
>>
>>   Regards,
>>
>>
>>
>>      Luis
>>
>>
>>
>>
>>
>>------------
>>bear wrote:
>>
>>
>>>hi Luis,
>>>   As you suggest, I add try/catch code, and show that Abort message is
> 
> indeed
> 
>>>raised by JpegIO:
>>>   
>>>ExceptionObject caught !
>>>
>>>itk::ExceptionObject (0x80f3b28)
>>>Location: "Unknown"
>>>File: /home/src/Insight/Code/IO/itkJPEGImageIO.cxx
>>>Line: 404
>>>Description: itk::ERROR: JPEGImageIO(0x80f3cc8): JPEG supports unsigned
> 
> char/int
> 
>>>only
>>>
>>>This exception does not appear when saving in bmp or png. However, The result
>>>is a completely *black* image which is wrong. I see cells in Matlab.
>>>Are you sure TIFF file is already loaded accurately? 
>>>
>>>                                                                Regards
>>>                                                                 bear
>>>
>>>
>>>>From: Luis Ibanez <luis.ibanez at kitware.com>
>>>>Reply-To: 
>>>>To: bear <xgl99 at mails.tsinghua.edu.cn>
>>>>Subject: Re: [Insight-users] cannot read a tiff image
>>>>
>>>>
>>>>Hi Bear,
>>>>
>>>>
>>>>Your file
>>>>
>>>>  http://166.111.201.234/w1.tiff
>>>>
>>>>is a non standard TIFF file.
>>>>
>>>>The "identify" tool from ImageMagick reports the following:
>>>>
>>>>w1.tiff TIFF 1280x1024+0+0 PseudoClass 65536c 16-bit 2.5m 0.050u 0:01
>>>>
>>>>e:\program files\imagemagick-5.5.5-q16\identify.exe:
>>>>
>>>>unknown field with tag 33628 (0x835c) encountered. (w1.tiff).
>>>>
>>>>
>>>>
>>>>Note however that ITK read it fine.
>>>>
>>>>You get the warnings,..
>>>>but the image is read from the file without problem.
>>>>
>>>>
>>>>The Abort message that you are receiving is probably produced
>>>>by the writer->Update(). This commonly happens if you provide
>>>>an output filename that doesn't correspond to a fileformat
>>>>recognized by ITK.
>>>>
>>>>What *exact* filename did you used for the output ?
>>>>
>>>>
>>>>For a simple verification, just add try/catch blocks around
>>>>the Update() calls of both the reader and the writer.
>>>>
>>>>Chances are that you will see the reader passing fine, and
>>>>the writer aborting.
>>>>
>>>>For a list of the image fileformats supported in ITK, please
>>>>look at the FAQ
>>>>
>>>>        http://www.itk.org/Wiki/ITK_FAQ
>>>>
>>>>
>>>>
>>>>
>>>>Regards,
>>>>
>>>>
>>>>   Luis
>>>>
>>>>
>>>>
>>>>----------------
>>>>bear wrote:
>>>>
>>>>
>>>>
>>>>>hi itk-users,
>>>>>      I have a tiff image(http://166.111.201.234/w1.tiff) which can be read
>>>
>>>by
>>>
>>>
>>>>>Matlab's imread() function, but it cannot be read by itk with errors:
>>>>>
>>>>>w1.tiff: Warning, unknown field with tag 317 (0x13d) ignored.
>>>>>w1.tiff: Warning, unknown field with tag 33628 (0x835c) ignored.
>>>>>Aborted
>>>>>What is the problem then? Thanks!
>>>>>
>>>>>
>>>>>The code:
>>>>>
>>>>>#include "itkImageFileReader.h"
>>>>>#include "itkImageFileWriter.h"
>>>>>#include "itkImage.h"
>>>>>#include "itkRescaleIntensityImageFilter.h"
>>>>>int main(int ac, char* av[])
>>>>>{
>>>>>	if(ac < 3)
>>>>>   {  
>>>>>		std::cerr << "Usage: " << av[0] << " input output\n";
>>>>>		return 1;
>>>>>   }
>>>>>	typedef unsigned short InputPixelType;
>>>>>	typedef itk::Image< InputPixelType, 2 > InputImageType;
>>>>>	typedef itk::ImageFileReader< InputImageType > ReaderType;
>>>>>	ReaderType::Pointer reader = ReaderType::New();
>>>>>	reader->SetFileName( av[1] );
>>>>>
>>>>>	reader->Update();
>>>>>
>>>>>	typedef unsigned char WritePixelType;
>>>>>	typedef itk::Image< WritePixelType, 2 > WriteImageType;
>>>>>	typedef itk::RescaleIntensityImageFilter<
>>>>>		InputImageType, WriteImageType > RescaleFilterType;
>>>>>
>>>>>	RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
>>>>>	rescaler->SetOutputMinimum(   0 );
>>>>>	rescaler->SetOutputMaximum( 255 );
>>>>>	typedef itk::ImageFileWriter< WriteImageType >  WriterType;
>>>>>
>>>>>	WriterType::Pointer writer = WriterType::New();
>>>>>
>>>>>	writer->SetFileName( av[2] );
>>>>>
>>>>>	rescaler->SetInput( reader->GetOutput() );
>>>>>	writer->SetInput( rescaler->GetOutput() );
>>>>>
>>>>>	writer->Update();
>>>>>	return 0;
>>>>>
>>>>>}
>>>>>
>>>>>
>>>>>_______________________________________________
>>>>>Insight-users mailing list
>>>>>Insight-users at itk.org
>>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>>
>>
>>
>>
>>
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users


More information about the Insight-users mailing list