從最終實作的角度來看,說不上是遺留物檢測,至多是靜止目标檢測【運動物體長時間滞留檢測】。實驗室同學搞畢業設計,幫忙弄弄,也沒弄成。
本文将分别給出老外論文+對應的代碼【在老外論文基礎上改進的】和國内的論文+代碼【失敗,能力不行】。總體思路都是幀間差分法,沒有用sift特征比對或者線上學習。
算法一:
《An abandoned object detection system based on dual backgroundsegmentation》 IEEE 2009
搞了兩個背景緩沖區:
Current_background:初始為第一幀,其後對每個像素,若下一幀像素大于該背景像素,則該出背景像素加1,否則該處背景像素減1。【挺神奇的,好處是This way, even if the foreground ischanging at a fast pace, it will not affect the background but if theforeground is stationary, it gradually merges into the background.但是效果還是不及混合高斯,因為适應期太長太頻繁了】
Buffer_background:論文上說每隔20秒更新一次,直接拷貝Current_background,遺留物檢測直接通過Current_background和Buffer_background相減即可。【他這邊認為一個遺留物丢棄滿20秒,如果還在,則認為該遺留物為背景了】。随後,搞了一堆跟蹤該區域的東西,我不太感興趣。
本文對上述的改進的目标是物體如果被遺棄了,那麼它就應該一直被檢測到。我額外搞了一個遺棄背景模版abandon_background,用于記錄遺棄物之前的背景圖像。
A.若物體離開,則abandon相應區域恢複到目前current的值,buffer更新為目前整個current。B.若物體未離開,則用abandon對buffer局部更新
整體算法:
1. 第一幀,用來初始化Current_background和Buffer_background
2. 通過兩個背景區域計算遺留物
3. 每一幀更新Current_background
4. 若時間間隔滿足,更新Buffer_background和遺棄物背景abandon_background,更新計數器
a. 若遺棄物背景首次更新,根據current和buffer之差,在相應的地方賦current的值,其餘為0
b. 進行物體離開判斷,即:若abandon與current對應區域背景像素不同,則物體還未離開,否則離開
c. 若物體離開,将current更新abandon的相應區域,buffer複制完整的current
d. 若物體未離開,将abandon更新buffer的相應區域,abandon保持不變。
5. 讀取下一幀,傳回2
代碼:
調用的函數:
主函數:
效果圖:

說明:左下角有個女的運動規律也符合靜止目标檢測規律,是以也被檢測出來了。後期可以通過外接矩形長寬比等其他手段過濾掉。
視訊+代碼工程的下載下傳連接配接:http://download.csdn.net/detail/jinshengtao/7157943
算法二:
《一種基于雙背景模型的遺留物檢測方法》
搞了個髒背景和純背景,定義:
當視訊場景中不出現運動目标,或者背景不受場景中所出現的運動目标影響時,這樣的背景稱為純背景。否則,稱為髒背景
它們的更新規則:
一般背景的更新按照幀間差分法:
髒背景使用全局更新,直接指派一般背景:
純背景根據前景掩膜,進行局部更新,即若前景掩膜被标記為運動的部分,則相應的純背景區域用上一幀的純背景更新;若前景掩膜被标記為非運動的部分,則相應的純背景區域用目前幀的一般背景更新。
靜止目标前景檢測算法可以通過以下公式看明白:
具體算法流程不給咯,論文沒提,自己摸索的,反正試驗效果失敗了。
算法三【MATLAB toolbox中的一個demo】
理論部分沒看,在控制台直接輸入:edit videoabandonedobj 會有相應的代碼跳出來。
在help中搜尋Abandoned Object Detection,會有理論部分介紹
視訊素材下載下傳位址:http://www.mathworks.cn/products/viprocessing/vipdemos.html
代碼:【2010b 版本可跑】
雖然不是自己的研究方向,但也算嘗試了吧。馬上快答辯咯,攢個人品先~