基本上我试图实现这一点:将任意图像强加到预定义的不平坦表面。 (参见下面的示例)。
-->
我在图像处理或 3D 算法方面没有太多经验,所以这是目前我能想到的最佳方法:
- 预定义一组坐标(假设我们有一个 10x10 的网格,我们有 100 个以 (0,0)、(0,10)、(0,20) 等开头的坐标。会有9x9 = 81 个网格。
- 记录 T 恤图像上每个单独坐标的变换,例如(0,0) 变成 (51,31),(0, 10) 变成 (51, 35),等等。
- 将原始图像三角化为 81x2=162 个三角形(每个网格有 2 个三角形)。根据第2步得到的坐标变换,对图像的每个三角形进行变换,绘制在T恤图像上。
我遇到的问题/疑问:
- 我不知道如何平滑每个三角形以使 T 恤上的图像看起来不那么粗糙。
- 有更好的方法吗?在继续实现之前,我想确保我没有在这里重新发明轮子。
谢谢!
最佳答案
这称为数字图像变形。有一个 popular graphics text在 1990 年代(可能来自某人的论文)。您还可以找到 article来自 Dobb 博士的日记。
您的过程基本上是正确的。如果你逐个像素地工作,而不是尝试使用三角形,你将避免你面临的一些问题。扫描目标位图中的像素,并根据您所在的单元格应用局部变换,以确定源位图中相应像素的坐标。复制该像素。
为了获得更平滑的结果,您可以在 float 中进行坐标转换,并使用类似 bilinear interpolation 的方法对源图像的像素值进行插值。 .
关于image - 将图像/纹理映射到预定义的不平坦表面(带褶皱的 T 恤、杯子等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954851/