目录
可分离滤波的原理基于滤波器的可分离性。对于一个二维滤波器,如果它可以表示为水平方向和垂直方向两个一维滤波器的卷积,那么它就是可分离的。也就是说,一个二维滤波器可以通过两次一维卷积来实现,分别在水平和垂直方向进行滤波。

void cv::sepFilter2D ( InputArray src,
OutputArray dst,
int ddepth,
InputArray kernelX,
InputArray kernelY,
Point anchor = point(-1,-1),
double delta =0 ,
int borderType = BORDER_DEFAULT
)
展示如何使用可分离滤波在图像上应用高斯滤波:
- //可分离滤波
- void Separable_filtering(Mat image){
- // 定义滤波器大小和标准差
- int ksize = 3;
- double sigma = 1.0;
-
- // 获取水平方向和垂直方向的高斯滤波器
- cv::Mat kernelX = cv::getGaussianKernel(ksize, sigma);
- cv::Mat kernelY = cv::getGaussianKernel(ksize, sigma);
-
- // 计算水平方向和垂直方向上的一维滤波器
- cv::Mat kernelXY = kernelX * kernelY.t();
-
- // 执行可分离滤波
- cv::Mat result;
- cv::sepFilter2D(image, result, -1, kernelX, kernelY);
-
- }
在上述示例中,cv::getGaussianKernel()函数用于获取高斯滤波器。ksize参数表示滤波器的大小,sigmaX和sigmaY参数表示X和Y方向上的标准差。
通过将一维滤波器应用于图像的两个方向,并使用cv::sepFilter2D()函数将它们结合起来,我们可以实现高效的可分离滤波操作。