2017-11-17 249 views
0

所以我一直在努力解决这个问题一段时间,所以如果有人帮我解决这个问题,我将不胜感激。使用SIFT通过OpenCV模式匹配图片旋转python

我正试图创建一个解决谜题的物理机器人。完成拼图的形象会随着

Scattered piece picture

我已经得到的OpenCV找到轮廓零散的图片提供单出每件和旋转它们,所以它们都平行于横轴(所有的“钻石”或“对角”棋子都旋转,因此它们看起来像正方形)

我一直在使用SIFT来匹配一堆小方块到完整的图片。

Comparing an un-rotated square piece to the full picture

的问题是,这是不是在正确的方向。我将如何去了解是否需要旋转90,180,270度?

我遇到的另一个问题是确定作品所在的象限(非adrant?)。例如,此作品属于右下角。是否有一个功能可以识别大部分类似的关键点,然后将其分为九个区域中的一个?

回答

0

由于SIFT设计为旋转不变式,即使您有旋转,功能匹配也是件好事。

要确定需要多少旋转,您通常需要有摄像机校准参数,以便将图像放置到自顶向下的视图中。对于你的机器人来说,它看起来像图片已经是自上而下的。

如果这个假设成立,您可以执行回归来确定旋转棋子所需的角度。如果你也知道你的作品总是正方形的,你只有4种选择。在这种情况下,您可以尝试所有4,并查看哪一个与提取的补丁“最接近”(通过SIFT匹配到大图)。

可以通过查看匹配点的坐标来确定匹配的棋子所在的象限。他们到角落的距离应该是你需要的。

+0

嗨,你可以进入关于执行回归的更多细节吗?我一直在考虑它,如果我需要机器人旋转整个缺失的角度,我不妨一次计算所需的角度,而不是过早地旋转它,然后计算四个选项中的哪一个执行 – elliot430

+0

您需要决定成本函数。在这种情况下,将旋转等转换应用于图像会产生另一个图像。您可以将此图像与目标色块进行比较,以找出提供最低成本的角度。 –