本文最后更新于:2024年5月7日 下午
本文摘录OpenCV 中的卷积、滤波相关操作内容,重点介绍 Opencv 中的平滑滤波操作。
平滑
平滑一般也称“模糊”,是一种简单而又常用的图像处理操作。平滑图像的目的有很多,但通常都是为了减少噪声和伪影。在降低图像分辨率的时候,平滑也是十分重要的。OpenCV 提供5种不同的平滑操作,每种操作都有对应的函数实现,这些操作平滑的结果有着细微的差别。
1. cv2.blur()
简单模糊,官网链接
- 函数使用
1 |
|
blur
函数执行平均的核卷积图像操作,卷积核为:
- 示例代码
1 |
|
2. cv2.boxFilter()
OpenCV中的函数
cv2.boxFilter()
是一种一般化的形式,而cv2.blur()
是一种特殊化的形式。两者之间根本的区别主要是前者可以以非归一化形式调用,并且输出图像深度可以控制(cv2.blur()
输出图像的深度与源图像保持一致)。假如变量ddepth的值设为-1,目标图像的深度将于源图像保持一致。
- 函数使用
1 |
|
- 示例代码
1 |
|
3. cv2.medianBlur()
中值滤波,官网链接
中值滤波器是一种非线性核的实例,无法以图形形式表示。
- 函数使用
1 |
|
中值滤波器(Median Filter)将每个像素替换为围绕这个像素的矩形邻域内的中值或“中值”像素(相对于平均像素)。通过平均的简单模糊对噪声图像,尤其是有较大孤立的异常值(比如数字影像中的拍摄噪声)非常敏感。少量具有较大偏差的点也会严重影响到均值滤波。中值滤波可以采用取中间点的方式来消除异常值。
- 示例代码
1 |
|
4. cv2.GaussianBlur()
使用高斯滤波器模糊图像。该函数卷积具有指定高斯核的源图像。
- 函数使用
1 |
|
- 两个 sigmas 都是零,高斯参数计算公式:
$$
\begin{array}{c}
\sigma_{x}=\left(\frac{n_{x}-1}{2}\right) \cdot 0.30+0.80, n_{x}=k size. width -1\
\sigma_{y}=\left(\frac{n_{y}-1}{2}\right) \cdot 0.30+0.80, n_{y}=k size .height -1
\end{array}
$$
- 高斯核示例
- OpenCV实现的高斯平滑还为几个常用的内核提供性能上的优化。3×3、5×5以及7×7的标准sigma核(sigmaX=0.0) 相对其他核性能更优。
- 示例代码
1 |
|
5. cv2.bilateralFilter()
双边滤波
- 函数使用
1 |
|
相似于高斯平滑,双边滤波对每个像素及其领域内的像素进行了加权平均。其权重由两部分组成,第一部分同高斯平滑;第二部分也是高斯权重,不同的是它不是基于空间距离而是色彩强度差计算而来,在多通道(彩色)图像上强度差由各分量的加权累加代替。
可以把双边滤波当作是高斯平滑,只是相似程度更高的像素权值更高,边缘更明显,对比度更高。双边滤波的效果就是将源图像变成一幅水彩画,这种效果在多次迭代后更加显著,因此这种方法在图像分割领域十分有用。
-
示例代码
1 |
|
示例源码
参考资料
- 《学习 OpenCV3》 第十章
文章链接:
https://www.zywvvd.com/notes/study/image-processing/opencv/opencv-smooth/opencv-smooth/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付