2017-11-17 246 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

您需要決定成本函數。在這種情況下,將旋轉等轉換應用於圖像會產生另一個圖像。您可以將此圖像與目標色塊進行比較,以找出提供最低成本的角度。 –