作者:天儿哥

有了前面的照片处理基础,这一篇开始讲美颜算法。

一、滤波为什么要保边?

人像美颜技术中,最重要的技术之一就是磨皮,没有磨皮谁还敢自拍,谁还敢直播?

磨皮本质上就是对图像进行滤波,比如前面讲的均值滤波,或者高斯滤波,说直白点就是对整张图片进行一定程度的模糊。但是仅这么处理是不够的,整张图片都会模糊掉,所以需要在模糊的同时,保留人像面部的边界特征,此处的“保留”就是保边。

二、保边滤波算法

保边滤波算法有很多种,我们不一一展开,这里仅讨论有代表性的“双边滤波”,带大家感性认识保边滤波的实现思路。其他的保边滤波算法列在文末,有兴趣的读者可自行研究。

2.1 双边滤波原理:参看下面示意图。

左边的输入是一个表面粗糙并且有边界的图像,那个阶梯表示边界。

中间的滤波算法是一个高斯模糊 * 范围的权重,即在高斯模糊的基础上,保持阶梯的突变。

右边是滤波的结果,图像的边界依然存在,没有被模糊,阶梯两侧均进行了平滑的模糊。

聪明的你会发现,其实就是在高斯模糊的同时,根据当前像素周围的像素信息,来计算不同的权重,结合权重来模糊。大多数空间滤波的本质都是如此,掌握双边滤波一种,其他的也更容易理解。

2.2 结合双边滤波的公式加深理解:

假设像素I(i, j)的邻域半径为R,邻域⼤⼩为S,邻域内的像素为I(k,l),那么滤波后的像素值Id的计算公式如下,w(i, j, k,l )是权重函数

其中权重w的计算如下:

σd和σr分别是空间距离、颜色差值的方差,exp函数即自然数e的幂。

可以想象,当处理到边界像素时,像素突变,I(i, j) - I(k,l) 值非常大,Wr ≈ 0,W(i,j,k,l)整体很小,即周围的像素影响很小,几乎保留了当前像素的原始值。这就是通过权重,实现了“保边”。

同理,当I(i, j) - I(k,l) 接近,Wr ≈ 1,则主要体现了高斯模糊Wd的权重,该像素进行了平滑的模糊处理。

处理结果:

三、其他滤波

算法比较枯燥,单篇不适宜大而全,这里列举其他常见保边滤波算法,读者可自行研究。

1. Surface Blur滤波

Surface Blur滤波又叫表⾯模糊滤波,是Photoshop中的⼀种常⽤滤波算法,也是⼀种空间域滤波算法。

2. Guided滤波算法,论文:

http://mmlab.ie.cuhk.edu.hk/pdf/pami12Guided%20Image%20Filtering.pdf

3. 局部均值滤波算法

局部均值滤波算法是 JONG-SEN LEE于 1980年在论⽂[8]中提出的⼀种基于局部均值⽅差的滤波算法。在普通的均值滤波基础之上,增加了方差的权重,由于效率高被广泛应用。

4. Anisotropic滤波

算法原理有点复杂,需要复习多元微积分,熟悉“散度”的定义

Anisotropic滤波也叫各向异性扩散滤波,由Pietro Perona和Jagannatch Malik在1990年发表的论⽂[9]中提出,在图像去噪中效果明显。此算法可以在去噪的同时,保留图像的边缘,因此,笔者认为此算法也可以作为美颜算法的可选算法之⼀

5. Smart Blur滤波算法

Smart Blur是Photoshop 2018(简称PS2018)中出现的⼀种保边滤波器,具体参考论⽂不详。

6. MeanShift滤波算法(均值飘移)

MeanShift即均值漂移,最早由Fukunaga在1975年提出,论⽂题⽬为“The Estimation of the Gradient of a density function”。MeanShift滤波算法是⽤MeanShift算法来实现的⼀种图像保边滤波算。理解起来有点复杂,算法复杂度较高,感觉不适合实际的应用,且当参考。

本篇没有给出代码,后面有时间,我写一个demo,将算法内置到Android  iOS中供读者参考。

参考:图像视频滤镜与人像美颜

