ITK/Examples/SimpleOperations/RegionOverlap
From KitwarePublic
< ITK | Examples
Jump to navigationJump to search
Revision as of 19:13, 9 December 2010 by Kevin Hobbs (talk | contribs)
RegionOverlap.cxx
<source lang="cpp">
- include <stdlib.h>
- include <stdio.h>
- include "itkRGBPixel.h"
- include "itkImageRegionIterator.h"
- include "itkImageFileWriter.h"
int main( int argc, char *argv[] )
{
const char * out_file_name = argv[1];
const unsigned int Dimension = 2; typedef itk::RGBPixel <unsigned char > RGBPixelType; typedef itk::Image< RGBPixelType, Dimension > RGBImageType; typedef RGBImageType::RegionType RegionType; typedef RGBImageType::IndexType IndexType; typedef RGBImageType::SizeType SizeType; typedef itk::ImageRegionIterator< RGBImageType > IteratorType;
IndexType index; index[0] = 0; index[1] = 0;
SizeType size; size[0] = 100; size[1] = 100;
RegionType region; region.SetIndex( index ); region.SetSize( size );
IndexType indexA; indexA[0] = 9; indexA[1] = 9;
SizeType sizeA; sizeA[0] = 50; sizeA[1] = 50;
RegionType regionA; regionA.SetIndex( indexA ); regionA.SetSize( sizeA );
IndexType indexB; indexB[0] = 39; indexB[1] = 39;
SizeType sizeB; sizeB[0] = 50; sizeB[1] = 50;
RegionType regionB; regionB.SetIndex( indexB ); regionB.SetSize( sizeB );
// Region C is the intersection of A and B // padded by 10 pixels. RegionType regionC = regionA; regionC.Crop( regionB ); regionC.PadByRadius( 10 );
RGBPixelType pix_black; pix_black.Fill( 0 );
RGBPixelType pix_red; pix_red.Fill( 0 ); pix_red[0] = 255;
RGBPixelType pix_green; pix_green.Fill( 0 ); pix_green[1] = 255;
RGBPixelType pix_blue; pix_blue.Fill( 0 ); pix_blue[2] = 255; // A black canvas RGBImageType::Pointer image = RGBImageType::New(); image->SetRegions( region ); image->Allocate(); image->FillBuffer( pix_black );
// Paint region A red. IteratorType itA( image, regionA ); itA.GoToBegin(); while ( !itA.IsAtEnd() ) { itA.Set( itA.Get() + pix_red ); ++itA; }
// Paint region B green. IteratorType itB( image, regionB ); itB.GoToBegin(); while ( !itB.IsAtEnd() ) { itB.Set( itB.Get() + pix_green ); ++itB; }
// Paint region C blue. IteratorType itC( image, regionC ); itC.GoToBegin(); while ( !itC.IsAtEnd() ) { itC.Set( itC.Get() + pix_blue ); ++itC; }
// Writer typedef itk::ImageFileWriter< RGBImageType > FileWriterType; FileWriterType::Pointer writer = FileWriterType::New(); writer->SetFileName( out_file_name ); writer->SetInput( image );
try { writer->Update(); } catch( itk::ExceptionObject & excep ) { std::cerr << "Exception caught !" << std::endl; std::cerr << excep << std::endl; }
return EXIT_SUCCESS;
} </source>
CMakeLists.txt
<source lang="cmake">
PROJECT( RegionOverlap )
cmake_minimum_required( VERSION 2.8 )
FIND_PACKAGE ( ITK ) INCLUDE( ${USE_ITK_FILE} )
ADD_EXECUTABLE( RegionOverlap RegionOverlap.cxx ) TARGET_LINK_LIBRARIES ( RegionOverlap ITKCommon ITKIO ) </source>