在图像处理领域,大家接触最多的算法应该就是手机里的美颜自拍了,除了有专用的美颜软件外,很多手机的相机原生系统也都支持美颜功能。这些功能的实现大部分都源自于美颜sdk,关于它的历史小编就不多说了,小编今天就直接从美颜算法的角度来对美颜sdk做一些简单解读。
美颜sdk按照功能需求可分为基础、高级和附加功能三大块。基础概念就是磨皮、处理肤色,目前即便是原生系统自带的相机美颜也能做到基础美颜功能的实时计算,启动相机取景预览时就能看到,目前直播用的美颜sdk已经可以实现高级功能的即时演算,比如祛痘、瘦脸、增大眼睛、五官立体等,但这些功能都建立在人脸识别这个前提上。而年龄计算、AR装饰、美妆等就属于美颜之外的另一类图像算法了。
美颜功能的基本构架就是这样,接下来就来一点一点地聊聊美颜算法的细节。
首当其冲的自然是最重要的基本功能:磨皮。从算法的角度来看,磨皮是用滤波器将痘印、胎记、伤痕等高频信息给滤除,再用光滑皮肤灯领域低频信息进行填充。在种类繁多的高频滤波器里,适用于人像修复的主要都是带通滤波器,比如双边滤波、导向滤波、灰度图像各向异性扩散等,因为他们的特色是可以保留边缘信息,在磨皮的同时不会像高斯滤波那样让整张照片都模糊掉。
双边滤波,简单来说它是高斯滤波的衍生版,区别在于双边滤波在把像素空域距离纳入计算的同时,还考虑了像素值域之间差值的高斯系数,两个像素的值域差距越大,计算过程中的权重就越小,反之亦然,所以这个值域系数的作用就很关键。
对于完全从背景中抽离的人像来说,双边滤波磨皮很实用,但不足也比较明显,第一是一些面积较大的雀斑或胎记因为值域相差较大,就无法被磨皮操作简单平滑掉,很多时候就需要手动干预,在用户选取区域后以该区域中心为起点,选取一个包含但大于整个选取面积的矩形窗口并计算均值,再将整个均值融合到选取范围内,实现肤色自然过渡。
当然,也有自动检测的方法,但需要结合很精确的人脸识别,在皮肤区域采用模板匹配的方式,按水平/垂直方向进行扫描,因为雀斑、胎记等区域亮度值往往小于正常皮肤,从而实现自动判断。
双边滤波的第二个不足恰恰就是缺乏人脸区域计算机制,手机自拍不可能总是在纯色或大纵深的环境里,在能清晰辨别背景的情况下,双边滤波会对整张图像进行磨皮,这时候虽然皮肤磨得很光滑,边缘也比较清晰,但想要清晰呈现的背景细节也都跟着被磨掉了,照片严重失真。所以磨皮的进阶就必须要先把人脸部分识别并抠出来,单独进行,关于人脸皮肤抠图算法的研究有很多,可以说是美颜sdk里最经典的主题了,所谓聚沙成塔,现在大多美颜sdk的效果都相当不错也有它的一分功劳。
以上就是美颜sdk中,关于部分算法概括的介绍,关于它的其它算法,将在下一篇文章中继续介绍,如果你对美颜sdk开发感兴趣,欢迎咨询官方客服。
声明:本文由美狐原创,未经允许禁止转载,谢谢合作。