Smooth Image With Discrete Gaussian Filter#
Synopsis#
Smooth an image with a discrete Gaussian filter.
Results#
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 filterType = itk::DiscreteGaussianImageFilter<UnsignedCharImageType, FloatImageType>;
const auto input = itk::ReadImage<UnsignedCharImageType>(inputFileName);
// Create and setup a Gaussian filter
auto gaussianFilter = filterType::New();
gaussianFilter->SetInput(input);
gaussianFilter->SetVariance(variance);
#ifdef ENABLE_QUICKVIEW
QuickView viewer;
viewer.AddImage<UnsignedCharImageType>(input);
viewer.AddImage<FloatImageType>(gaussianFilter->GetOutput());
viewer.Visualize();
#endif
return EXIT_SUCCESS;
}
Classes demonstrated#
-
template<typename TInputImage, typename TOutputImage = TInputImage>
class DiscreteGaussianImageFilter : 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 > >