ITK/Examples/ImageProcessing/RelabelComponentImageFilter: Difference between revisions
Daviddoria (talk | contribs) |
Daviddoria (talk | contribs) 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] | 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= | |||
<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">
- include "itkImage.h"
- include "itkTranslationTransform.h"
- include "itkImageFileReader.h"
- include "itkNormalizeImageFilter.h"
- include "itkRelabelComponentImageFilter.h"
- include <itkImageToVTKImageFilter.h>
- include "vtkImageViewer.h"
- include "vtkRenderWindowInteractor.h"
- include "vtkSmartPointer.h"
- include "vtkImageActor.h"
- include "vtkInteractorStyleImage.h"
- include "vtkRenderer.h"
- include "vtkPolyDataMapper.h"
- include "vtkActor.h"
- include "vtkProperty.h"
- 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>