Visual Servoing Platform  version 3.1.0
vpImageFilter Class Reference

#include <visp3/core/vpImageFilter.h>

Static Public Member Functions

static void canny (const vpImage< unsigned char > &I, vpImage< unsigned char > &Ic, const unsigned int gaussianFilterSize, const double thresholdCanny, const unsigned int apertureSobel)
 
template<class T >
static double derivativeFilterX (const vpImage< T > &I, const unsigned int r, const unsigned int c)
 
template<class T >
static double derivativeFilterY (const vpImage< T > &I, const unsigned int r, const unsigned int c)
 
template<class T >
static double derivativeFilterX (const vpImage< T > &I, const unsigned int r, const unsigned int c, const double *filter, const unsigned int size)
 
template<class T >
static double derivativeFilterY (const vpImage< T > &I, const unsigned int r, const unsigned int c, const double *filter, const unsigned int size)
 
static void filter (const vpImage< double > &I, vpImage< double > &Iu, vpImage< double > &Iv, const vpMatrix &M, const bool convolve=false)
 
static void filter (const vpImage< unsigned char > &I, vpImage< double > &If, const vpMatrix &M, const bool convolve=false)
 
static void sepFilter (const vpImage< unsigned char > &I, vpImage< double > &If, const vpColVector &kernelH, const vpColVector &kernelV)
 
static void filter (const vpImage< unsigned char > &I, vpImage< double > &GI, const double *filter, unsigned int size)
 
static void filter (const vpImage< double > &I, vpImage< double > &GI, const double *filter, unsigned int size)
 
static unsigned char filterGaussXPyramidal (const vpImage< unsigned char > &I, unsigned int i, unsigned int j)
 
static unsigned char filterGaussYPyramidal (const vpImage< unsigned char > &I, unsigned int i, unsigned int j)
 
