[Insight-users] I am really desperate...
ImageReadRegionOfInterestWrite
Sohaib Majzoub
sohaib.majzoub at gmail.com
Fri Mar 11 19:07:24 EST 2005
Dear all,
I am new to itk, and i am using the example provided with the toolkit:
ImageReadRegionOfInterestWrite
I need to extract a 3D ROI from a 3D image,
they said that the class RegionOfInterestImageFilter works for any dimension,
the example code of ImageReadRegionOfInterestWrite works only for 2D,
I am trying to modify the code so that i can do the 3D but it doesn't
want to work,
something is missing, i don't know where,
please any help, I am really desperate...
Thanks you very much for any hint or any kind of help,
Best Regards,
sorry again but the code for the ImageReadRegionOfInterestWrite is below
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: ImageReadRegionOfInterestWrite.cxx,v $
Language: C++
Date: $Date: 2004/12/22 21:10:15 $
Version: $Revision: 1.7 $
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
// Software Guide : BeginLatex
//
// This example should arguably be placed in the previous filtering
// chapter. However its usefulness for typical IO operations makes it
// interesting to mention here. The purpose of this example is to read and
// image, extract a subregion and write this subregion to a file. This is a
// common task when we want to apply a computationally intensive method to
// the region of interest of an image.
//
// As usual with ITK IO, we begin by including the appropriate header files.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// The filter used to extract a region from an image is the
// \doxygen{RegionOfInterestImageFilter}. Its header is included below.
//
// \index{itk::RegionOfInterestImageFilter!header}
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
#include "itkRegionOfInterestImageFilter.h"
// Software Guide : EndCodeSnippet
#include "itkImage.h"
int main( int argc, char *argv[] )
{
// Verify the number of parameters in the command line
if( argc < 7 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl;
std::cerr << " startX startY startZ sizeX sizeY sizeZ" << std::endl;
return -1;
}
// Software Guide : BeginLatex
//
// Image types are defined below.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef float InputPixelType;
typedef float OutputPixelType;
const unsigned int Dimension = 3;
typedef itk::Image< InputPixelType, Dimension > InputImageType;
typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// The types for the \doxygen{ImageFileReader} and \doxygen{ImageFileWriter}
// are instantiated using the image types.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef itk::ImageFileReader< InputImageType > ReaderType;
typedef itk::ImageFileWriter< OutputImageType > WriterType;
// Software Guide : EndCodeSnippet
// Software Guide : BeginCodeSnippet
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
// Software Guide : EndCodeSnippet
//FixedImageType::Pointer fixedImage = fixedSetFileNameImageReader->GetOutput();
// Software Guide : BeginLatex
//
// The RegionOfInterestImageFilter type is instantiated using
// the input and output image types. A filter object is created with the
// New() method and assigned to a \doxygen{SmartPointer}.
//
// Software Guide : EndLatex
// Software Guindexide : BeginCodeSnippet
typedef itk::RegionOfInterestImageFilter< InputImageType,
OutputImageType > FilterType;
FilterType::Pointer filter = FilterType::New();
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// The RegionOfInterestImageFilter requires a region to be
// defined by the user. The region is specified by an \doxygen{Index}
// indicating the pixel where the region starts and an \doxygen{Size}
// indication how many pixels the region has along each dimension. In this
// example, the specification of the region is taken from the command line
// arguments (this example assumes a 2D image is being processed).
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
OutputImageType::IndexType start;
start[0] = atoi( argv[3] );
start[1] = atoi( argv[4] );
start[2] = atoi( argv[5] );
// Software Guide : EndCodeSnippet
// Software Guide : BeginCodeSnippet
OutputImageType::SizeType size;
size[0] = atoi( argv[6] );
size[1] = atoi( argv[7] );
size[2] = atoi( argv[8] );
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// An \doxygen{ImageRegion} object is created and initialized with start
// and size obtained from the command line.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
OutputImageType::RegionType desiredRegion;
desiredRegion.SetSize( size );
desiredRegion.SetIndex( start );
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Then the region is passed to the filter using the
// SetRegionOfInterest() method.
//
// \index{itk::RegionOfInterestImageFilter!SetRegionOfInterest()}
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
filter->SetRegionOfInterest( desiredRegion );
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Below, we create the reader and writer using the New() method and
// assigning the result to a SmartPointer.
//
// \index{itk::ImageFileReader!New()}
// \index{itk::ImageFileWriter!New()}
// \index{itk::ImageFileReader!SmartPointer}
// \index{itk::ImageFileWriter!SmartPointer}
//
// Software Guide : EndLatex
//
// Here we recover the file names from the command line arguments
//
const char * inputFilename = argv[1];
const char * outputFilename = argv[2];
// Software Guide : BeginLatex
//
// The name of the file to be read or written is passed with the
// SetFileName() method.
//
// \index{itk::ImageFileReader!SetFileName()}
// \index{itk::ImageFileWriter!SetFileName()}
// \index{SetFileName()!itk::ImageFileReader}
// \index{SetFileName()!itk::ImageFileWriter}
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
reader->SetFileName( inputFilename );
writer->SetFileName( outputFilename );
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Below we connect the reader, filter and writer to form the data
// processing pipeline.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
filter->SetInput( reader->GetOutput() );
writer->SetInput( filter->GetOutput() );
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Finally we execute the pipeline by invoking Update() on the writer. The
// call is placed in a \code{try/catch} block in case exceptions are
// thrown.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cout << "ExceptionObject caught !" << std::endl;
std::cout << err << std::endl;
return -1;
}
// Software Guide : EndCodeSnippet
return 0;
}
More information about the Insight-users
mailing list