ITK/Examples/ImageProcessing/RegionOfInterestImageFilter

From KitwarePublic
Jump to navigationJump to search

RegionOfInterestImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileReader.h"
  3. include "itkRegionOfInterestImageFilter.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"
  1. include <iostream>
  2. include <string>

int main(int argc, char *argv[]) { if(argc < 2) { std::cerr << "Required: filename" << std::endl; return EXIT_FAILURE; }

std::string filename = argv[1];

typedef itk::Image<unsigned char, 2> ImageType; typedef itk::ImageFileReader<ImageType> ReaderType; typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;

ReaderType::Pointer reader = ReaderType::New(); ConnectorType::Pointer originalConnector = ConnectorType::New(); ConnectorType::Pointer extractedConnector = ConnectorType::New();

reader->SetFileName(filename.c_str()); reader->Update();

ImageType::SizeType inSize = reader->GetOutput()->GetLargestPossibleRegion().GetSize();

originalConnector->SetInput(reader->GetOutput());

vtkSmartPointer<vtkImageActor> originalActor = vtkSmartPointer<vtkImageActor>::New(); originalActor->SetInput(originalConnector->GetOutput());

typedef itk::RegionOfInterestImageFilter< ImageType, ImageType > FilterType; FilterType::Pointer filter = FilterType::New();

ImageType::IndexType start; start[0] = inSize[0]/4; start[1] = inSize[1]/4;

ImageType::SizeType size; size[0] = inSize[0]/4; size[1] = inSize[1]/4;

ImageType::RegionType desiredRegion; desiredRegion.SetSize(size); desiredRegion.SetIndex(start);

filter->SetRegionOfInterest(desiredRegion); filter->SetInput(reader->GetOutput());

extractedConnector->SetInput(filter->GetOutput());

vtkSmartPointer<vtkImageActor> extractedActor = vtkSmartPointer<vtkImageActor>::New(); extractedActor->SetInput(extractedConnector->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(extractedActor);

leftRenderer->ResetCamera(); rightRenderer->ResetCamera();

renderWindow->Render();

vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();

interactor->SetInteractorStyle(style);

interactor->Start();

return EXIT_SUCCESS; } </source>

CMakeLists.txt

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

PROJECT(RegionOfInterestImageFilter)

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(RegionOfInterestImageFilter RegionOfInterestImageFilter.cpp) TARGET_LINK_LIBRARIES(RegionOfInterestImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO)

</source>