2010-08-23 90 views
0

我看了看。有人知道如何跟蹤Aforge的斑點嗎?我知道他們沒有實現,但我真的需要使用Aforge,因爲我使用的其他代碼。我看到一些卡爾曼濾波的參考,但我需要一些實現而不是理論。在Aforge跟蹤斑點

TNX, 訴

回答

2

的AForge.NET BlobCounter將提供BLOB發現,雖然這是相當簡單的,不支持「破」的斑點。如果你想實現一些簡單的團塊跟蹤,幾件事情,你可能會考慮:

  1. 如果你的斑點是偶爾分散,您可能需要執行一些集羣(發現的質量位置的中心,以小片段結合的組)以獲得對該位置的良好估計。分析多個幀時,這會增加遇到邊界條件(如斑點破碎)的機會,因此重要的是要考慮。或者,如果您對條件(如照明)具有良好的控制能力,那可能就足夠了。在blob找到之前,可以使用重複的膨脹/腐蝕操作來解決小問題(只有幾個像素點)的問題,但這也會放大噪聲並降低定位精度。

  2. 對於實際的跟蹤,你有幾種方法。卡爾曼濾波可以爲您提供非常好的精度(亞像素),因爲它可以集成來自多個幀的信息。如果你不需要這種精確度,你可以考慮一個非常簡單的算法,例如總是選擇最接近最近位置的足夠大的斑點。如果對象沒有快速移動,並且在跟蹤對象附近沒有其他blob彈出,則此功能可用。如果您需要更好的分析性能,您可能還能夠估算最後兩幀的速度,並使用它來限制搜索blob時必須考慮的區域。

  3. 如果您需要跟蹤高速目標,即成爲一個更具挑戰。在這種情況下,您可能會嘗試將blob發現與模板匹配相結合。您可以根據blob-find創建一個模板,並將模板與後續的blob進行匹配,以根據模板對它們進行評分,而不僅僅是它們的大小/位置。這要求斑點隨着時間的推移顯得合理一致,這意味着模型的物理形狀和照明條件必須保持固定。


更新針對您的問題:

今天早上有一個幾分鐘,所以沒有實際的代碼,但基本的思路是這樣的:

  1. 只考慮斑點比配置的尺寸更大的(你可能不得不憑經驗確定這一點。)

  2. 保留找到的最後兩個斑點位置的信息以及它們被採樣的時間。在時間t1和t0,我們在R2中調用這些向量,p1和p0。如果你假設速度緩​​慢變化,那麼在新位置的時間t2處的初步估計爲p2 = p1 +(t2-t1)*(p1-p0)/(t1-t0)。這可能是也可能不是一個好的假設,所以您需要通過在所需的運動範圍內捕捉對象來驗證這一點。

  3. 您可以選擇使用這個估計你的斑點搜索區域限制爲中心的估計位置的子圖像。在執行斑點查找之後,將距離估計位置最近的斑點作爲新的位置測量。

上述的一個副作用是,如果出於某種原因,blob發現在一幀期間失敗,則可以使用該估計。允許這種推斷太長時間是危險的,但它可以給你一些容許小的噪音峯值。

您可能會看到如何進一步改進以包括來自最近幀的加速度估計或整合來自多個幀的速度/加速度以更好地推斷下一個樣本的可能位置。您也可以開始相信,估算值(來自當前幀和前一幀的累積數據)比實際測量更精確(也許準確)。最終你會得到像卡爾曼濾波器這樣的東西。

+0

優秀的答案如何選擇#2(大小和位置的組合)的一些參考代碼 – tomato 2010-08-24 11:22:42

+0

哇你的演繹是偉大的,我現在去代碼可能會添加一些過濾掉幀。非常感謝你@丹 – tomato 2010-08-24 15:38:19