Smooth Image With Discrete Gaussian Filter¶
Synopsis¶
Smooth an image with a discrete Gaussian filter.
Results¶
![../../../../_images/Yinyang29.png](../../../../_images/Yinyang29.png)
Input image.¶
![../../../../_images/SmoothImageWithDiscreteGaussianFilter.png](../../../../_images/SmoothImageWithDiscreteGaussianFilter.png)
Yinyang.png And Output.png With Variance = 8¶
Code¶
C++¶
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkDiscreteGaussianImageFilter.h"
#ifdef ENABLE_QUICKVIEW
# include "QuickView.h"
#endif
int
main(int argc, char * argv[])
{
// Verify command line arguments
if (argc < 2)
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << " inputImageFile [variance]" << std::endl;
return EXIT_FAILURE;
}
// Parse command line argumentsa
std::string inputFilename = argv[1];
double variance = 4.0;
if (argc > 2)
{
variance = std::stod(argv[2]);
}
// Setup types
using UnsignedCharImageType = itk::Image<unsigned char, 2>;
using FloatImageType = itk::Image<float, 2>;
using readerType = itk::ImageFileReader<UnsignedCharImageType>;
using filterType = itk::DiscreteGaussianImageFilter<UnsignedCharImageType, FloatImageType>;
// Create and setup a reader
readerType::Pointer reader = readerType::New();
reader->SetFileName(inputFilename.c_str());
// Create and setup a Gaussian filter
filterType::Pointer gaussianFilter = filterType::New();
gaussianFilter->SetInput(reader->GetOutput());
gaussianFilter->SetVariance(variance);
#ifdef ENABLE_QUICKVIEW
QuickView viewer;
viewer.AddImage<UnsignedCharImageType>(reader->GetOutput());
viewer.AddImage<FloatImageType>(gaussianFilter->GetOutput());
viewer.Visualize();
#endif
return EXIT_SUCCESS;
}
Classes demonstrated¶
-
template<typename
TInputImage
, typenameTOutputImage
= TInputImage>
classDiscreteGaussianImageFilter
: public itk::ImageToImageFilter<TInputImage, TOutputImage> Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel).
The Gaussian operator used here was described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.) The Gaussian kernel used here was designed so that smoothing and derivative operations commute after discretization.
The variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension.
When the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter.
- See
GaussianOperator
- See
Image
- See
Neighborhood
- See
NeighborhoodOperator
- See
RecursiveGaussianImageFilter
- ITK Sphinx Examples:
Subclassed by itk::GPUImageToImageFilter< TInputImage, TOutputImage, DiscreteGaussianImageFilter< TInputImage, TOutputImage > >