Smooth Image With Discrete Gaussian Filter#

Synopsis#

Smooth an image with a discrete Gaussian filter.

Results#

../../../../_images/Yinyang29.png

Input image.#

../../../../_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 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 > >

See itk::DiscreteGaussianImageFilter for additional documentation.