美颜美妆

美颜实现原理

2023-06-14  本文已影响0人  samychen

五官调整

五官调整包括如下效果

wuguan.jpg

最常见的大眼瘦脸效果实现方法有很多,包括局部调整算法,图片变形算法和基于深度学习的妆容迁移算法

局部平移算法

瘦脸及眼睛放大的前提是需要检测到人脸,提取特征点后进行相应的图像变形处理得到最终效果


image.png

由拉伸中心向某一点拉伸,以上图为例,点位18和点位25向点位30收缩,可以达到瘦脸效果,点位21和点位23向点位57收缩可以达到瘦下巴的效果

vec2 stretchFun(vec2 textureCoord, vec2 originPosition, vec2 targetPosition, float delta) {
            vec2 offset = vec2(0.0);
            vec2 result = vec2(0.0);
            vec2 direction = (targetPosition - originPosition) * delta;
            float radius = distance(vec2(targetPosition.x, targetPosition.y / aspectRatio), vec2(originPosition.x, originPosition.y / aspectRatio));
            float ratio = distance(vec2(textureCoord.x, textureCoord.y / aspectRatio), vec2(originPosition.x, originPosition.y / aspectRatio)) / radius;
            ratio = 1.0 - ratio;
            ratio = clamp(ratio, 0.0, 1.0);
            offset = direction * ratio;
            result = textureCoord - offset;
            return result;
 }

最终实现效果


image (1).png

局部缩放算法

眼睛.jpg

眼睛放大的时候只有圆形区域内的图像才进行变形,越靠近圆形,变形越大,反之变形越小,这样保证不改变脸部的整体信息


image (2).png

假设当前点为(x,y),手动指定变形区域的中心点为C(cx,cy),变形区域半径为r,手动调整变形终点(从中心点到某个位置M)为M(mx,my),变形程度为strength,当前点对应变形后的目标位置为U。
1、只有圆形选区内的图像才进行变形
2、越靠近圆心,变形越大,越靠近边缘的变形越小,边界处无变形
3、圆外像素不发生偏移

vec2 warpPositionToUse(vec2 centerPostion, vec2 currentPosition,
                       float radiusEye, float scaleRatio, float aspectRatio) {
    vec2 positionToUse = currentPosition;
    vec2 currentPositionToUse = vec2(currentPosition.x,
                                     currentPosition.y * aspectRatio + 0.5 - 0.5 * aspectRatio);
    vec2 centerPostionToUse = vec2(centerPostion.x,
                                   centerPostion.y * aspectRatio + 0.5 - 0.5 * aspectRatio);
    
    float r = distance(currentPositionToUse, centerPostionToUse);
    if (r < radiusEye) {
        /// r 越大则 alpha 越接近于 1 (基本不变)
        /// r 越小,则放大效果越明显(显示中心处的颜色)
        float alpha = 1.0 - scaleRatio * pow(r / radiusEye - 1.0, 2.0);
        positionToUse = centerPostion + alpha * (currentPosition - centerPostion);
    }
    return positionToUse;
}

最终效果


image (3).png

美肤效果

美白

美白方式一般分为两种,一种是不考虑皮肤区域,全图美白,一种是仅针对皮肤区域美白
美白算法有多种,总结来分为两种,LUT调色法和图层混合法

LUT法

通过类似PS软件中调节亮度,对比度,曲线,色彩平衡等方式生成LUT表,优点是使用颜色滤镜LUT速度快

图层混合法

通过使用PS中的图层混合模式达到美白效果,具体思想是:将原图中的皮肤区域像素与纯白色像素进行“柔光”图层混合,然后调节不透明度达到美白效果

磨皮

图像保边滤波算法

磨皮算法,实际上就是平滑皮肤区域,将人像皮肤区域中一些皱纹,斑点以及痘痘等平滑掉,让皮肤看起来更光滑。要达到这种效果,需要一种滤波器,他既能对平坦的皮肤区域进行一定的平滑,又能较好的保留边缘信息,这种滤波器就是保边滤波器

保边滤波器算法,包括双边滤波、表面模糊、导向滤波等

肤色检测

待补充。。。

image (4).png

磨皮算法

磨皮算法划分了多种算法:
● 通用磨皮算法
● 通道磨皮算法
● 高反差磨皮算法
● 细节叠加算法
● 其他算法
通用磨皮算法

  1. 输入原图S
  2. 对S进行肤色检测得到Mask
  3. 对Mask进行高斯滤波得到平滑的Mask A
  4. 对S进行保边滤波得到T,T是丢失了部分细节的平滑图像
  5. 计算效果图,D = S x (1 - A) + T x A

细节叠加磨皮算法

  1. 对原图S进行较大半径的保边滤波,得到滤波图A
  2. 对原图S进行较小半径的保边滤波,得到滤波图B
  3. 对B进行肤色检测得到肤色Mask图C
  4. 根据原图和图A得到细节,E = S - A
  5. 根据图B和图A技术细节,F = A - B
  6. 根据可调程度R, 细节控制参数K技术磨皮效果
    K0 = C x R
    D = A + K0 x F + (1 - K0 x K) x E

最终实现效果


image.png
image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读