2011-05-06 72 views
7

嗨,我編碼了一個簡單的下棋機器人的視覺系統,我想改善以前的一些研究允許使用的攝像頭和一個標準的國際象棋和兩個被允許在比賽中移動。到目前爲止,我可以在通過網絡攝像頭採集的圖像中找到該電路板,並且我希望通過對不同的連續圖像進行檢測來確定發生了什麼變化,然後使用之前關於電路板佔用情況的信息來檢測移動。檢測象棋使用OpenCV的工具連續圖像的不同移動

我的問題是,我似乎無法可靠地檢測此刻的變化,我現在的管道是這樣的: 提取兩個圖像 - >直方圖均衡差分圖像 - >侵蝕和擴張差異圖像以去除細微的變化 - >製作一個二進制副本並進行距離變換 - >獲取最大的斑點(對應於DT之後的最高值並填充該斑點) - >再次重複,直到DT返回一個足以忽略變化的值。 ++

我編碼這一切的OpenCV和C。但是我的洪水填充似乎總是要麼不填充斑點,因此大多數情況下我只能得到一個檢測到的變化。我也試過使用cv::inpaint,但這也沒有幫助。所以我的問題是;我只是使用錯誤的方法,或者某種方式可以使變化檢測更可靠。在前者的情況下,人們是否可以建議其他路線,最好在合理的時間內用C++/Python和/或OpenCV編碼?

感謝

回答

3

獲得在董事會的修復和檢測片的運動可以獨立解決的,假設一個不動的板,同時還走動件的問題..

如何的幾點思考我想接近它:

檢測板的方向

你必須要能夠處理板到位旋轉,如以及只要保持一定的角度就可以移動,讓你看到棋子。這將有助於如果有東西在黑板上,你可以很容易地識別(例如,在每個角落的標誌),所以,如果你失去方向(例如有人完全移動板遠離相機),你可以很容易地找到它。

爲了保持跟蹤你需要相對於主板在3D空間中的攝像機的位置模型董事會。這與確定相機在固定板周圍移動的位置相同。 Egomotion的問題。一旦你解決了這個問題,你就可以進入下一個階段,即檢測運動和跟蹤對象。

檢測片

這可能這個問題比較簡單的部分的運動。視頻中有很多算法用於對象檢測。我只會補充說,你可以使用「關鍵」框架。我的意思是確定在一次移動之前和之後只能看到棋盤的那些幀。例如你沒有看到手移動它遮擋了棋子等。一旦你有了前/後框架,你可以找出移動的位置以及它相對於棋盤的位置。

你或許可以逃脫不能夠識別每一塊的形狀,如果你認爲連續性(即由於車板,這是衆所周知的初始配置,您已經跟蹤的所有動作)。最後

+0

一個音符:如果我能我會避開C++的這一點。可能用Python更快地完成它。除非你在C++中找到一些非常有價值的庫,你只需要使用。在這種情況下,我會包裝它並從python中使用它。 – 2011-05-06 16:46:06

+0

感謝您的建議,我不害怕完全放棄C++,我可以全部使用python,我更多的是首先尋找這個想法。我對第一階段的限制之一是不需要修改任何方式(所以沒有標記或類似的東西),因此我會很感激任何意見考慮到這一點 – makokal 2011-05-11 11:38:45

+0

你可以依靠顏色這些作品是黑色的還是白色的?如果是這樣,您可以在開始時在板上進行PCA,並根據其顏色識別兩側。但從那時起,你將不得不跟蹤董事會的方向。 – 2011-05-12 18:32:04

相關問題