The Art of Interface

Article 9 — Appendix A.1

Gaussian filter, or Gaussian blur source code

Category. Digital signal and image processing (DSP and DIP) software development.

Description. Separable Gaussian filter, or Gaussian blur C++ source code — header file.

Reference. Separable Gaussian filter, or Gaussian blur C++ source code — implementation file.

Download Gaussian filter, or Gaussian blur C++ source code (zip, 4 Kb)

gaussianblur.h

// gaussianblur.h - declaration of template class
// of 1D and 2D gaussian blur or filter
//
// The code is property of LIBROW
// You can use it on your own
// When utilizing credit LIBROW site
#ifndef _GAUSSIANBLUR_H_
#define _GAUSSIANBLUR_H_
template <class T = double> class TGaussianBlur
{
public:
 // 1D GAUSSIAN BLUR
 // pSignal - input signal;
 // pResult - output signal, NULL for inplace processing
 // N - length of the signal
 // W - window size, odd positive number
 bool Filter(T *pSignal, T *pResult, unsigned int N, unsigned int W) const;
 // 2D GAUSSIAN BLUR
 // pImage - input image
 // pResult - output image, NULL for inplace processing
 // N - width of the image
 // M - height of the image
 // W - window size, odd positive number
 bool Filter(T *pImage, T *pResult,
 unsigned int N, unsigned int M, unsigned int W) const;
protected:
 // Internal auxiliary structure - data array size descriptor
 struct CSize
 {
 unsigned int x; // Array width
 unsigned int y; // Array height
 // Default constructor
 CSize(): x(0), y(0) {}
 // Constructor with initialization
 CSize(unsigned int _x, unsigned int _y): x(_x), y(_y) {}
 // Initialization
 void Set(unsigned int _x, unsigned int _y) { x = _x; y = _y; }
 // Area
 unsigned int Area() const { return x * y; }
 };
 // Internal auxiliary structure - array descriptor
 struct CArray
 {
 CSize Size; // Array size
 T *Buffer; // Element buffer
 // Default constructor
 CArray(): Buffer(NULL) {}
 // Constructors with initialization
 CArray(T *_Buffer, const CSize &_Size): Buffer(_Buffer), Size(_Size) {}
 CArray(T *_Buffer, unsigned int _N): Buffer(_Buffer), Size(_N, 1) {}
 };
 // Internal auxiliary structure - filter window descriptor
 struct CWindow
 {
 T *Weights; // Window weights
 unsigned int Size; // Window size
 // Default constructor
 CWindow(): Weights(NULL), Size(0), Correction(.5 - double(T(.5))) {}
 // Destructor
 ~CWindow() { if (Weights) delete[] Weights; }
 // Filter window creation
 bool Create(unsigned int _Size);
 // FILTER WINDOW APPLICATION
 // _Element - start element in signal/image
 T Apply(const T *_Element) const
 {
 // Apply filter - calculate weighted mean
 double Sum = 0.;
 const double *WeightIter = Weights;
 const T *ElIter = _Element;
 const double *const End = Weights + Size;
 while (WeightIter < End) Sum += *(WeightIter++) * double(*(ElIter++));
 return T(Sum + Correction);
 }
 protected:
 const double Correction; // Result correction
 };
 // Internal auxiliary functions - check input data consistency
 bool Consistent(const T *_Image, const CSize &_Size, unsigned int _W) const
 {
 return _Image && _Size.x && _Size.y && _W &&
 _Size.x> (_W>> 1) && _Size.y> (_W>> 1) && _W & 1;
 }
 bool Consistent(const T *_Signal, unsigned int _N, unsigned int _W) const
 {
 return _Signal && _N && _W && _N> (_W>> 1) && _W & 1;
 }
};
// Include implementation file
#include "gaussianblur.cpp"
#endif
Article 1
Median filter
Article 2
Image rotation
Article 11
Function handbook
© 2007–2021 Librow

AltStyle によって変換されたページ (->オリジナル) /