[Insight-users] creating a volume from separate slices

Hans Johnson hjohnson at mail . psychiatry . uiowa . edu
Thu, 06 Nov 2003 20:14:15 -0600


Lucas,

The IO factory mechanism does not have support for the GE4x or GE5x
files by default.  This was a decision made since very few people needed
this support.  You will need to call the RegisterOnce() call once at the
beging of your main function to insert this filetype into the IO factory
list of known file types (see the Testing/Code/IO/*GE*.cxx file for the
exact syntax).

Since ITK has no concept of image orientation
(Coronal/Sagittal/Transverse) this information was not originally taken
into account.  You're current program will output Analyze images with a
transverse coding no matter what the actual orientation was in the GE
image.    I am happy to announce that we are currently working very hard
to remedy this situation in a manner that will be useful across most
image types that have an orientation specification.

In addition, you will not need to use the ImageSeriesFilter as the GE
filter implementations reads through all the files in the directory and
choose the ones that belong in the volume based on scan
characteristics.  For example if you have a scan sequence where PD and
T2 images are acquired simultaneously as interleaved slices, then
choosing I.001(or any odd numbered slice) will read all the odd images
and produce the PD volume, and choosing I.002 (or any even numbered
slice) will read all the even images and produce the T2 image volume.

Regards,
Hans J. Johnson

PS:  the pixel type is unsigned short int (16 bits).



Lucas Lorenzo wrote:

> Thanks Josh,
>
> I'm using the ImageSeriesReader.
> The files are GE 5x (as far as I know the pixel type is unsigned int 
> 16 bit) so my understanding is that the IO factory mechanism should 
> make it transparent for me the reading process. What I'd like to do is 
> to generate the volume in Analyze format. I checked the generated list 
> of file names and it's ok.
> So, this is the code:
>
> / #include "itkNumericSeriesFileNames.h"
> #include "itkImageSeriesReader.h"
> #include "itkImageFileWriter.h"
> #include "itkImage.h"
> #include "itkAnalyzeImageIO.h"
> #include <iostream>
>
> int main(int argc, char * argv[])
> {
>
> typedef itk::Image<unsigned int,3> Image3DType;
>
>
> typedef itk::AnalyzeImageIO ImageIOType;
>
> ImageIOType::Pointer analyzeIO = ImageIOType::New();
>
> //
> // Here we generate filenames: I.001 I.002 ------ I.136
> itk::NumericSeriesFileNames::Pointer fileIter = 
> itk::NumericSeriesFileNames::New();
> fileIter->SetStartIndex( 1 );
> fileIter->SetEndIndex( 136 );
> fileIter->SetIncrementIndex( 1 );
> fileIter->SetSeriesFormat("I.%03d");
>
> itk::ImageSeriesReader<Image3DType>::Pointer reader = 
> itk::ImageSeriesReader<Image3DType>::New();
> reader->SetFileNames( fileIter->GetFileNames() );
>
>
> try
> {
> reader->Update();
> }
> catch( itk::ExceptionObject & err )
> {
> std::cout << "ExceptionObject caught !" << std::endl;
> std::cout << err << std::endl;
> return -1;
> }
>
>
> itk::ImageFileWriter< Image3DType >::Pointer writer = 
> itk::ImageFileWriter< Image3DType >::New();
> writer->SetInput( reader->GetOutput() );
> writer->SetFileName("test");
> writer->SetImageIO(analyzeIO);
>
> try
> {
> writer->Update();
> }
> catch( itk::ExceptionObject & err )
> {
> std::cout << "ExceptionObject caught !" << std::endl;
> std::cout << err << std::endl;
> return -1;
> }
> return 0;
> }
> /
> but when doing the "reader->Update()" I have a run time error:
>
> / ExceptionObject caught !
>
> itk::ExceptionObject (0x225c90)
> Location: "Unknown"
> File: /usr/local/include/InsightToolkit/IO/itkImageFileReader.txx
> Line: 101
> Description: Could not create IO object for file I.002/
>
> So, it seems to be that it is reading the first file in the list 
> ("I.001") but it can't read the second.
> Could anyone help me with this ?
> Thanks
>
> Lucas
>
>
> On Thursday, November 6, 2003, at 11:07 AM, Joshua Cates wrote:
>
>     Hi Lucas,
>
>     To read slices into a volume, you can either create a
>     MetaImageHeader for
>     it with the MetaImageImporter application, or use the
>     itk::ImageSeriesReader.
>
>     (if these are raw files, another trick is to 'cat' them into to a
>     single
>     file)
>
>     Josh.
>     ______________________________
>     Josh Cates
>     Scientific Computing and Imaging Institute
>     University of Utah
>     Email: cates at sci . utah . edu
>     Phone: (801) 587-7697
>     URL: http://www . sci . utah . edu/~cates
>
>
>     On Thu, 6 Nov 2003, Lucas Lorenzo wrote:
>
>         Hi,
>
>         I have many slices (from a volume) stored in separate files.
>         How can I create the volume to save it to a file?
>         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
>