2012-11-11 51 views
1

我有這樣一個棘手的任務,將框架i中的斑點與框架i + 1中的斑點相關聯。我還沒有找到足夠的文章/例子來解決這個問題,或者那些我能理解的問題。我想要做的就是將框架i中的斑點與框架i + 1中的斑點相關聯。目標不是在下一幀中再次檢測到同一個blob(或忽略舊的)。將幀i中的斑點與幀i + 1相關聯?

歡迎舉一個文章/例子。 Thx

+0

我已經在幀序列中使用背景減法和findcontours函數檢測到斑點。 – Ruzzar

回答

1

我認爲這是一個「多個對象跟蹤」問題。如果你的斑點彼此相同,這可能很難,否則你可以先定義兩個斑點之間的距離(這取決於你如何在數學上表示斑點),給定框架i中的斑點X,在框架中找到它i + 1就像在第i + 1幀中尋找與X最相似的斑點。

理想情況下,blob在兩幀之間不會移動太多。所以,爲了挽救你的生命,你可以把X放入第i幀的相同位置,並在第i幀中尋找它周圍最相似的一個。

希望這些幫助。

+0

**其他信息;由於它們靠近相機,斑點大小不是恆定的。**但我認爲該位置可能會有所幫助。到目前爲止,我已經計算了斑點的時刻。所以可能我必須在第一幀得到它的位置,並與第一幀+第一幀進行比較。 – Ruzzar

2

如果blob在幀與幀之間更改其大小,則必須使用blob的比例不變描述符來比較兩個blob。 cv :: HuMomments就是這樣的描述符。您還可以使用函數cv :: matchShapes直接比較在後續圖像中檢測到的輪廓。

如果幀間幀的移動很小,那麼你可以在第一幀中保存斑點的中心位置,並通過採用那些最接近這些中心的斑點來識別第二幀中的相應斑點。 (如前所述)

另一種可能性是對點(如果它們有一些紋理)和每個斑點輪廓的邊界進行採樣並使用Lucas Kanade Tracking(cv :: calcOpticalFlowPyrLK)。中等光流可以告訴你你的斑點在哪裏移動。

您也可以單獨爲每個blob運行Lucas Kanade Tracking。將prevPts設置爲斑點的中心,winSize應該與斑點的大小完全匹配。

OpenCV中的Lucas Kanade跟蹤算法只能跟蹤小的平移位移。如果你也有很大的旋轉,你需要一個模板跟蹤算法來優化旋轉。在這裏你可以找到一個很好的tutorial關於這個和here關於這個更高級的研究。

爲了給你更多的想法,我們需要更多的信息來了解blob是怎麼樣的,它們是如何移動的,它們有多大,等等。