OpenCV 有一些线性滤镜可以用来平滑图像。
归一化盒过滤器 (Normalized Box Filter)
很好理解,新的图像的每一个像素点都是原图像该位置附近的像素点的强度取平均。
可以有效地平滑图像,降低其尖锐程度,降低噪声(但不能消除噪声)。
1 | blur(src, dst, ksize, anchor, borderType); |
borderType 详见 这篇文章
高斯过滤器 (Gaussian Filter)
可能是最有用的过滤器。由于要计算高斯核所以会慢一些。效果比较接近现实世界中的模糊效果。
看不太懂。
1 | GaussianBlur(src, dst, ksize, sigmaX, sigmaY, borderType, hint); |
中位数过滤器 (Median Filter)
每个位置附近像素值的中位数。
效果有点像融化后混合了。
1 | medianBlur(src, dst, ksize); |
双边过滤器 (Bilateral Filter)
在比较好地保留边界的前提下使色块内部变得平滑。
据说可以应用在初步的美颜上。
原理没太搞懂,大概就是像素值差与距离差同时考虑后得到的卷积核。
是结合图像的空间邻近度和像素值相似度的一种折中处理。
1 | bilateralFilter (src, dst, d, sigmaColor, sigmaSpace, borderType); |
sigmaColor
(颜色空间中的标准差):- 这个参数控制的是颜色相似度的影响。它决定了相邻像素之间的颜色差异在滤波过程中有多大的影响。
- 当
sigmaColor
较大时,即使像素之间的颜色差异较大,它们也会相互影响较多,因此滤波器会更倾向于平滑颜色变化较大的区域。 - 反之,如果
sigmaColor
较小,滤波器只会在颜色相近的像素之间进行平滑,从而保留更多的颜色边缘和细节。
sigmaSpace
(空间距离中的标准差):- 这个参数控制的是空间距离的影响,即考虑多远的像素在滤波时应该被包括进来。
- 当
sigmaSpace
较大时,滤波器会在更大范围内对像素进行平滑处理,可能会产生较大的模糊效果。 - 如果
sigmaSpace
较小,只有靠近的像素会对滤波结果产生显著影响,这样可以更好地保留细节但减少模糊的效果。