2011-09-03 40 views
2

从几个固定点可以得到矩形失真吗?从点获取失真变换

这个例子会更好地解释我的意思:

假设我有一个长方形和两个分这张图片中,两个点,其中图像失真的其他图像中识别

enter image description here

如何知道两个(或者三个)前面点的位置?

我的目的是得到扭曲的矩形边框。这不是一个简单的图像,因为我不能只是过滤颜色,我需要找到一种方法来获取失真的图像边界。

+1

如上所述这个问题下的限制。你的第二个图像至少可以是'旋转+比例+剪切'以及我认为你希望的剪切。 – Flexo

+0

您是否知道原始图像中的点与扭曲版本之间的映射关系?没有这些(例如,如果它只是一些简单的特征检测器),它也会变得更加困难。 – Flexo

+0

@awoodland,遗憾的是没有。这就是为什么它很难。你可以计算距离,角度来建立翻译/旋转,但你永远不会得到正确的扭曲图像。我想你需要两点以上才能做点什么,但即使这样也很困难 –

回答

1

我相信你在找什么可以描述为仿射变换。如果您想要对平面曲面进行一般变换,则可能需要透视变换。

你可以找到OpenCV的实现here。相关函数是cv :: getAffineTransform,它需要3对点或cv :: getPerspectiveTransform,它需要4对点。注意:如果您使用的是自动特征检测器/匹配器,最好使用比最小值多得多的点对,并使用强大的异常排斥算法(如RANSAC)。

+0

谢谢,似乎很难得到好的结果。也因为我正在寻找的转换是通过两次或多次转换产生的 –

+0

转换次数并不重要,可以通过一次仿射变换执行100次仿射变换。 –

0

移位和旋转需要 - 2分

仿射变换分析需要 - 3分

视角变换分析需要 - 4点