从点获取失真变换
Posted
技术标签:
【中文标题】从点获取失真变换【英文标题】:Getting the distortion transformation from points 【发布时间】:2011-09-03 21:00:36 【问题描述】:是否有可能从几个固定点得到矩形失真?
这个例子将更好地解释我的意思:
假设我有这个带有一个矩形和两个点的图像,这两个点在另一个图像失真的图像中被识别
知道之前两个(或三个)点的位置,我如何重现失真??
我的目的是得到扭曲的矩形边框。它不像示例中的那样简单,所以我不能只过滤颜色,我需要找到一种方法来获得扭曲的图像边框。
【问题讨论】:
如前所述,此问题受到限制。您的第二张图片可能至少是“旋转 + 缩放 + 剪切”以及我认为您想要的剪切。 你知道原始图像中的点和扭曲版本之间的映射吗?没有它(例如,如果它只是一些简单的特征检测器)也会更难。 @awoodland,很遗憾没有。这就是为什么它这么难。您可以计算距离、角度来建立平移/旋转,但您永远不会得到正确的失真图像。我想你需要超过两点才能做某事,但即便如此它还是相当困难的 我会想一想,但我怀疑如果您想始终快速找到一个真正的解决方案,您会想以某种方式从图像中引入一些额外信息 图像可以是从全景照片到电影场景的任何东西,这很糟糕,因为我不能依靠其他东西来找到场景边界 【参考方案1】:我相信您正在寻找的内容可以描述为仿射变换。如果您想要平面表面的一般变换,则可能需要透视变换。
您可以找到 OpenCV 实现 here。相关函数是需要 3 对点的 cv::getAffineTransform 或需要 4 对点的 cv::getPerspectiveTransform。
注意:如果您使用的是自动特征检测器/匹配器,最好使用比最小值多得多的点对,并使用稳健的异常值拒绝算法,如 RANSAC。
【讨论】:
谢谢,好像很难得到好的结果。也因为我正在寻找的转换是由两个或多个转换产生的 变换次数无所谓,一个接一个地进行100次仿射变换,一次仿射变换就可以了。【参考方案2】:移位和旋转需要 - 2 分
仿射变换需要 - 3 分
透视变换需要 - 4分
【讨论】:
以上是关于从点获取失真变换的主要内容,如果未能解决你的问题,请参考以下文章