【OpenCV学习2】图像滤波

图像滤波:

图像滤波分为线性滤波和非线性滤波。

线性滤波:输出图像上每个像素点的值都是由输入图像各像素点值加权求和的结果。(即运算只涉及加减乘除是则运算。)
非线性滤波:算子中包含了取绝对值、置零等非线性运算。

线性滤波:

基本原理:
在这里插入图片描述
其中:
i,j表示图像的行跟列,
f(i,j)表示当前像素,
k,l表示卷积核的尺寸,
h(k,l)表示卷积核对应区域的权值
输出的灰度值=以该像素点为中心的卷积核大小的图像区块进行权值计算并求和

在这里插入图片描述
卷积核大小为3×3,利用卷积算子重新计算中心像素的值,若每次移动一格,则步长为1.

事实上,我们可以发现,卷积操作存在一些边缘像素无法处理的问题,因此这些边缘像素需要另作考虑。

线性滤波之图像平滑(模糊):
目地:使用平滑对图像进行预处理能够降低图像的噪声

均值滤波:

在这里插入图片描述
中心像素值为卷积核区域内像素的平均值(权重都相同),
这样像素与像素之间的梯度值就减小了,因此称为均值滤波

OpenCV API:
cv::blur(Mat src, Mat dst, Size(rows,cols),Point(-1,-1))
其中:
Size为卷积核尺寸,
Point(-1,-1)表示中心像素的位置,默认在卷积核正中心

高斯滤波(二元):

在这里插入图片描述
和均值滤波的差异在于,
高斯滤波卷积核的权重的计算基于正态分布
(越靠近中心像素权重越大 越远离中心像素权重越小)
相对于均值滤波,高斯滤波能较好的保留图像的特征,比如像素的拐点,角点,(像素之间差异较大的点)

OpenCV API:
cv::GaussianBlur(Mat src, Mat dst, Size(rows,cols), Sigma x, Sigma y)
其中:
Sigma x表示沿x方向的分布标准差
Sigma y表示沿y方向的分布标准差
标准差越大图像越模糊

blur(src, dst, Size(15,15)); //均值滤波
GaussianBlur(src, dst, Size(15, 15),2,2); //高斯滤波

在这里插入图片描述
卷积核size:15×15,sigma=2
能够看出同样尺度的卷积核,高斯滤波保留的特征更多

非线性滤波:

中值滤波:

(以此相对应的有最小/最大值滤波)
中值滤波基于统计排序的滤波器,
对椒盐噪声有很好的抑制作用

在这里插入图片描述
椒盐噪声一般情况下是图像的坏点,
具有极大值或极小值的特性,
使用中值滤波能有效过滤区域的极大极小值。

OpenCV API:
medianBlur(Mat src, Mat dst, Size(rows,cols))
中值模糊的Size大小必须大于1且是奇数
在这里插入图片描述

双边滤波:

与均值滤波相比,
高斯滤波能有效克服图像边缘像素(一些梯度差值较大的区域)丢失的问题,但无法完全避免。
对此,高斯双边模糊是基于高斯滤波的一种边缘保留的滤波方法,避免了边缘信息丢失,能有效保留图像的基本轮廓
在这里插入图片描述
我们再做进一步了解:
图中输入a存在边缘信息,普通的高斯滤波会将红色与蓝色的部分无差别对待,从而导致边缘信息被模糊而丢失
而双边滤波注意到了这一差异,因此在红色区域的滤波操作便不会涉及到蓝色区域,同理蓝色,最终红蓝区域的交界处的边缘信息得以保留。

OpenCV API:
bilateralFilter(Mat src, Mat dst, d, sigmaColor, sigmaSpace)
其中:
d为卷积核的直径
sigmaColor决定纳入计算的颜色梯度范围
sigmaSpace如果d>0则声明无效,否则根据其来计算d的值,(d和其成比例)

在这里插入图片描述
双边滤波+提高对比度:(常用于人像美容):
在这里插入图片描述

可参考博客:OpenCV3学习(4.2)——图像常用滤波方法(方框、均值、高斯、中值、双边)

猜你喜欢

转载自blog.csdn.net/SESESssss/article/details/105932010
今日推荐