[視訊] 移動偵測機制
【目標】:
把視訊中移動的物體取出來
好讓之前遊戲要能夠判斷玩家的手勢、選取的區塊…等等。
【做法】:
把之前做過的視訊串流 (Video Stream) 轉 Bitmap 加上這一道機制
A. 首先要在視訊連線後,設定背景畫面
(之後移動拍攝地點也要重設)
B. 把後來收的畫面,一個 Pixel 一個 Pixel 地“減”去背景畫面,
因為不管值為正負,只管跟原背景色的【差距】,
所以減完後,還要取【絕對值】(abs),才能得出差距畫面。
公式 1.
Diff[Row][Col] = abs(Current[Row][Col] - BackGround[Row][Col]) ;
C. 但經過我的測試後,發現 WebCam 的雜訊很高
所以要再經過超過【門檻值(Threshold)】之判斷的處理
讓低於門檻值的差距畫面就放棄不要嚕
公式 2.
Diff[Row][Col] = abs(Current[Row][Col] - BackGround[Row][Col]) - Threshold;
D. 發現背景光線的明暗程度也會隨有侵入物之移動而有所變化
造成整個畫面都被偵測出【移動差距】
所以我建議在視訊來源之設定對話方塊 (Video Source Dialog)
把所有有關【自動調整】的部份,通通關掉
之後果然不會整個畫面都被偵測出是移動中的狀態。
《設定圖解》:

E. 再經過我個人的測試後,【差距畫面】的雜訊還是很高
所以我想起大二上過的【影像處理】
有教過【去雜訊】的技術
所以引進了【3*3 Order-Statistics Filter ~ Median】演算法
其最後的移動取樣的效果非常好 :D
【完成圖】:
視訊開始播放,未設定背景畫面進程式記憶中

設定背景畫面後

以手移入來當移動偵測

沒有留言:
張貼留言