0
点赞
收藏
分享

微信扫一扫

发型试戴原理简析

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

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

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

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

====

问题1的解决方案:

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

 

发型试戴原理简析_样条

​​

发型试戴原理简析_解决方案_02

​​

 

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

发型试戴原理简析_仿射变换_03

​​

发型试戴原理简析_解决方案_04

​​

 

由点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确定了标准模特和用户上传模特的仿射变换。

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

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

​​

发型试戴原理简析_仿射变换_05

​​

 

发型试戴原理简析_解决方案_06




使用上图中的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 插值​​》,这里贴张图:

发型试戴原理简析_样条_07

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

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

​​

发型试戴原理简析_样条_08

发型试戴原理简析_样条_09

​​​ 

发型试戴原理简析_解决方案_10

发型试戴原理简析_仿射变换_11

发型试戴原理简析_样条_12

发型试戴原理简析_仿射变换_13

​​

发型试戴原理简析_仿射变换_14

​​​  ​​

发型试戴原理简析_解决方案_15

​​

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


版权所有,欢迎转载



举报

相关推荐

0 条评论