[Insight-users] I am really
desperate... ImageReadRegionOfInterestWrite
Karthik Krishnan
Karthik.Krishnan at kitware.com
Fri Mar 11 19:59:03 EST 2005
Hi Sohaib,
I tried your code and it seems to work fine. Are you sure you are not
doing something funky like using an image with a different pixel type
from the one you instantiated etc.. Note that IndexType and SizeType are
in pixels.
Thanks
kk
Sohaib Majzoub wrote:
>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;
>}
>_______________________________________________
>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