image - 将图像/纹理映射到预定义的不平坦表面(带褶皱的 T 恤、杯子等)

标签 image image-processing graphics 3d textures

基本上我试图实现这一点:将任意图像强加到预定义的不平坦表面。 (参见下面的示例)。

Any image --> enter image description here

我在图像处理或 3D 算法方面没有太多经验,所以这是目前我能想到的最佳方法:

  1. 预定义一组坐标(假设我们有一个 10x10 的网格,我们有 100 个以 (0,0)、(0,10)、(0,20) 等开头的坐标。会有9x9 = 81 个网格。
  2. 记录 T 恤图像上每个单独坐标的变换,例如(0,0) 变成 (51,31),(0, 10) 变成 (51, 35),等等。
  3. 将原始图像三角化为 81x2=162 个三角形(每个网格有 2 个三角形)。根据第2步得到的坐标变换,对图像的每个三角形进行变换,绘制在T恤图像上。

我遇到的问题/疑问:

  1. 我不知道如何平滑每个三角形以使 T 恤上的图像看起来不那么粗糙。
  2. 有更好的方法吗?在继续实现之前,我想确保我没有在这里重新发明轮子。

谢谢!

最佳答案

这称为数字图像变形。有一个 popular graphics text在 1990 年代(可能来自某人的论文)。您还可以找到 article来自 Dobb 博士的日记。

您的过程基本上是正确的。如果你逐个像素地工作,而不是尝试使用三角形,你将避免你面临的一些问题。扫描目标位图中的像素,并根据您所在的单元格应用局部变换,以确定源位图中相应像素的坐标。复制该像素。

为了获得更平滑的结果,您可以在 float 中进行坐标转换,并使用类似 bilinear interpolation 的方法对源图像的像素值进行插值。 .

关于image - 将图像/纹理映射到预定义的不平坦表面(带褶皱的 T 恤、杯子等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954851/

相关文章:

Android Intent 打开图库在 KitKat (4.4) 上不起作用

python - 应用锐化滤镜后重写图像

python - 如何判断图像是否暗?

user-interface - 人机交互 : UI beyond the WIMP Paradigm

c# - 未绘制 Windows 窗体图形

node.js - 如何使用 Node.js 即时创建图像?

html - 如何使用 CSS 创建动态大小的表单背景?

javascript onclick获取没有路径的图像名称

c++ - 用于 `UINT16` 二维数组的 C/C++ 快速中值滤波器

java - 如何获取 JSlider 背后的颜色