均值滤波计算_从零学美颜算法保边滤波相关推荐

  1. sql两个数字之差取最接近的_从零学DAX/Sql/Python030203SQL数据分类汇总续篇

       点击"数字化审计",可以关注哦! 开篇啰嗦话 上篇文章,为你介绍了SQL语句中select 的group by参数进行分类统计,group by在审计数据分析过程中是必然绕不 ...

  2. java 正负号数值比较_从零学java笔录-第10篇 数据类型(四)

    从零学java笔录-第10篇 数据类型(四) 凯哥Java 凯哥java 本文是<凯哥陪你学系列之java基础篇> 感谢: 感谢网友:志远162.在上一篇中对错误指出. 在上篇中模运算正负 ...

  3. 均值滤波计算_均值滤波器

    作者:泛音公众号:数学交点分享知识,共同学习,欢迎机器学习爱好者的投稿. 均值滤波器 介绍 均值滤波器属于低通滤波器: 输出为模板内领域像素的简单平均值: 主要用于图像的模糊和降噪,去除尖锐部分,比滤 ...

  4. 均值滤波计算_图像处理基础均值滤波(模糊)

    作者:爱干球的RD 图像处理中,有几种常见的基础算法,比如"模糊"."灰度"."浮雕"."黑白"."底片&qu ...

  5. 均值滤波计算_图像处理之低通滤波

    在图像处理或者计算机视觉应用中,在正式对图像进行分析处理前一般需要一个预处理的过程.预处理是对图像作一些诸如降维.降噪的操作,主要是为后续处理提供一个体积合适的.只包含所需信息的图像.这里通常会用到一 ...

  6. 协议crc计算_从零了解modbus协议 第三篇

    Modbus 介绍 协议介绍 MODBUS协议是一种消息传递结构,广泛用于智能设备间建立主从通信.一个MODBUS消息从主机发给从机,包含了从机地址.命令(例如,读寄存器或者写寄存器).数据.校验码( ...

  7. CENTOS 7 踢用户_从零学ELK系列(三):Centos安装Docker(超详细图文教程)

    CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) [前言] 为了更加真实的模拟生产部署环境,不仅需要Linux环境支持,而且ELK需要在不同的机器上部署:再 ...

  8. sql group by 取每组符合条件_从零学SQL-经典面试题

    面试训练题根据数据库school来练习,其中四个表数据如下: 一.简单查询 面试官:查询姓"猴"的学生名单. 面试官:查询姓名中最后一个字是"猴"的学生名单. ...

  9. python脚本编程实例_从零学python系列之数据处理编程实例(一)

    要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔 ...

最新文章

  1. 文本框怎么变大html,如何设置HTML文本框的大小?
  2. python中matplotlib条形图-python matplotlib库绘制条形图练习题
  3. OpenRASP xss算法的几种绕过方法
  4. 每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾
  5. CF1110E Magic Stones(构造题)
  6. maven+scala和java_maven打包scala+java工程
  7. 微信扫码提示在浏览器中打开的2种实现方式
  8. 朴素贝叶斯和情感分类
  9. 天猫小黑盒从发布新品到影响供应链
  10. Deltix宣布CryptoCortex与MPC钱包提供商Curv整合
  11. 网络编程(6)--------javaweb(TCP协议)
  12. 天轰川 推荐的Javscript大收集 大集锦 收藏
  13. [在线挑战]【i春秋】渗透测试入门 —— 渗透测试笔记 --转
  14. 2014华为南研所实习生求职
  15. .MMAP是什么格式?
  16. 二分图/二部图(bipartite graph)
  17. 支付宝支付sdk解析
  18. PAT 1070 结绳
  19. css样式(火狐的兼容性问题)
  20. 狼人杀超详入门攻略2之狼人战术

热门文章

  1. .NET Timer控件
  2. linux中的echo%3e文件,Linux学习笔记-shell脚本中${}的使用方法
  3. 阿里云 redis mysql_Redis 和 MySQL数据一致
  4. oj运行时错误_FME服务器链接运行时错误(由于缺少适当的权限,用户未授权的请求)...
  5. python依赖注入_什么是依赖注入?
  6. PSD分层模板|电商促销海报设计技巧
  7. 设计师必收藏!!!让你灵感迸发的配色网站
  8. 设计师需要收藏|一起来看看UI设计的配色专辑
  9. mysql 安装 权限_MySQL的安装、使用及权限管理
  10. 变量命名规则_Java变量与常量