Python OpenCV 边缘滤波保留(EPF)
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。
基础知识铺垫
前几篇博客学习到的各种模糊都属于卷积操作,它们存在一个共同点,模糊之后图像的边缘信息不再存在。
本篇博客学习的边缘保留滤波算法(EPF),是一种能通过卷积处理实现模糊图像的同时,又不会对图像边缘造成破坏,并且卷积操作之后的图像,可以完整保存图像整体边缘。
具体实现分为:高斯双边滤波,均值迁移滤波
原理不在细说,属于数学知识,先用起来,等需要的时候,在反推数学基础知识。
橡皮擦学到这时的第一个感觉就是,放弃吧,根本不知道这些内容用在哪里!
函数原型介绍
高斯双边滤波
双边滤波函数原型如下:
参数说明:
src:输入图像;
d:过滤过程中每个像素邻域的直径范围。如果不是正数,则函数会从参数 sigmaSpace 计算该值;
sigmaColor:颜色空间过滤器的 sigma 值,参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半等色区域;
sigmaSpace:坐标空间中滤波器的 sigma 值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当 d>0 时,d 指定了邻域大小且与 sigmaSpace 无关,否则 d 正比于 sigmaSpace。
dst:和源图象相同大小、相同格式的输出图象;
一般将 sigmaSpace
设置大一些,sigmaColor
设置小一些,最终呈现的效果较好。
优缺点:双边滤波,可很好的保存图像边缘细节,并且过滤掉低频分量的噪音,但是双边滤波效率不是很高,花费时间比其他滤波器较长。
测试代码如下,先掌握函数基本使用再说。
运行效果,有点美颜磨皮的效果了,不过效果还不是很好,估计是参数的问题。
均值迁移滤波
均值迁移算法是一种通用的聚类算法,它的基本原理是:
对于给定的一定数量样本,任选其中一个样本,以该样本为中心点划定一个圆形区域,求取该圆形区域内样本的质心,即密度最大处的点,再以该点为中心继续执行上述迭代过程,直至最终收敛。(没看太明白,大概了解一下即可)
函数原型如下:
参数说明:
src:输入图像,8 位 3 通道图像;
sp:迁移物理空间半径大小;
sr:迁移色彩空间半径大小;
dst:可选参数,和源图象相同大小、相同格式的输出图象;
maxLevel:可选参数,金字塔的最大层数;
termcrit:可选参数,迁移迭代终止条件,可以设置为迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合。
所有参数中,sp
与 sr
必选,二者设置的值越大,对图像色彩的平滑效果越明显,同时函数耗时越多。
测试代码如下:
运行效果,有点像油画的效果。
橡皮擦的小节
最近有小伙伴给橡皮擦发私信询问:“橡皮擦,我们这样不学习原理就 CALL 函数,能学会 OpenCV 吗?”
“放心,没有问题,365 天路还长着呢”
坚持吧,橡皮擦给这种学习形式命名为“上帝视角学习法”
先用最简单的办法,把 OpenCV 中的知识点都过一遍,掌握全局概念之后,在细究里面每一个细节点
如果每一个知识都钻牛角尖,天天都是难点,你很难坚持下去。
1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?
做为初学者,还有很多地方学习的不深入,希望你与我一起坚持下去。
相关阅读
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9852bebb8a83212c83bd5686】。文章转载请联系作者。
评论