2005-12-14

[視訊] 移動偵測機制

【目標】:
把視訊中移動的物體取出來

好讓之前遊戲要能夠判斷玩家的手勢、選取的區塊…等等。
【做法】:
把之前做過的視訊串流 (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
【完成圖】:
視訊開始播放,未設定背景畫面進程式記憶中



設定背景畫面後



以手移入來當移動偵測


沒有留言:

張貼留言