一、主要内容概述

本文主要是对美颜相关的一些内容的学习做一个总结,一个基本的美颜相机大概包含了美颜和美型两个方面,美颜主要是磨皮美白等效果,美型则是对眼睛、鼻子、脸型等做一些微调;大多美型相机还会提供各式各样的滤镜、提供好看的2D贴纸,更有苹果相机提供了动漫滤镜以及3DEmoji效果可用于AR等高端场景;

由于自己是一个初学者,对以上所有内容都只能做一个简单的介绍,而不能非常深入,所提供的效果也只是达到一个参考而非商用效果,还请见谅;

这里的算法实现主要是基于unity的shaderlab来完成的;

二、美颜效果

1.美白

美白部分所采用的是log曲线来提升美白效果;

要注意一点,美白是让皮肤变白而不是简简单单让屏幕变得更亮,所以如何让周围环境不做出太多改变,而是只让人脸变得更白则是美白所要追求的效果。这里,也许会想到使用皮肤检测,对满足条件的像素值进行提亮,其它不变,这个方法当然也考虑过,但是使用颜色检测的方法检测皮肤的话有两大缺点,第一,增加了判断条件,在GPU里面加入太多判断会严重影响GPU的效率,第二,数字图像一般都会有很强的椒盐噪声,这个在手机相机得到的屏幕里是很强的,当然肉眼看不太出来,当使用颜色检测的时候就会把噪声效果放大,所以不可取。这里采用的是基于灰度值的转换,也就是转换之后,要在像素值和新像素值之间以原像素的灰度作为参考因素进行插值,这样对于颜色过暗的部分尤其像头发部位就不会再有什么亮度上的改变。

fixed Beauty_Log(fixedc, float beta){fixed a = (log(c*(beta-1)+1))/log(beta);return a;
}fixed4 SkinBeauty(fixed4 srcCol){fixed beta = 1.0001 + 8.0 * _Whiten;beta = beta * (srcCol.r + srcCol.g + srcCol.b) / 3.0;srcCol.r = Beauty_Log(srcColr.r, beta);srcCol.g = Beauty_Log(srcColr.g, beta);srcCol.b = Beauty_Log(srcColr.b, beta);return srcCol;
}

首先我们是对像素的三个通道进行分别处理的,我们要做的工作就是第一个函数,对通道的值进行提升,注意这个函数的特点,它是一个凸函数,在(0,1)区间内,它的值也是(0,1),但是结果是大于等于原值的,这个函数一个重要的参数是beta,beta越大,美白程度越高。在第二个函数里面,对三个通道进行了相同的提升,但是beta的值是基于灰度值进行修改的,这样做的好处是消除了美白对于头发和眉毛眼睛等部位的影响,使其主要对皮肤等部位感兴趣。

2.磨皮

磨皮应该是一个相机里最重要的一个功能了,好的磨皮效果对用户的吸引力总是惊人的;

先假设读者对图像处理有简单的了解,如高斯滤波、双边滤波、均值滤波等;应用于磨皮效果最简单的滤波就是双边滤波了,为什么不是高斯滤波呢,因为高斯滤波它只考虑了空间域,处理之后整个图片会非常模糊,包括边界部分;而磨皮的目标则是不能失去边缘轮廓的细节,否则就会给人一种特别“假”的感觉,而双边滤波则考虑了空间域和像素域,能够满足保留边缘的需要;

在实现磨皮效果前,需要先分析一下一个好的磨皮效果需要哪些东西

  • 磨皮应该保留好脸部细节,不能磨到不该磨的部位,例如眉毛、头发、嘴唇等等,试想一下,如果磨皮以后头发也特别模糊,是不是看起来很差
  • 磨皮效果要看起来通透,也就是色块要比较均匀,这种效果需要结合其它效果一起才能真正做出来,仅仅做滤波是不够的;

所以,基于以上分析,可以开始由简入繁,先实现双边滤波,再思考如何更好的保留磨皮细节,然后再思考如何变得更加通透;

三、美型效果

实现美型效果需要人脸的关键点检测,这个人脸识别有关,所以这里只能大概讲述一下美型的部分,而人脸关键点相关则不在此范畴;

美型效果就是五官的调整,随便一个美颜相机都可以看到,有眼睛、额头、鼻头、鼻翼、嘴型、下巴、脸型等等;

美型在图像处理上的核心做法就是液化效果,无论是眼睛还是其它部位的调整,其思路都是液化;

四、滤镜效果

使用Lut,这也是比较常用的后处理技术;

fixed3 ApplyLut2d(sampler2D tex, fixed3 uvw, fixed3 scaleOffset){uvw.z = scaleOffset.z;fixed shift = floor(uvw.z);uvw.xy = uvw.xy * scaleOffset.z * scaleOffset.xy + scaleOffset.xy * 0.5;uvw.x += shift * scaleOffset.y;uvw.xyz = lerp(tex2D(tex, uvw.xy).rgb, tex2D(tex, uvw.xy + fixed2(scaleOffset.y, 0)).rgb, uvw.z - shift);return uvw;
}

使用如下lut表来做滤镜效果,类似于后处理中的Color Grading;

五、贴纸效果使用简单的帧动画来代替

这里就是根据时间来计算当前使用哪一帧;

