2

应用程序PhotoFiltre可以选择拉伸图像的一部分。您选择一个矩形形状,然后您可以抓取并移动其他位置的顶点以制作任何四边形。您选择的图像部分将沿着。希望这些图片让我更清楚一点一点:拉伸图像以适合任何四边形

before

after

是否有一个通用的算法,可以处理呢?我希望在HTML5画布上获得相同的效果 - 给出一个图像和由此产生的角点,我希望能够以这样一种方式绘制拉伸的图像,使其完整地填充新的四边形。

前一段时间,我问something similar,解决方案是将图像分成三角形并拉伸每个三角形,使每三个点对应原始图像上的三个点。这种技术原来是相当广泛的,我想如果有更通用的方法来完成这个。

我想在3D渲染器中使用它,但我想使用(2D)四边形。

我不知道PhotoFiltre内部是否也使用三角形,或者是否使用其他(更便宜)的算法来拉伸像这样的图像。

有人可能知道是否有一个更便宜或更一般的方法/算法来拉伸矩形图像,以便它填充给定四个点的四边形?

回答

3

的通常方法是与目标启动,选择一个合适的网格尺寸,然后在新的形状的每个点计算所述源图像中的对应点(可能具有取决于所需的质量插补)

+0

非常感谢,我正在尝试。只是想补充说,我发现后,更多的搜索这个网站:http://acko.net/files/projective/index.html。这似乎很有趣。 – pimvdb

+0

这会占用很多的表现。如何在不使用插件的情况下将其最小化? – pebble225

0

仿射变换。

给出“拉伸”图的四个点和它应该匹配的图的四个点(例如矩形),仿射变换提供了您需要的空间映射。对于原始图像中的每个点(x1,y1),第二个“拉伸”图像中有一个对应点(x2,y2)。

对于拉伸图像中的每个整数值像素(x2,y2),使用仿射变换在原始图像中查找对应的实值点(x1,y1),并将其颜色应用于(x2,y2 )。

http://demonstrations.wolfram.com/AffineTransform/

你会在网上找到Java和其他语言的示例代码。 .NET有Matrix类。