static void filterX (const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static void filterX (const vpImage< double > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static double filterX (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterXLeftBorder (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterXRightBorder (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterX (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterXLeftBorder (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterXRightBorder (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static void filterY (const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static void filterY (const vpImage< double > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static double filterY (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterYTopBorder (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterYBottomBorder (const vpImage< unsigned char > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterYTopBorder (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterYBottomBorder (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static double filterY (const vpImage< double > &I, unsigned int r, unsigned int c, const double *filter, unsigned int size)
 
static void gaussianBlur (const vpImage< unsigned char > &I, vpImage< double > &GI, unsigned int size=7, double sigma=0., bool normalize=true)
 
static void gaussianBlur (const vpImage< double > &I, vpImage< double > &GI, unsigned int size=7, double sigma=0., bool normalize=true)
 
template<class T >
static double gaussianFilter (const vpImage< T > &fr, const unsigned int r, const unsigned int c)
 
static void getGaussPyramidal (const vpImage< unsigned char > &I, vpImage< unsigned char > &GI)
 
static void getGaussXPyramidal (const vpImage< unsigned char > &I, vpImage< unsigned char > &GI)
 
static void getGaussYPyramidal (const vpImage< unsigned char > &I, vpImage< unsigned char > &GI)
 
static void getGaussianKernel (double *filter, unsigned int size, double sigma=0., bool normalize=true)
 
static void getGaussianDerivativeKernel (double *filter, unsigned int size, double sigma=0., bool normalize=true)
 
static void getGradX (const vpImage< unsigned char > &I, vpImage< double > &dIx)
 
static void getGradX (const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static void getGradX (const vpImage< double > &I, vpImage< double > &dIx, const double *filter, unsigned int size)
 
static void getGradXGauss2D (const vpImage< unsigned char > &I, vpImage< double > &dIx, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
 
static void getGradY (const vpImage< unsigned char > &I, vpImage< double > &dIy)
 
static void getGradY (const vpImage< unsigned char > &I, vpImage< double > &dIy, const double *filter, unsigned int size)
 
static void getGradY (const vpImage< double > &I, vpImage< double > &dIy, const double *filter, unsigned int size)
 
static void getGradYGauss2D (const vpImage< unsigned char > &I, vpImage< double > &dIy, const double *gaussianKernel, const double *gaussianDerivativeKernel, unsigned int size)
 

Detailed Description

Various image filter, convolution, etc...

Definition at line 66 of file vpImageFilter.h.

Member Function Documentation

◆ canny()

void vpImageFilter::canny ( const vpImage< unsigned char > &  Isrc,
vpImage< unsigned char > &  Ires,
const unsigned int  gaussianFilterSize,
const double  thresholdCanny,
const unsigned int  apertureSobel 
)
static

Apply the Canny edge operator on the image Isrc and return the resulting image Ires.

The following example shows how to use the method:

#include <visp3/core/vpConfig.h>
#include <visp3/core/vpImage.h>
#include <visp3/core/vpImageFilter.h>
int main()
{
#if VISP_HAVE_OPENCV_VERSION >= 0x020100 // Canny uses OpenCV >=2.1.0
// Constants for the Canny operator.
const unsigned int gaussianFilterSize = 5;
const double thresholdCanny = 15;
const unsigned int apertureSobel = 3;
// Image for the Canny edge operator
//First grab the source image Isrc.
//Apply the Canny edge operator and set the Icanny image.
vpImageFilter::canny(Isrc, Icanny, gaussianFilterSize, thresholdCanny, apertureSobel);
#endif
return (0);
}
Parameters
Isrc: Image to apply the Canny edge detector to.
Ires: Filtered image (255 means an edge, 0 otherwise).
gaussianFilterSize: The size of the mask of the Gaussian filter to apply (an odd number).
thresholdCanny: The threshold for the Canny operator. Only value greater than this value are marked as an edge).
apertureSobel: Size of the mask for the Sobel operator (odd number).
Examples:
tutorial-image-filter.cpp.

Definition at line 297 of file vpImageFilter.cpp.

References vpImageConvert::convert().

Referenced by vpMeNurbs::seekExtremitiesCanny().

◆ derivativeFilterX() [1/2]

template<class T >
static double vpImageFilter::derivativeFilterX ( const vpImage< T > &  I,
const unsigned int  r,
const unsigned int  c 
)
inlinestatic

Apply a 1x3 derivative filter to an image pixel.

Parameters
I: Image to filter
r: coordinates (row) of the pixel
c: coordinates (column) of the pixel

Definition at line 81 of file vpImageFilter.h.

Referenced by vpFeatureLuminance::buildFrom(), and getGradX().

◆ derivativeFilterX() [2/2]

template<class T >
static double vpImageFilter::derivativeFilterX ( const vpImage< T > &  I,
const unsigned int  r,
const unsigned int  c,
const double *  filter,
const unsigned int  size 
)
inlinestatic

Apply a 1 x size Derivative Filter in X to an image pixel.

Parameters
I: Image to filter
r: coordinates (row) of the pixel
c: coordinates (column) of the pixel
filter: coefficients of the filter to be initialized using vpImageFilter::getGaussianDerivativeKernel().
size: size of the filter
See also
vpImageFilter::getGaussianDerivativeKernel()

Definition at line 116 of file vpImageFilter.h.

◆ derivativeFilterY() [1/2]

template<class T >
static double vpImageFilter::derivativeFilterY ( const vpImage< T > &  I,
const unsigned int  r,
const unsigned int  c 
)
inlinestatic

Apply a 3x1 derivative filter to an image pixel.

Parameters
I: Image to filter
r: coordinates (row) of the pixel
c: coordinates (column) of the pixel

Definition at line 95 of file vpImageFilter.h.

Referenced by vpFeatureLuminance::buildFrom(), and getGradY().

◆ derivativeFilterY() [2/2]

template<class T >
static double vpImageFilter::derivativeFilterY ( const vpImage< T > &  I,
const unsigned int  r,
const unsigned int  c,
const double *  filter,
const unsigned int  size 
)
inlinestatic

Apply a size x 1 Derivative Filter in Y to an image pixel.

Parameters
I: Image to filter
r: coordinates (row) of the pixel
c: coordinates (column) of the pixel
filter: coefficients of the filter to be initialized using vpImageFilter::getGaussianDerivativeKernel().
size: size of the filter
See also
vpImageFilter::getGaussianDerivativeKernel()

Definition at line 143 of file vpImageFilter.h.

◆ filter() [1/4]

void vpImageFilter::filter ( const vpImage< double > &  I,
vpImage< double > &  Iu,
vpImage< double > &  Iv,
const vpMatrix M,
const bool  convolve = false 
)
static

Apply a filter to an image:

\[ \textbf{I}_u = \textbf{M} \ast \textbf{I} \textbf{ and } \textbf{I}_v = \textbf{M}^t \ast \textbf{I} \]

Parameters
I: Image to filter
Iu: Filtered image along the horizontal axis (u = columns).
Iv: Filtered image along the vertical axis (v = rows).
M: Filter kernel.
convolve: If true, perform a convolution otherwise a correlation.
Examples:
testImageFilter.cpp, and tutorial-image-filter.cpp.

Definition at line 126 of file vpImageFilter.cpp.

References vpImage< Type >::getHeight(), vpArray2D< Type >::getRows(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

Referenced by vpTemplateTracker::getGaussianBluredImage(), vpTemplateTrackerMI::getMI(), vpTemplateTrackerMI::getMI256(), vpTemplateTrackerZNCCForwardAdditional::initHessienDesired(), vpTemplateTrackerMIForwardCompositional::initHessienDesired(), vpTemplateTrackerZNCCInverseCompositional::initHessienDesired(), vpTemplateTrackerMIESM::initHessienDesired(), vpTemplateTrackerMIForwardAdditional::initHessienDesired(), vpTemplateTrackerMIInverseCompositional::initHessienDesired(), vpTemplateTracker::initTracking(), vpTemplateTrackerZNCCForwardAdditional::trackNoPyr(), vpTemplateTrackerSSDForwardCompositional::trackNoPyr(), vpTemplateTrackerMIForwardCompositional::trackNoPyr(), vpTemplateTrackerSSDESM::trackNoPyr(), vpTemplateTrackerSSDForwardAdditional::trackNoPyr(), vpTemplateTrackerZNCCInverseCompositional::trackNoPyr(), vpTemplateTrackerSSDInverseCompositional::trackNoPyr(), vpTemplateTrackerMIESM::trackNoPyr(), vpTemplateTrackerMIForwardAdditional::trackNoPyr(), and vpTemplateTrackerMIInverseCompositional::trackNoPyr().

◆ filter() [2/4]

void vpImageFilter::filter ( const vpImage< unsigned char > &  I,
vpImage< double > &  If,
const vpMatrix M,
const bool  convolve = false 
)
static

Apply a filter to an image.

Parameters
I: Image to filter
If: Filtered image.
M: Filter kernel.
convolve: If true, perform a convolution otherwise a correlation.
Note
By default it performs a correlation:

\[ \textbf{I\_filtered} \left( u,v \right) = \sum_{y=0}^{\textbf{kernel\_h}} \sum_{x=0}^{\textbf{kernel\_w}} \textbf{M} \left( x,y \right ) \times \textbf{I} \left( u-\frac{\textbf{kernel\_w}}{2}+x,v-\frac{\textbf{kernel\_h}}{2}+y \right) \]

The convolution is almost the same operation:

\[ \textbf{I\_filtered} \left( u,v \right) = \sum_{y=0}^{\textbf{kernel\_h}} \sum_{x=0}^{\textbf{kernel\_w}} \textbf{M} \left( x,y \right ) \times \textbf{I} \left( u+\frac{\textbf{kernel\_w}}{2}-x,v+\frac{\textbf{kernel\_h}}{2}-y \right) \]

Only pixels in the input image fully covered by the kernel are considered.

Definition at line 76 of file vpImageFilter.cpp.

References vpArray2D< Type >::getCols(), vpImage< Type >::getHeight(), vpArray2D< Type >::getRows(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ filter() [3/4]

void vpImageFilter::filter ( const vpImage< unsigned char > &  I,
vpImage< double > &  GI,
const double *  filter,
unsigned int  size 
)
static

Apply a separable filter.

Definition at line 326 of file vpImageFilter.cpp.

References vpImage< Type >::destroy(), filterX(), and filterY().

◆ filter() [4/4]

void vpImageFilter::filter ( const vpImage< double > &  I,
vpImage< double > &  GI,
const double *  filter,
unsigned int  size 
)
static

Apply a separable filter.

Definition at line 338 of file vpImageFilter.cpp.

References vpImage< Type >::destroy(), filterX(), and filterY().

◆ filterGaussXPyramidal()

static unsigned char vpImageFilter::filterGaussXPyramidal ( const vpImage< unsigned char > &  I,
unsigned int  i,
unsigned int  j 
)
inlinestatic

Definition at line 169 of file vpImageFilter.h.

Referenced by getGaussXPyramidal().

◆ filterGaussYPyramidal()

static unsigned char vpImageFilter::filterGaussYPyramidal ( const vpImage< unsigned char > &  I,
unsigned int  i,
unsigned int  j 
)
inlinestatic

Definition at line 174 of file vpImageFilter.h.

Referenced by getGaussYPyramidal().

◆ filterX() [1/4]

void vpImageFilter::filterX ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ filterX() [2/4]

void vpImageFilter::filterX ( const vpImage< double > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ filterX() [3/4]

static double vpImageFilter::filterX ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 183 of file vpImageFilter.h.

◆ filterX() [4/4]

static double vpImageFilter::filterX ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 228 of file vpImageFilter.h.

◆ filterXLeftBorder() [1/2]

static double vpImageFilter::filterXLeftBorder ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 196 of file vpImageFilter.h.

Referenced by filterX().

◆ filterXLeftBorder() [2/2]

static double vpImageFilter::filterXLeftBorder ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 241 of file vpImageFilter.h.

◆ filterXRightBorder() [1/2]

static double vpImageFilter::filterXRightBorder ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 212 of file vpImageFilter.h.

References vpImage< Type >::getWidth().

Referenced by filterX().

◆ filterXRightBorder() [2/2]

static double vpImageFilter::filterXRightBorder ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 257 of file vpImageFilter.h.

References vpImage< Type >::getWidth().

◆ filterY() [1/4]

void vpImageFilter::filterY ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ filterY() [2/4]

void vpImageFilter::filterY ( const vpImage< double > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ filterY() [3/4]

static double vpImageFilter::filterY ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 275 of file vpImageFilter.h.

◆ filterY() [4/4]

static double vpImageFilter::filterY ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 352 of file vpImageFilter.h.

◆ filterYBottomBorder() [1/2]

static double vpImageFilter::filterYBottomBorder ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 304 of file vpImageFilter.h.

References vpImage< Type >::getHeight().

Referenced by filterY().

◆ filterYBottomBorder() [2/2]

static double vpImageFilter::filterYBottomBorder ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 336 of file vpImageFilter.h.

References vpImage< Type >::getHeight().

◆ filterYTopBorder() [1/2]

static double vpImageFilter::filterYTopBorder ( const vpImage< unsigned char > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 288 of file vpImageFilter.h.

Referenced by filterY().

◆ filterYTopBorder() [2/2]

static double vpImageFilter::filterYTopBorder ( const vpImage< double > &  I,
unsigned int  r,
unsigned int  c,
const double *  filter,
unsigned int  size 
)
inlinestatic

Definition at line 320 of file vpImageFilter.h.

◆ gaussianBlur() [1/2]

void vpImageFilter::gaussianBlur ( const vpImage< unsigned char > &  I,
vpImage< double > &  GI,
unsigned int  size = 7,
double  sigma = 0.,
bool  normalize = true 
)
static

Apply a Gaussian blur to an image.

Parameters
I: Input image.
GI: Filtered image.
size: Filter size. This value should be odd.
sigma: Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
normalize: Flag indicating whether to normalize the filter coefficients or not.
Examples:
grabV4l2MultiCpp11Thread.cpp, and tutorial-image-filter.cpp.

Definition at line 432 of file vpImageFilter.cpp.

References vpImage< Type >::destroy(), filterX(), filterY(), and getGaussianKernel().

Referenced by vp::unsharpMask().

◆ gaussianBlur() [2/2]

void vpImageFilter::gaussianBlur ( const vpImage< double > &  I,
vpImage< double > &  GI,
unsigned int  size = 7,
double  sigma = 0.,
bool  normalize = true 
)
static

Apply a Gaussian blur to a double image.

Parameters
I: Input double image.
GI: Filtered image.
size: Filter size. This value should be odd.
sigma: Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
normalize: Flag indicating whether to normalize the filter coefficients or not.

Definition at line 455 of file vpImageFilter.cpp.

References vpImage< Type >::destroy(), filterX(), filterY(), and getGaussianKernel().

◆ gaussianFilter()

template<class T >
static double vpImageFilter::gaussianFilter ( const vpImage< T > &  fr,
const unsigned int  r,
const unsigned int  c 
)
inlinestatic

Apply a 5x5 Gaussian filter to an image pixel.

Parameters
fr: Image to filter
r: coordinates (row) of the pixel
c: coordinates (column) of the pixel

Definition at line 376 of file vpImageFilter.h.

◆ getGaussianDerivativeKernel()

void vpImageFilter::getGaussianDerivativeKernel ( double *  filter,
unsigned int  size,
double  sigma = 0.,
bool  normalize = true 
)
static

Return the coefficients of a Gaussian derivative filter that may be used to compute spatial image derivatives after applying a Gaussian blur.

Parameters
filter: Pointer to the filter kernel that should refer to a (size+1)/2 array. The first value refers to the central coefficient, the next one to the right coefficients. Left coefficients could be deduced by symmetry.
size: Filter size. This value should be odd.
sigma: Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
normalize: Flag indicating whether to normalize the filter coefficients or not.

Definition at line 517 of file vpImageFilter.cpp.

References vpImageException::incorrectInitializationError, and vpMath::sqr().

Referenced by vpTemplateTracker::setGaussianFilterSize(), and vpTemplateTracker::vpTemplateTracker().

◆ getGaussianKernel()

void vpImageFilter::getGaussianKernel ( double *  filter,
unsigned int  size,
double  sigma = 0.,
bool  normalize = true 
)
static

Return the coefficients of a Gaussian filter.

Parameters
filter: Pointer to the filter kernel that should refer to a (size+1)/2 array. The first value refers to the central coefficient, the next one to the right coefficients. Left coefficients could be deduced by symmetry.
size: Filter size. This value should be odd.
sigma: Gaussian standard deviation. If it is equal to zero or negative, it is computed from filter size as sigma = (size-1)/6.
normalize: Flag indicating whether to normalize the filter coefficients or not.

Definition at line 478 of file vpImageFilter.cpp.

References vpImageException::incorrectInitializationError, and vpMath::sqr().

Referenced by gaussianBlur(), vpTemplateTracker::setGaussianFilterSize(), and vpTemplateTracker::vpTemplateTracker().

◆ getGaussPyramidal()

void vpImageFilter::getGaussPyramidal ( const vpImage< unsigned char > &  I,
vpImage< unsigned char > &  GI 
)
static

◆ getGaussXPyramidal()

void vpImageFilter::getGaussXPyramidal ( const vpImage< unsigned char > &  I,
vpImage< unsigned char > &  GI 
)
static

◆ getGaussYPyramidal()

void vpImageFilter::getGaussYPyramidal ( const vpImage< unsigned char > &  I,
vpImage< unsigned char > &  GI 
)
static

◆ getGradX() [1/3]

◆ getGradX() [2/3]

void vpImageFilter::getGradX ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ getGradX() [3/3]

void vpImageFilter::getGradX ( const vpImage< double > &  I,
vpImage< double > &  dIx,
const double *  filter,
unsigned int  size 
)
static

◆ getGradXGauss2D()

void vpImageFilter::getGradXGauss2D ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIx,
const double *  gaussianKernel,
const double *  gaussianDerivativeKernel,
unsigned int  size 
)
static

◆ getGradY() [1/3]

◆ getGradY() [2/3]

void vpImageFilter::getGradY ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIy,
const double *  filter,
unsigned int  size 
)
static

◆ getGradY() [3/3]

void vpImageFilter::getGradY ( const vpImage< double > &  I,
vpImage< double > &  dIy,
const double *  filter,
unsigned int  size 
)
static

◆ getGradYGauss2D()

void vpImageFilter::getGradYGauss2D ( const vpImage< unsigned char > &  I,
vpImage< double > &  dIy,
const double *  gaussianKernel,
const double *  gaussianDerivativeKernel,
unsigned int  size 
)
static

◆ sepFilter()

void vpImageFilter::sepFilter ( const vpImage< unsigned char > &  I,
vpImage< double > &  If,
const vpColVector kernelH,
const vpColVector kernelV 
)
static

Apply a filter to an image using two separable kernels. For instance, the Sobel kernel can be decomposed to:

\[ \left [ \begin{matrix} 1 & 0 & -1 \\ 2 & 0 & -2 \\ 1 & 0 & -1 \end{matrix} \right ] = \left [ \begin{matrix} 1 \\ 2 \\ 1 \end{matrix} \right ] \ast \left [ \begin{matrix} 1 && 0 && -1 \end{matrix} \right ] \]

Thus, the convolution operation can be performed as:

\[ G_x = \left [ \begin{matrix} 1 \\ 2 \\ 1 \end{matrix} \right ] \ast \left ( \left [ \begin{matrix} 1 && 0 && -1 \end{matrix} \right ] \ast I \right ) \]

Using two separable kernels reduce the number of operations and can be faster for large kernels.

Parameters
I: Image to filter
If: Filtered image.
kernelH: Separable kernel (performed first).
kernelV: Separable kernel (performed last).
Note
Only pixels in the input image fully covered by the kernel are considered.
Examples:
testImageFilter.cpp.

Definition at line 224 of file vpImageFilter.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), vpImage< Type >::resize(), and vpArray2D< Type >::size().