Difference between revisions of "ITK/Examples/Smoothing/SmoothingRecursiveGaussianImageFilter"
From KitwarePublic
Jump to navigationJump to search
(Uses QuickView. Changed to smooth rgb images.) |
|||
Line 1: | Line 1: | ||
This examples uses image adaptors to smooth RGB images. Each component is smoothed separately and the 3 resulting images are composed into an RGBImage. | |||
==SmoothingRecursiveGaussianImageFilter.cxx== | ==SmoothingRecursiveGaussianImageFilter.cxx== | ||
<source lang="cpp"> | <source lang="cpp"> |
Revision as of 05:32, 24 December 2010
This examples uses image adaptors to smooth RGB images. Each component is smoothed separately and the 3 resulting images are composed into an RGBImage.
SmoothingRecursiveGaussianImageFilter.cxx
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkDiscreteGaussianImageFilter.h"
#include "itkSmoothingRecursiveGaussianImageFilter.h"
#include "itkRGBPixel.h"
#include "itkNthElementImageAdaptor.h"
#include "itkComposeRGBImageFilter.h"
#include "QuickView.h"
int main(int argc, char * argv[])
{
// Verify command line arguments
if( argc < 2 )
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile [sigma]" << std::endl;
return EXIT_FAILURE;
}
double sigma = 4.0;
if (argc > 2)
{
sigma = atof(argv[2]);
}
const unsigned int Dimension = 2;
typedef unsigned char PixelComponentType;
typedef itk::Image<itk::RGBPixel< PixelComponentType>,
Dimension > ColorImageType;
typedef itk::Image<PixelComponentType, Dimension >
ScalarImageType;
typedef itk::ImageFileReader< ColorImageType >
ReaderType;
// Create and setup a reader
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName( argv[1] );
reader->Update();
typedef itk::NthElementImageAdaptor<ColorImageType,
PixelComponentType> ImageAdaptorType;
typedef itk::SmoothingRecursiveGaussianImageFilter<
ImageAdaptorType, ScalarImageType > FilterType;
ImageAdaptorType::Pointer adaptorR = ImageAdaptorType::New();
adaptorR->SelectNthElement(0);
adaptorR->SetImage(reader->GetOutput());
FilterType::Pointer gaussianR = FilterType::New();
gaussianR->SetInput(adaptorR);
gaussianR->SetSigma(sigma);
ImageAdaptorType::Pointer adaptorG = ImageAdaptorType::New();
adaptorG->SelectNthElement(1);
adaptorG->SetImage(reader->GetOutput());
FilterType::Pointer gaussianG = FilterType::New();
gaussianG->SetInput(adaptorG);
gaussianG->SetSigma(sigma);
ImageAdaptorType::Pointer adaptorB = ImageAdaptorType::New();
adaptorB->SelectNthElement(2);
adaptorB->SetImage(reader->GetOutput());
FilterType::Pointer gaussianB = FilterType::New();
gaussianB->SetInput(adaptorB);
gaussianB->SetSigma(sigma);
typedef itk::ComposeRGBImageFilter<
ScalarImageType, ColorImageType > ComposeFilterType;
ComposeFilterType::Pointer composeFilter =
ComposeFilterType::New();
composeFilter->SetInput1(gaussianR->GetOutput());
composeFilter->SetInput2(gaussianG->GetOutput());
composeFilter->SetInput3(gaussianB->GetOutput());
QuickView viewer;
viewer.AddRGBImage(
reader->GetOutput(),true,
itksys::SystemTools::GetFilenameName(argv[1]));
std::stringstream desc;
desc << "SmoothingRecursiveGaussian\n sigma = " << sigma;
viewer.AddRGBImage(
composeFilter->GetOutput(),
true,
desc.str());
viewer.Visualize();
return EXIT_SUCCESS;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
PROJECT(SmoothingRecursiveGaussianImageFilter)
FIND_PACKAGE(ITK REQUIRED)
INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(SmoothingRecursiveGaussianImageFilter SmoothingRecursiveGaussianImageFilter.cxx)
TARGET_LINK_LIBRARIES(SmoothingRecursiveGaussianImageFilter ITKIO)