学习视频可参见python+opencv3.3视频教学 基础入门
outline
- 边缘保留滤波(EPF)
- 高斯双边
- 均值迁移
1.高斯双边
-
图像边缘是指图像属性区域和另一个属性区域的交接处,是区域属性发生突变的地方,是图像不确定性最大的地方,也是图像信息最集中的地方,图像的边缘包含着丰富的信息
-
高斯滤波是一种低通滤波,它在滤除图像中噪声信号的同时,也会对图像中的边缘信息进行平滑,表现出来的结果就是图像变得模糊
- 高斯滤波之所以会导致图像变得模糊,是因为它在滤波过程中只关注了位置信息
- 在滤波窗口内,距离中心点越近的点的权重越大;这种只关注距离的思想在某些情况下是可行的,例如在平坦的区域,距离越近的区域其像素分布也越相近,自然地,这些点的像素值对滤波中心点的像素值更有参考价值。但是在像素值出现跃变的边缘区域,这种方法会适得其反,损失掉有用的边缘信息。
- 关于高斯滤波的详细内容可参见【图像处理】数字图像傅里叶变换的物理意义及简单应用
-
为了保护边缘信息,提出了双边滤波
-
双边滤波函数
-
void bilateralFilter( InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT );
-
src:输入图像,dst: 输出图像,d:滤波窗口的直径(函数注释中使用的是Diameter,那么很可能函数中选取的窗口是圆形窗口),sigmaColor:像素值域方差,sigmaSpace:空间域方差,以及边缘处理方式。
-
测试用例:
-
def bi_demo(image): # bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None) """ 同时考虑空间与信息和灰度相似性,达到保边去噪的目的 双边滤波的核函数是空间域核与像素范围域核的综合结果: 在图像的平坦区域,像素值变化很小,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊; 在图像的边缘区域,像素值变化很大,像素范围域权重变大,从而保持了边缘的信息。 """ dst = cv.bilateralFilter(image, 0, 100, 15) # 高斯双边 cv.imshow("bi_demo", dst)
-
效果如下:
-
双边滤波在高斯滤波的基础上加入了像素值权重项,也就是说既要考虑距离因素,也要考虑像素值差异的影响,像素值越相近,权重越大
-
关于双边滤波的详细内容可参见【图像处理】——双边滤波
-
2.均值迁移
-
API接口
-
pyrMeanShiftFiltering def pyrMeanShiftFiltering(src, sp, sr, dst=None, maxLevel=None, termcrit=None)
-
参数含义
- sp,定义的漂移物理空间半径大小;
- sr,定义的漂移色彩空间半径大小
-
测试用例:
-
def shift_demo(image): # 均值迁移 dst = cv.pyrMeanShiftFiltering(image, 10, 50) cv.imshow("shift_demo", dst)
-
-
输出结果:
-
输出结果:
[外链图片转存中…(img-0aVsLIeH-1604485833973)]
结语
以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。