2012-12-20 86 views
4

我看到與opencv運動檢測有關的查詢,但我的要求更簡單,所以我再次問這個問題。 我想分析視頻幀並查看幀中是否發生了變化。在框架中發生的任何類型的運動都被認可。如果發生什麼事我只想得到通知。我不需要追蹤/繪製輪廓。製成運動檢測使用OpenCV

嘗試:

1)使用的OpenCV(TM_CCORR_NORMED模板匹配)。

我得到使用cvMinMaxLoc &

if(sim_index > threshold) 
    "Nothing chnged" 
    else 
    "Changed 


面臨的問題相似度指數:

我無法找到一個方法來決定如何設定閾值。錯配和完美的價值非常接近。

2)方法2
a)使運行平均值
b)採取當前幀與移動平均之間絕對差。
c)閾值並使其成爲二進制
d)計算非零值的數量
我再次堅持如何對它進行閾值處理,因爲即使對於非常相似的幀,我也獲得了大量的非零值。

請問我應該採取什麼方法。我是用上述兩種方法走向正確的方向,還是有一種簡單的方法可以在所有大多數通用情況下工作。

+0

如果TM_CCORR_NORMED與Pearson Correlation Coefficient等價,那麼取決於您的幀如何修改,您將很難確定此方法的良好閾值,因爲沒有好的閾值。但你沒有清楚地說出你在第一種方法中做了什麼。你是否將初始幀設置爲基準幀,然後將每個新幀與它進行比較?然後,如果'sim_index'低於'threshold',則將此新框架標記爲基礎框架。重複。那是你的方法嗎? – mmgp

回答

3

方法2通常被認爲是最簡單的運動檢測方法,如果您的視頻中沒有水,搖曳的樹木或高度可變的光照條件,該方法非常有效。 通常你實現這樣的:

motion_frame=abs(newframe-running_avg); 
running_avg=(1-alpha)*running_avg+alpha*newframe; 

可以門檻motion_frame如果你想,再算上nonzeroes。但是,您也可以將motion_frame和threshold的元素相加(確保使用浮點數)。爲此優化參數非常簡單,只需製作兩個軌道杆並進行操作即可。通常α是在[0.1; 0.3]。

最後,在整個幀上完成此操作可能是矯枉過正,您可以使用二次採樣版本,結果會非常相似。