fixed4 frag(v2f i) : SV_Target{float time = floor(_Time.y * _FramePlaySpeed);float row = floor(time / _HorizontalAmount);float column = time - row * _HorizontalAmount;row = row % _VerticalAmount;column = column % _HorizontalAmount;half2 uv = i.uv + half2(column, -row);uv.x /= _HorizontalAmount;uv.y /= _VerticalAmount;return tex2D(_StickerTex, uv);
}

美颜相机基本算法总结相关推荐

  1. 深度学习AI美颜系列---AI 发型管家(美颜相机发型管家算法解析)

    美颜相机---AI 发型管家效果的算法解析 ####前言 本文为去年写的Gitchat文章,由于Gitchat有时间版权限制,一年时间,所以今天才能发布到CSDN博客上来. 本文为大家介绍美颜相机中 ...

  2. Java美颜相机入门(图像处理实现各种滤镜算法)

    一.思路分析 一款简易美颜相机的功能我们可以简单分为两大块:1.图像处理    2.功能区 最终的效果图如下: 二.代码分析 图像处理工具的本质是处理像素点,而像素点的本质就是一种颜色,每一个像素点都 ...

  3. 深度学习 AI 美颜系列:AI 发型管家(美颜相机发型管家算法解析)

    本场 Chat 将通过由浅入深,由表及里的逻辑,分析最近比较流行的美颜相机发型管家效果所对应的算法流程,给出每个流程模块对应的算法详解(包括性别识别,脸型匹配,美颜美妆,换脸以及染发等等内容),最后根 ...

  4. Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——1.1 工程思路与难点

    回到目录 本文主要探讨搭建一款Android平台下美颜相机可能需要填的坑,内容会不断更新.. 相机框架 相机框架相对比较简单,现有的开源代码很多,可以很容易的实现拍照和录像的功能. 预览尺寸选择 预览 ...

  5. SF图像滤镜/美颜/美妆算法详解与实战

    本专栏将结合本热多年相关经验,从传统算法到火热的AI算法,给大家详细讲解目前在PC图像软件.手机图像处理类应用app,以及视频直播等应用类型中,图像视频的滤镜特效,人像美颜美妆特效的算法理论,并结合具 ...

  6. 美颜相机的基本功能实现

    美颜相机的基本功能实现 基本知识 在学习了在标准绘制图形库中进行简单的递归图像实现后,我们把目光聚焦到了对于复杂图片文件的处理上,在这里需要简单介绍一下关于图像色彩的知识,以及缓存图片类的介绍. 图形 ...

  7. 美颜相机毕设项目零基础教学

    美颜相机开发手册 1.数字化图像底层原理 2.文件读取图片,操作图片矩阵 3.图像滤镜算法实现 4.项目结构设计 5.图像存储,附加功能实现(画笔/P图/贴纸-) 6.卷积图像处理算法实现 7.图像识 ...

  8. 美颜相机-图片处理(迅速画出+多种滤镜)

    ## 美颜相机 实现美颜相机,我们一共需要三个类 1.UI界面类 2.事件监听器 3.封装方法,直接调用的类 1.UI界面类ImageUI 如果我们一个一个加上按钮会进行大量的复制粘贴工作,所以我们用 ...

  9. 【JAVA】简易美颜相机

    简易美颜相机 简易美颜相机,是我最初接触JAVA的小项目,通过这个项目,我初步学会了许多JAVA的基础知识,下面就让我们开始吧! 首先让我们理清整个项目的大概逻辑: 1.一张图片和摄像头的显示以及各种 ...

最新文章

  1. 七秘诀工作效率与薪水翻番-转
  2. openstack虚拟机内文件遭破坏的急救方案
  3. Struts2 整合jQuery实现Ajax功能(2)
  4. 麒麟810怎么样_华为麒麟810这个跑分,让我意外
  5. spring 整和activemq
  6. iOS中MVC设计模式
  7. 为 springboot 添加 debug功能
  8. 网易云信携手小天才Z6手表,让安全“看得见”
  9. 西南交通大学计算机程序设计实验13,西南交通大学C++实验报告.doc
  10. SQLLite (一)基本介绍
  11. 一张图理解RACSignal的Subscription过程
  12. java与java ee_使用Java EE的ManagedExecutorService异步执行事务
  13. spring— Spring与Web环境集成
  14. 【玩转Atlas200DK系列】为Atlas200DK配置wifi外挂模块
  15. Android 之类库常用包
  16. python 通配符用法,python - 通配符
  17. 2019全球数据新闻奖揭晓
  18. uni-app返回上一级并刷新页面
  19. linux gmac10下载,ethmac10g verilog代码 10G eth mac verilog代码参考下载 - 下载 - 搜珍网...
  20. 5.5 时间序列预测

热门文章

  1. archive log文件大小与redo log文件大小关系探究
  2. RNG战队LPL春季赛夺冠 中国电竞产业未来如何实现“破与立”?
  3. 陶瓷龙头要做“大数据” 豪言五年破百亿
  4. 苹果7防水吗_苹果手机到底防不防水?
  5. kafka消息队列使用场景
  6. 改网卡ip的两种方式
  7. CentOS6.5使用 Docker 搭建 Java Web 运行环境
  8. 证券交易的基本知识-证券交易
  9. CF140E New Year Garland (计数问题)
  10. 华丽秒杀iOS 最流畅桌面TSF Shell UI试用体验