一、网格液化形变

1.液化

    网格液化形变是指,事先将图片划分成若干个网格,再对其中某一些网格的坐标进行变换,以达到图像形变的效果。
    网格可以是四边形,或三角形,在计算机图形当中用三角形比较多,因为大多数底层绘制都是以三角形作为最基础的绘制单元进行绘制。OpenGL也是如此。
    这个液化在Photoshop里的“液化”功能可以最简单直观体验。

2.网格的变化

    这个“网格的变化”可以被记录并保存。可以这样理解:有一张“标准的网格图”,每次液化形变都同时会作用到这张标准网格图当中。
    当下次需要应用相同的形变时,读取这张形变后的“标准网格图”,按照标准网格图进行新的图像绘制即可。

  • 标准网格图:

  • 液化后的网格图:

二、利用网格液化实现瘦脸效果

1.划分人脸网格

    一般来说,在进行瘦脸效果之前,都需要进行人脸检测,得到人脸部位的若干人脸点。(这一步一般在渲染之前就已经完成,由人脸SDK完成)。目前主流人脸检测都是基于深度学习算法,各大厂自研或使用第三方算法,如商汤等。

  • 人脸检测点位例子:

2.划分人脸网格

    OpenGL是基于三角形进行绘制图像的,在绘制人脸网格的时候,可以将人脸的区域划分成若干个三角形,然后将贴纸绘制在这些三角形当中。
    将这些离散的零散的点位,按照一定规则划分成不重叠的三角形,这叫“三角剖分算法”。三角剖分算法有很多。可以参考:三角剖分算法

  • 三角剖分后的人脸三角形:

3.定义标准人脸网格,在标准人脸网格里进行瘦脸需要的网格偏移和计算

    在瘦脸之前,需要先定义一个标准模特的人脸网格(一般使用标准模特图进行人脸检测即可)。瘦脸的网格计算需要在标准人脸网格下进行计算,对其中的某一些网格点进行偏移。例如需要瘦脸,就移动脸周围一圈的网格,如果需要大眼,就移动眼睛周围一圈的网格。
    在实际绘制时,将实际人脸点与标准人脸点一一匹配对应进行绘制,就能将计算偏移后的网格绘制出来,就得到了瘦脸的结果图。

    一般来说,为了保护非人脸区域也受到了形变的影响(理论上应该只改变人脸区域,其他区域保持不动),会在人脸周围外一圈计算或插值出新的一圈“保护网格”,在保护网格外的区域则完全不参与形变。

  • 蓝色为原始标准人脸网格,红色为外圈保护网格:
  • 瘦脸的变化,本质上是网格的液化形变:


三、液化瘦脸中需要注意的一些坑

1.多部位瘦脸时,不同部位相互影响的问题

  • 在单独调整不同部位的瘦脸形变时,可能会出现相互影响的情况,例如“瘦脸”效果和“大眼”效果,在网格变化时可能会影响到彼此的网格。
  • 在这里有2种解决方案:
    • 1.如果必须使用同一张网格,每个部位选择的点和网格不重复。如果点和网格不够多,那么需要在现有网格的基础上差值或推算出更多更精细的点位和网格。
    • 2.如果不是必须使用同一张网格,则可以每个部位单独计算出独立的网格,这样不同部位网格单独计算,不会相互影响。

2.多人脸,且人脸靠得近时,不同人脸的形变会相互影响

  • 当两个人脸形变网格靠的足够近时,会不可避免地出现形变网格互相重叠的情况,在对一个人瘦脸时会对另一个人的脸也造成形变的影响。
  • 解决方案和思路如下:
    • 细化人脸周围网格,把外圈形变的网格控制在比较小的范围。也可以识别和计算人脸距离,根据人脸距离动态调整这个形变范围

效果图:

源代码工程:https://github.com/sysu-huangwei/Facelift

文档:https://blog.csdn.net/q345911572/article/details/128758125

