ITK/Examples/ImageProcessing/RelabelComponentImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
No edit summary
Line 1: Line 1:
==RelabelComponentImageFilter.cxx==
=Description=
Relabel the components (blobs) in an image such that consecutive labels are used. This example creates a black image with one rectangle consisting of pixels with value 100 and a second rectangle consisting of pixels with value 200. There are three resulting components (the background and the two rectangles). The relabel filter labels these three components 0, 1, and 2.
 
=Displayed Output=
The original image and an intensity scaled version of the relabeled image.
 
=RelabelComponentImageFilter.cxx=
<source lang="cpp">
<source lang="cpp">
#include "itkImage.h"
#include "itkImage.h"
Line 118: Line 124:
     {
     {
     if(imageIterator.GetIndex()[0] > 100 &&
     if(imageIterator.GetIndex()[0] > 100 &&
       imageIterator.GetIndex()[0] > 150 &&
       imageIterator.GetIndex()[0] < 150 &&
       imageIterator.GetIndex()[1] > 100 &&
       imageIterator.GetIndex()[1] > 100 &&
       imageIterator.GetIndex()[1] < 150)
       imageIterator.GetIndex()[1] < 150)
Line 141: Line 147:
</source>
</source>


==CMakeLists.txt==
=CMakeLists.txt=
<source lang="cmake">
<source lang="cmake">
cmake_minimum_required(VERSION 2.6)
cmake_minimum_required(VERSION 2.6)

Revision as of 17:58, 18 November 2010

Description

Relabel the components (blobs) in an image such that consecutive labels are used. This example creates a black image with one rectangle consisting of pixels with value 100 and a second rectangle consisting of pixels with value 200. There are three resulting components (the background and the two rectangles). The relabel filter labels these three components 0, 1, and 2.

Displayed Output

The original image and an intensity scaled version of the relabeled image.

RelabelComponentImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkTranslationTransform.h"
  3. include "itkImageFileReader.h"
  4. include "itkNormalizeImageFilter.h"
  5. include "itkRelabelComponentImageFilter.h"
  1. include <itkImageToVTKImageFilter.h>
  1. include "vtkImageViewer.h"
  2. include "vtkRenderWindowInteractor.h"
  3. include "vtkSmartPointer.h"
  4. include "vtkImageActor.h"
  5. include "vtkInteractorStyleImage.h"
  6. include "vtkRenderer.h"
  7. include "vtkPolyDataMapper.h"
  8. include "vtkActor.h"
  9. include "vtkProperty.h"
  10. include "vtkSphereSource.h"

typedef itk::Image<unsigned char, 2> ImageType;

void CreateImage(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image = ImageType::New();
 CreateImage(image);
 
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(image);
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 itk::RelabelComponentImageFilter<ImageType, ImageType>::Pointer relabelFilter =
   itk::RelabelComponentImageFilter<ImageType, ImageType>::New();
 relabelFilter->SetInput(image);
 relabelFilter->Update();
 ConnectorType::Pointer relabeledConnector = ConnectorType::New();
 relabeledConnector->SetInput(relabelFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> relabeledActor =
   vtkSmartPointer<vtkImageActor>::New();
 relabeledActor->SetInput(relabeledConnector->GetOutput());
 // There will be one render window
 vtkSmartPointer<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(600, 300);
 vtkSmartPointer<vtkRenderWindowInteractor> interactor =
   vtkSmartPointer<vtkRenderWindowInteractor>::New();
 interactor->SetRenderWindow(renderWindow);
 // Define viewport ranges
 // (xmin, ymin, xmax, ymax)
 double leftViewport[4] = {0.0, 0.0, 0.5, 1.0};
 double rightViewport[4] = {0.5, 0.0, 1.0, 1.0};
 // Setup both renderers
 vtkSmartPointer<vtkRenderer> leftRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(leftRenderer);
 leftRenderer->SetViewport(leftViewport);
 leftRenderer->SetBackground(.6, .5, .4);
 vtkSmartPointer<vtkRenderer> rightRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(rightRenderer);
 rightRenderer->SetViewport(rightViewport);
 rightRenderer->SetBackground(.4, .5, .6);
 // Add the sphere to the left and the cube to the right
 leftRenderer->AddActor(originalActor);
 rightRenderer->AddActor(relabeledActor);
 leftRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 return EXIT_SUCCESS;

}

void CreateImage(ImageType::Pointer image) {

 // Create an image with 2 connected components
 ImageType::RegionType region;
 ImageType::IndexType start;
 start[0] = 0;
 start[1] = 0;
 ImageType::SizeType size;
 size[0] = 200;
 size[1] = 300;
 region.SetSize(size);
 region.SetIndex(start);
 image->SetRegions(region);
 image->Allocate();
 itk::ImageRegionIterator<ImageType> imageIterator(image,region);
 while(!imageIterator.IsAtEnd())
   {
   if(imageIterator.GetIndex()[0] > 100 &&
     imageIterator.GetIndex()[0] < 150 &&
     imageIterator.GetIndex()[1] > 100 &&
     imageIterator.GetIndex()[1] < 150)
     {
     imageIterator.Set(100);
     }
   else if(imageIterator.GetIndex()[0] > 50 &&
     imageIterator.GetIndex()[0] < 70 &&
     imageIterator.GetIndex()[1] > 50 &&
     imageIterator.GetIndex()[1] < 70)
     {
     imageIterator.Set(200);
     }
   else
     {
     imageIterator.Set(0);
     }
   ++imageIterator;
 }

} </source>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

PROJECT(RelabelComponentImageFilter)

include_directories(/home/doriad/src/ITK/Wrapping/WrapITK/ExternalProjects/ItkVtkGlue/src/)

FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE})

FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})

ADD_EXECUTABLE(RelabelComponentImageFilter RelabelComponentImageFilter.cxx) TARGET_LINK_LIBRARIES(RelabelComponentImageFilter vtkHybrid ITKIO ITKNumerics ITKBasicFilters ITKCommon ) </source>