ITK/Examples/EdgesAndGradients/GradientMagnitudeRecursiveGaussianImageFilter

From KitwarePublic
< ITK‎ | Examples
Revision as of 14:11, 18 November 2010 by Daviddoria (talk | contribs)
Jump to navigationJump to search

This example demonstrates how to compute the magnitude of the gradient of an image. The original image and its gradient magnitude are displayed on the screen.

GradientMagnitudeRecursiveGaussianImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileReader.h"
  3. include "itkImageFileWriter.h"
  4. include "itkRescaleIntensityImageFilter.h"
  5. include "itkGradientMagnitudeRecursiveGaussianImageFilter.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"

int main(int argc, char * argv[]) {

 // Verify command line arguments
 if( argc < 2 )
   {
   std::cerr << "Usage: " << std::endl;
   std::cerr << argv[0] << "inputImageFile" << std::endl;
   return EXIT_FAILURE;
   }
 // Parse command line arguments
 std::string inputFilename = argv[1];
 // Setup types
 typedef itk::Image< float,  2 >   FloatImageType;
 typedef itk::Image< unsigned char, 2 >   UnsignedCharImageType;
 typedef itk::ImageFileReader< UnsignedCharImageType >  readerType;
 typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<

UnsignedCharImageType, FloatImageType > filterType;

 // Create and setup a reader
 readerType::Pointer reader = readerType::New();
 reader->SetFileName( inputFilename.c_str() );
 // Create and setup a gradient filter
 filterType::Pointer gradientFilter = filterType::New();
 gradientFilter->SetInput( reader->GetOutput() );
 gradientFilter->Update();
 // To write the gradient image file, we must rescale the gradient values
 // to a reasonable range
 typedef itk::RescaleIntensityImageFilter<

FloatImageType, UnsignedCharImageType > rescaleFilterType;

 rescaleFilterType::Pointer rescaler = rescaleFilterType::New();
 rescaler->SetOutputMinimum(0);
 rescaler->SetOutputMaximum(255);
 rescaler->SetInput( gradientFilter->GetOutput() );
 rescaler->Update();
 typedef itk::ImageToVTKImageFilter<UnsignedCharImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(reader->GetOutput());
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 typedef itk::ImageToVTKImageFilter<UnsignedCharImageType> ConnectorType;
 ConnectorType::Pointer gradientMagnitudeConnector = ConnectorType::New();
 gradientMagnitudeConnector->SetInput(rescaler->GetOutput());
 vtkSmartPointer<vtkImageActor> gradientMagnitudeActor =
   vtkSmartPointer<vtkImageActor>::New();
 gradientMagnitudeActor->SetInput(gradientMagnitudeConnector->GetOutput());
 // 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<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(600,300);
 vtkSmartPointer<vtkRenderer> leftRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(leftRenderer);
 leftRenderer->SetViewport(leftViewport);
 vtkSmartPointer<vtkRenderer> rightRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(rightRenderer);
 rightRenderer->SetViewport(rightViewport);
 leftRenderer->AddActor(originalActor);
 rightRenderer->AddActor(gradientMagnitudeActor);
 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
   vtkSmartPointer<vtkRenderWindowInteractor>::New();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 renderWindowInteractor->SetInteractorStyle(style);
 renderWindowInteractor->SetRenderWindow(renderWindow);
 renderWindowInteractor->Initialize();
 renderWindowInteractor->Start();
 return EXIT_SUCCESS;

} </source>

CMakeLists.txt

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

PROJECT(GradientMagnitudeRecursiveGaussianImageFilter)

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

</source>