[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