Qt+OpenCV联合开发(二十七)–高斯模糊

一、引言

上篇文章涉及的卷积操作针对的是均值卷积,即卷积核的每个系数都是相同的,但有时候我们并不希望每个系数相同,如果想这样,那么我们应该怎么产生这些系数,系数的产生也不是手动的而是随机的,这样就涉及到了高斯模糊(产生高斯卷积核)

高斯模糊考虑了中心像素距离的影响,对距离中心像素使用高斯分布公式生成不同的权重系数给卷积核,然后用此卷积核完成图像卷积得到输出结果就是图像高斯模糊之后的输出

高斯卷积数学表达式说明:

均值与高斯的不同:最主要就是卷积核的系数不一样,高斯的中心的数值最大(上图中0.159),考虑到了中心像素对输出的贡献,离中心距离越远,数值越小

利用高斯核函数产生的卷积核如下图,越靠近中心(红色部分),系数越大。

二、函数原型

c++原型:

参数:

  1. src      输入图像; 它可以有任意数量的通道,这些通道是独立处理的,但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
  2. dst      输出与src相同大小和类型的图像
  3. ksize    卷积核(高斯滤波器窗口大小)
  4. sigmaX  X方向滤波系数
  5. sigmaY   Y方向滤波系数
  6. borderType    图像边缘处理方式

注:

默认情况下,sigmaX = sigmaY,上面提到的高斯函数公式就是默认sigmaX = sigmaY,所以可以提取出 x的平方+y的平方

三、实现效果

1、未指定窗口大小(卷积核0x0  sigma=15 ):

2、卷积核5x5 

四、代码

void test1::gaussian_blur_demo(Mat &image)
{
    Mat dst;
    GaussianBlur(image,dst,Size(0,0),15);
    imshow("gaussian_blur_image", dst);
}

1、卷积最重要的并不是输入图像本身,而是你会产生不同的卷积核,并产生不同的输出效果

2、代码中Size(0,0),并不是窗口为0x0 ,而是会从sigma来反算窗口的大小,当我们指定了窗口大小,那么sigma就不会起作用,会从窗口大小来计算sigma,这也就是窗口大小与sigma之间的关系,Size、sigma这两个的值都是越大越模糊,sigma的影响更明显

拓展:

什么是卷积神经网络:就是我也不知道那个卷积核是什么东西,让机器去学,学一堆卷积核出来,挑出好的使用

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>