[Insight-users] A bug in itkAnalyzeImageIO?
Jian Wu
eewujian at yahoo.com
Fri Feb 8 17:46:06 EST 2008
Hi, Bill,
I updated Nifti codes from CVS and got the same errors. But I found out what caused the problem. The data type of input image is unsigned short, which is not supported by Analyze 7.5. If the image was saved as Analyze format without type casting, the converted image could not be opened by the standard Analyze image reader. It would be nice if the NiftiImageIO could give a warning or an error message to prevent it from happening.
Jian
----- Original Message ----
From: Bill Lorensen <bill.lorensen at gmail.com>
To: Jian Wu <eewujian at yahoo.com>
Cc: insight-users at itk.org; Hans Johnson <hans-johnson at uiowa.edu>; kent williams <nkwmailinglists at gmail.com>
Sent: Thursday, February 7, 2008 11:34:09 PM
Subject: Re: [Insight-users] A bug in itkAnalyzeImageIO?
Jian,
There were a bunch of changes in the nifti code recently. Can you update and retry?
Bill
On Thu, Feb 7, 2008 at 5:43 PM, Jian Wu <eewujian at yahoo.com> wrote:
Hi, Bill,
Thanks for the prompt reply. Actually, I have tried to use itkNiftiImageIO. Without explicitly specifying an ImageIO class, the ITK would use itkNiftiImageIO by default if the images have the extension of 'hdr' or 'img'. I tried and failed in the first place. That's why I tried to explicitly use itkAnalyzeImageIO later. When itkNiftiImageIO was used, the Matlab reader gave me exactly the same error message. Even worse, the converted analyze image could not be opened by MIRcro. A simple test code is attached here, very similar to the previous one.
Jian
Command line:
ImageReadWrite brainweb1e1a10f20.mha brainweb1e1a10f20.img
Source Code:
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: ImageReadWrite.cxx,v $
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#ifdef __BORLANDC__
#define ITK_LEAN_AND_MEAN
#endif
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImage.h"
int main( int argc, char ** argv )
{
if( argc < 3 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl;
return EXIT_FAILURE;
}
typedef unsigned short PixelType;
const unsigned int Dimension = 3;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageFileReader< ImageType > ReaderType;
typedef itk::ImageFileWriter< ImageType > WriterType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
const char * inputFilename = argv[1];
const char * outputFilename = argv[2];
reader->SetFileName( inputFilename );
writer->SetFileName( outputFilename );
writer->SetInput( reader->GetOutput() );
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
----- Original Message ----
From: Bill Lorensen <bill.lorensen at gmail.com>
To: Jian Wu <eewujian at yahoo.com>
Cc: insight-users at itk.org; Hans Johnson <hans-johnson at uiowa.edu>; kent williams <nkwmailinglists at gmail.com>
Sent: Thursday, February 7, 2008 2:50:30 PM
Subject: Re: [Insight-users] A bug in itkAnalyzeImageIO?
Jian,
Can you please try the same program with itkNiftiImageIO instead of itkAnalyzeImageIO? The nifti reader/writer should produce valid analyze files. We are looking at replacing itkAnalyzeImageIO's implementation with itkNiftiImageIO. Nifti is a file format with a substantial and active community. If we do this, we will keep the Analyze API.
Thanks,
Bill
On Thu, Feb 7, 2008 at 2:25 PM, Jian Wu <eewujian at yahoo.com> wrote:
Hi,
I'm doing image format conversion from other image types to Analyze 7.5. The program did not give me any error message. However I doubt it may not handle the image header information properly. The images I generated in Analyze 7.5 format can be viewed using MRIcro image viewer. But when I tried to opened it using Matlab function analyze75read, it gave me an error message "Reference to non-existent field 'ImgDataType'." I studies the ITK source code and found out the line 1128 of itkAnalyzeImageIO.cxx states:
switch( this->m_Hdr.dime.datatype)
Here "this->m_Hdr" has not been filled with proper image information yet when the input image is not in Analyze image format. I think "this->m_ComponentType" should be referred instead. My test code is attached here. I used "brainweb1e1a10f20.mha" as the input image.
Jian
Command line:
ImageReadWriteAnalyze brainweb1e1a10f20.mha brainweb1e1a10f20.img
Source Code:
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $ ImageReadWriteAnalyze.cxx $
Language: C++
Date: $Date: 2008/02/07 $
Version: $Revision: 1.0 $
Author: Jian Wu
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#ifdef __BORLANDC__
#define ITK_LEAN_AND_MEAN
#endif
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkAnalyzeImageIO.h"
#include "itkImage.h"
int main( int argc, char ** argv )
{
if( argc < 3 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl;
return EXIT_FAILURE;
}
typedef unsigned short PixelType;
const unsigned int Dimension = 3;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageFileReader< ImageType > ReaderType;
typedef itk::ImageFileWriter< ImageType > WriterType;
typedef itk::AnalyzeImageIO ImageIOType;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
ImageIOType::Pointer analyzeIO = ImageIOType::New();
const char * inputFilename = argv[1];
const char * outputFilename = argv[2];
reader->SetFileName( inputFilename );
writer->SetFileName( outputFilename );
writer->SetInput( reader->GetOutput() );
writer->SetImageIO( analyzeIO );
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
_______________________________________________
Insight-users mailing list
Insight-users at itk.org
http://www.itk.org/mailman/listinfo/insight-users
Never miss a thing. Make Yahoo your homepage.
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20080208/fb8bc492/attachment-0001.html
More information about the Insight-users
mailing list