• 发型试戴原理简析


    RIA 使技术变得有趣起来,比如CAD,Matlab等工具,未来非常适合直接以RIA方式在线运行。技术转型后,给自己的技术方向定的很窄,RIA这一块也只关注在线图形图像应用,如在线试戴、试穿、试用、试装修等功能。试发系统已经做了好几套了,当然主要还是借鉴国外的系统taazthehairstyles,下面简析一下发型试戴的原理。

    发型试戴的两个核心问题:

    (1)如何让千奇百怪的发型自动戴在千奇百怪的模特头上,戴在正确的位置上?

    (2)戴上之后,用户如何调整发型?不仅仅限于放大,缩小,上下左右挪动,而是“自由”变形。

    ====

    问题1的解决方案:

    这是taaz的解决方案。假定一个标准的模特S,脸上有6个坐标点,见图:

     

    image

     

    根据5,6两点,可以求出它的中点7:

    image

     

    由点1,4,7构成一个三角形S(1,4,7)。

    用户上传自己的头像U,也需要指定1-6点的坐标,由此也可以算出7点的坐标。U(1,4,7)构成另一个三角形。算出 S(1,4,7)=>U(1,4,7) 的仿射变换ASU。ASU确定了标准模特和用户上传模特的仿射变换。

    关于仿射变换,这里有一篇文章给了很直观的解释

    对于发型,由于有人脸大,有人脸小,有人脸宽,有人脸窄,因此使用的是另一个定位三角形:

    image

     

    使用上图中的8,9,10三点进行定位。对于标准模特S,可以测量得出它的8,9,10三点构成的三角形 S(8,9,10)。对于每个发型H,我们也指定一下以上三点,构成三角形H(8,9,10)。

    计算H(8,9,10)=> S(8,9,10)的仿射变换AHS。AHS实现了发型图像到标准模特脸上的仿射变换。

    如此一来,对于一个发型H,做两次仿射变换——ASU(AHS(H)),即可将发型戴于用户自己的头像U上。这个映射可以让发型正确“找到”自己的位置。

    ====

    问题2的解决方案:

    如果想更精细的调整发型试戴的效果,可在发型位置增加一些控制点,使用TPS样条实现变形效果,taaz是这样做的。TPS样条见我的博文 《TPS(薄板样条) 2D 插值》,这里贴张图:

    TPS更详细的描述及算法见F.L. Bookstein, "Principal Warps: Thin-Plate Splines and the Decomposition of Deformations,"

    也可以使用局部变形算法(见:《图像变形算法:实现Photoshop液化工具箱中向前变形工具》),我是这样干的:

    image  image  image

    对比来说,TPS更好用一些,局部变形做细微调整的能力更强一点。

  • 相关阅读:
    ELK7.X中配置x-pack
    ELK报错及解决方案
    ELK + filebeat集群部署
    CentOS7.6中 KVM虚拟机内存、CPU调整
    Linux 设置定时清除buff/cache的脚本
    Nginx中配置https中引用http的问题
    使用Docker搭建Jumpserver堡垒机
    CenterOS7中解决No package mysql-server available.
    Tomcat启动慢的原因及解决方法
    记录 之-- java 的一些小技巧
  • 原文地址:https://www.cnblogs.com/xiaotie/p/1802957.html
Copyright © 2020-2023  润新知