3

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

前

后

有没有可以处理这个问题的通用算法?我想在 HTML5 画布上获得相同的效果 - 给定图像和生成的角点,我希望能够绘制拉伸的图像,使其整齐地填充新的四边形。

前段时间我问过类似的问题,解决方案是将图像分成三角形并拉伸每个三角形,使每三个点对应于原始图像上的三个点。事实证明,这种技术相当昂贵,我希望有更通用的方法来实现这一点。

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

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

有人可能知道是否有更便宜或更通用的方法/算法来拉伸矩形图像,以便在给定四个点的情况下填充四边形?

4

2 回答 2

2

通常的方法是从目的地开始,选择合适的网格大小,然后为新形状中的每个点计算源图像中的对应点(可能根据您需要的质量进行插值)

于 2011-08-22T15:47:20.187 回答
1

仿射变换。

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

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

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

您可以在线找到 Java 和其他语言的示例代码。.NET 有 Matrix 类。

于 2012-01-01T04:16:38.257 回答