ITK/Examples/Smoothing/SmoothingRecursiveGaussianImageFilter: Difference between revisions
From KitwarePublic
Jump to navigationJump to search
(Uses QuickView. Changed to smooth rgb images.) |
No edit summary |
||
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
<source lang="cpp">
- 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;
} </source>
CMakeLists.txt
<source lang="cmake"> 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)
</source>