前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让你的双眸焕发神采-亮眼算法解析

让你的双眸焕发神采-亮眼算法解析

作者头像
天天P图攻城狮
修改2019-05-16 17:02:08
1.5K0
修改2019-05-16 17:02:08
举报
文章被收录于专栏:天天P图攻城狮天天P图攻城狮

    亮眼的效果能够扫去用户面容的疲惫与倦意,是对眼睛进行重塑与编辑的一个重要维度,本文讨论了美容算法中亮眼的一种实现方式。

    我们对眼睛虹膜以内的区域实现细节增强来达到亮眼的效果。那么什么是虹膜呢?

    虹膜是眼球壁中层的扁圆形环状薄膜。位于角膜和晶状体之间,透过角膜可以看到,俗称“黑眼球”。中央有一个小圆孔,称瞳孔,光线由此进入眼内。虹膜主要由结缔组织构成,内含色素、血管、平滑肌。虹膜的颜色因含色素的多少和分布的不同而异,一般有黑色、蓝色、灰色和棕色等几种。

    简单地说,从平面几何的角度出发,我们可以把眼睛分为瞳孔,虹膜和巩膜,如下图所示,

    在这里,我们主要分析亮眼滤镜的片段着色器。先来看一下变量声明,

其中textureCoordinate和inputImageTexture指向原图,textureCoordinate2和 inputImageTexture2指向mask,center1和center2分别是左右瞳孔中心,radius1和radius2分别是左右眼的虹膜半径,分别设定为左右眼宽的1/4,width和height分别是原图的宽和高,hasFace代表原图是否检测到人脸,alpha代表亮眼程度,

    再来看一下整体的亮眼算法

当画面帧中没有人脸时,返回原始画面帧。

texColor指向mask中相应像素,当前像素位置非眼睛区域时,目标像素值color0取值于原始画面帧相应像素。

其中mask是一张标记了标准人脸眼睛区域的灰度图,由于灰度图左右对称,我们可以只存储左半边来节省资源空间,mask图如下所示。

当前像素位置在眼睛区域内时,我们对相应像素进行亮眼操作,具体做法如下。

首先我们对眼睛区域内的像素求取5x5的高斯模糊。step1是横向步长,为1/480;step2是纵向步长,为1/720。sumColor用来求取textureCoordinate上下左右5x5个像素值的算术平均。

然后求取眼睛区域的细节部分,origColor.rgb - sumColor是原始图像与高斯模糊后图像的差,即眼睛的细节部分。我们把细节部分放大2.8倍后加到原始图像上就得到了眼睛区域细节增强后的图像,由于这里的需求是亮眼,我们取原始图像和细节增强图像的max来丢弃暗沉的细节部分。在这里,2.8是一个经验值。

由于亮眼主要针对虹膜以内的区域,而不应该影响到巩膜的部分。我们按像素位置离开虹膜中心的距离设计了细节增强的衰减函数,即从虹膜半径的1/2处开始衰减,到虹膜半径处衰减为0。

    取原图中眼睛区域的像素点,根据它和center1, center2的距离来判断当前像素点是落在左眼范围内还是右眼范围内,取相应的距离d和虹膜半径r计算衰减效果的调整因子adj,并与用户设入的强度调整因子alpha一起来决定该点的最终像素值。

作者简介:子君, 天天P图iOS工程师


文章后记: 天天P图是由腾讯公司开发的业内领先的图像处理,相机美拍的APP。欢迎扫码或搜索关注我们的微信公众号:“天天P图攻城狮”,那上面将陆续公开分享我们的技术实践,期待一起交流学习!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 天天P图攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档