Python实现在线批量美颜功能过程解析


Posted in Python onJune 10, 2020

结果

Python实现在线批量美颜功能过程解析

然后直接放源码:

import cv2 as cv

source = cv.imread("zhaopian.jpg")
dst = cv.bilateralFilter(src=source, d=0, sigmaColor=30, sigmaSpace=15)

cv.imshow("source", source)
cv.imshow("dst", dst)

cv.waitKey()
cv.destroyAllWindows()

好了,本文结果部分介绍结束,想进一步了解一下原理的同学可以接着往下看了,没啥兴趣的可以左上角了。

双边滤波原理

上面的图片美颜效果其实使用的是 OpenCV 中为我们提供的双边滤波器,是一种图片降噪算法。

双边滤波(Bilateral filter)是一种非线性的滤波方法,本质是基于高斯滤波。

前面的文章介绍过,高斯滤波的方式会造成边缘模糊化,这是没办法的事情,这是高斯滤波过滤方式而导致的。

而双边滤波就是在高斯滤波的基础上,对高斯滤波的方式加以改进,结合图像的空间邻近度和像素值相似度的一种折处理,同时考虑 空域信息(domain) 和 值域信息(range) ,达到保边降噪的目的。

说人话就是双边滤波在进行滤波的过程中,不光要考虑周围像素值与中点像素值的大小之差,还需要考虑空间上的距离,进而确定该点对中间点的影响因子。

比如在一张图像中,相邻的像素点的颜色会非常相近,但是如果在边缘区域,相邻元素点的颜色变化会非常的大。

高斯过滤器的过滤过程中就是因为没有考虑边缘区域而导致过滤后图像边缘模糊,而双边滤波由于在过滤的过程中考虑到了周围像素值与中点像素值的差值大小,从而会确定一个影响因子,从而实现图片的保边降噪。

具体的实现原理如下:

希望你们的高中数学没有都还给你们的数学老师

整个双边滤波的算法分为两部分,一个是颜色值的相似度(值域核),公式如下:

$$
r(i, j, k, l) = exp( - \frac{||f(i, j) − f(k, l)||2}{2{\sigma2_r}} )
$$

另一个是计算空间距离的相似度(空域核),也就是说,离得越近,相似度越高,公式如下:

$$
d(i, j, k, l)=exp( - \frac{(i−k)^2 + (j−l)2}{2{\sigma2_d}})
$$

上面的逻辑还是很清晰,千万不要被一堆符号弄晕了。

这里 (i, j) 代表的是要处理的像素点的坐标点,而 (k,l) 则是要处理的范围内,可能影响到其值的像素点的坐标。

最终的权重系数 w(i,j,k,l) 取决于空域核和值域核的乘积,公式如下:

$$
w(i,j,k,l)=d(i,j,k,l) ∗ r(i,j,k,l) = exp( - \frac{(i−k)^2 + (j−l)2}{2{\sigma2_d}} - \frac{||f(i, j) − f(k, l)||2}{2{\sigma2_r}})
$$

下面是一个经典的双边滤波的原理示意图:

Python实现在线批量美颜功能过程解析

从这个图中可以看出,在图(b)空域核上,每个像素的权重是符合高斯分布的,而在图(c)的值域核上,由于像素取值相差过大,不同颜色的权重系数相差也很大,双边过滤过滤完成后,边缘两侧的像素点保留了原有的色彩值。

接下来还是看下双边滤波的原函数:

def bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)

  • src:原图
  • d:像素邻域的直径。如果这个值设为非正数,那么 OpenCV 会从第五个参数 sigmaSpace 来将它计算出来。
  • sigmaColor:颜色空间滤波器的 $\sigma$ 值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
  • sigmaSpace:坐标空间中滤波器的 $\sigma$ 值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当 d > 0 , d 指定了邻域大小且与 sigmaSpace 无关。否则, d 正比于 sigmaSpace 。使用过程中我发现这个值越大,图像的过渡效果越好。

源代码我就不放了,实际上只有那一行代码,不过希望看到本文的各位除了知道双边滤波能对图像进行美颜以外还是能稍微了解下原理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python学习小技巧之列表项的排序
May 20 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
python分析作业提交情况
Nov 22 Python
python模块之paramiko实例代码
Jan 31 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python3 使用traceback定位异常实例
Mar 09 Python
django 多数据库及分库实现方式
Apr 01 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 #Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 #Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 #Python
keras 获取某层的输入/输出 tensor 尺寸操作
Jun 10 #Python
Python 字典中的所有方法及用法
Jun 10 #Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 #Python
Keras—embedding嵌入层的用法详解
Jun 10 #Python
You might like
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Python正则表达式如何匹配中文
2020/05/27 Python
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
集团薪酬管理制度
2014/01/13 职场文书
自动一体化专业求职信
2014/03/15 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL