最近在考虑一个图像变形的算法,才有了点思路。大概是下面的样子。
一、网格的生成
将源图像和目标图像通过建立特征点,形成点集,然后通过三角剖分的方法形成三角形网络。
其中涉及到的问题有:
1) 怎样把源图像中形成的三角形和目标图像生成的三角形(三角形对)对应起来。(对整体的源图像和目标图像来说,他们划分出网格之后,应该是同构的。)
2) 通过源三角形和目标三角形的顶点坐标值,使用仿射变换求出变换从源三角形到目标三角形的变换矩阵T。
二、中间帧生成
对其中一个三角形对来说,中间帧的生成过程是这样的:
1) 通过变换矩阵T,求得三角形对的对应像素点坐标。
2) 定位源三角形内部像素点P0的RGB值,经过线型插值运算:Pinternal=(1-1/n)P0+(1/n)P1(Pinternal是中间帧像素点RGB值,P1是目标像素点RGB值,n为变形动画的帧数)获得中间帧中点Pinternal的RGB值。
通过以上方法,求得其余三角形的中间帧点Pinternal的RGB值,并将他们写入中间帧缓存中,最终生成中间帧图像。