人像瘦脸效果实现(网格液化)——OpenGL实现相关推荐

  1. Android修图处理算法—— drawBitmapMesh算法实现瘦脸效果

    一.初识Canvas.drawBitmapMesh() 1. 方法介绍分析 先看drawBitmapMesh官方api介绍: 打开元源码看看drawBitmapMesh的详细介绍,就知道这个方法参数的 ...

  2. php实现图片瘦脸,Android:修图技术之瘦脸效果的实现(drawBitmapMesh)

    一.初识Canvas.drawBitmapMesh() 1.方法介绍分析 先来看看 Android API 中对 drawBitmapMesh 方法的介绍: drawBitmapMesh方法 这个方法 ...

  3. 修图技术之瘦脸效果的实现

    一.初识Canvas.drawBitmapMesh() 1.方法介绍分析 先来看看 Android API 中对 drawBitmapMesh 方法的介绍: 这个方法的参数还不少, 下面稍微讲讲几个比 ...

  4. 迹美 java_三款图像处理软件人像美容效果大比拼

    面对电脑中超级多的个人照片,你知道该如何对它们进行后期处理,使之更加具有赏心悦目的效果吗?下面我们选择美图秀秀.iSee图片专家和光影魔术手三款图像处理软件,针对单纯的人像美容效果进行比较,看看哪一款 ...

  5. 现代时尚人像调色效果Lr预设

    现代时尚人像调色效果Lr预设 现代时尚人像调色效果41 VSCO CAM Portrait Lr预设是一款非常出色的LR图片预设插件,包含59个完美的图像过滤效果,并兼容Mac与windows两种系统 ...

  6. 人像调色效果Lr预设

    Professional Lightroom Presets是一套专业的人像调色效果Lr预设,人像调色效果Lr预设内含50种.xmp和.lrtemplate格式预设,适用于Windows和Mac,只需 ...

  7. 高级人像调色效果Lr预设

    高级人像调色效果Lr预设 高级人像调色效果Nazzario Portrait Lr预设是一款非常出色的LR图片预设插件,包含16个完美的图像过滤效果,并兼容Mac与windows两种系统,轻松处理RA ...

  8. 7种夏季人像暖色效果LR预设

    为大家分享一组夏季人像暖色效果LR预设,其中包含多种不同的暖色调效果LR预设,适用于多个版本的Lightroom,点击即可使用,有需要暖色色调Lightroom预设的朋友赶紧试试吧! 夏季人像暖色效果 ...

  9. 【有利可图网】PS实战系列:打造光滑甜美人像皮肤效果的PS磨皮技巧

    本篇的磨皮教程比较简单,同学们可以来学习一下,相信在PS的修图中,磨皮是很麻烦的事,要做到保持质感,又要不失真,今天这篇文章主要光滑通透的来给人像磨皮. 效果图: 原图: 操作步骤: 01使用污点修复 ...

最新文章

  1. 2022-2028年中国AKD施胶剂行业市场研究及前瞻分析报告
  2. Python设置环境变量,改变GnomeConnectionManager的语言
  3. 区块链+5G=智慧城市?
  4. BZOJ-2002-Bounce弹飞绵羊-分块
  5. linux select使用
  6. java获取map数量_java – 如何从HashMap或LinkedHashMap获取有限数量的值?
  7. day6_python之md5加密
  8. 如何在docker中运行MySQL实例(转载)
  9. 魅族“携手”京东,背后有何意图?
  10. Android Debug方法
  11. 输出100-1000之间的水仙花数 是三位数 水仙花数就是 每个位上的数字的三次方的和仍然为原数字 例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方;
  12. SSH三大框架的工作原理及流程
  13. 华为智能手环智能手表软件测试,Huawei WatchFace Designer(华为手表表盘开发工具) V10.0.1.16 官方测试版...
  14. 利用WinDriver开发PCI设备驱动程序
  15. 后缀树(一)定义及构造
  16. macOS如何格式化移动硬盘和U盘
  17. verilog 四舍五入_Verilog进行饱和与截位操作
  18. 数据库常用操作,会持续更新
  19. linux if 判断
  20. cve查询_CVE年满21岁:如何实现这一里程碑

热门文章

  1. 我为什么飞行 10000 公里去西班牙参加 KubeCon?
  2. Hystrix熔断器使用
  3. 什么是“大规模机器学习”
  4. Debian Ubuntu输入法安装
  5. 支付宝的当面付扫一扫功能
  6. Netapp takeover and giveback
  7. speedoffice表格中如何插入图片
  8. SpringBoot配置全局日期格式转换器
  9. 小心陷入 MySQL 索引的坑
  10. 基于决策树的企鹅分类(python)