1. 程式人生 > >關於視訊關鍵幀提取演算法

關於視訊關鍵幀提取演算法

系統總體設計

  1. 監控系統的移動端部署
  2. 影象關鍵內容的提取
  3. 資料傳輸加密
  4. 監控端與使用者
  5. 身份認證身份認證
  6. 實時預警實時預警
  7. 獲取監控關鍵資訊獲取監控關鍵資訊

異常行為檢測過程通常分為四個階段:

  1. 初始化-通過初始化為整個系統處理採集到的影象資料:例如,建立一個合理的影象輪廓匹配系統模型
  2. 跟蹤-從影象背景中分理出目標部分,並分析連續幀目標部分的相應關係
  3. 姿態-估計連續幀出現的姿態行為(通常,需要建立一個高階人的行為模型)姿態-估計連續幀出現的姿態行為(通常,需要建立一個高階人的行為模型)
  4. 識別-識別行為識別-識別行為

視訊監控中的異常行為檢測大致可以分為兩種:
基於模型的異常行為檢測方法基於相似度的異常行為檢測方法
基於模型的異常行為檢測方法,是基於某種準則,採用人為或半監督定義正常行為模型,而正常模型的定義是根據從視訊影象序列中提取出來的運動,外形特徵資訊。如採用隱馬爾可夫模型(Hidden Markov Model,HMM)統計或者圖模型的對視訊序列影象特徵資訊進行建模,如果檢測的行為不匹配正常行為模型,則被視為異常行為。

基於相似度的異常模型檢測方法,由於異常行為難以被發現和定義,所以無需顯示定義行為模型就可以檢測識別出異常行為。基於相似度量的異常行為檢測原理是通過學習視訊序列中正常行為模式,然後去推斷有可能發生的異常行為。

運動目標的檢測方法

常用的有:背景差分法、幀差法和光流法。

背景差分法

背景差分法是最常用的一種運動目標檢測方法,其效能依賴於背景建模技術。背景差分法原理是將視訊序列中的當前視訊幀影象與背景建模獲取到的背景影象做比較,來檢測運動目標。
圖片: https://images-cdn.shimo.im/AQGitst9cZEtxs1D/image.png
優點: 檢測速度快,檢測準確,易於實現。
缺點: 變化的檢測場景中,背景更新的難度會增加,背景建模的模擬準確度將直接影響運動目標檢測效果。
目前 背景建模的方法主要有以下四種:

(1) 中值法

中值法背景建模原理是讀取一段連續N幀視訊影象.並計算N幀視訊閣像對應位罝畫素值的中值,影象中每個位罝的畫素中值即為背景閣像對應位罝的畫素值。主要適用於一段時間內運動目標出現次數比較少的情況。

(2) 均值法

均值法背景建模基本思想是讀取一段連續N幀視訊閣像.並計算N幀視訊閣像對應位罝 畫素灰度值的平均值,即為背景影象對應位罝的畫素灰度值。均值法的優點是演算法速度快, 缺點是容易受到光照強度的變化和一些動態背景的影響。

(3) 混合高斯

浞合高斯背景建模對視訊影象樣本進行概率密度進行估計,而估計模型則是幾個高斯模型的加權和。每一種高斯模型代表一類背景,因此,多個高斯模型混合使用就可以模擬出複雜場泉中的多模態情形.混合高斯模型的優點可以將複雜場景分解為若干個對應的高斯模型, 自適應性比較好,缺點是演算法複雜度高,執行速度慢。

(4) 卡爾曼濾波器

卡爾曼濾波器背景建模原理是利用卡爾曼濾波器時域遞迴低通濾波原理來預測緩慢變化的背景影象,濾除噪聲(前景影象)。卡爾按濾波器適用於比較穩定的場景。優點是可以利用前景影象進行背景更新,又可以通過維持背景的穩定性來消除噪聲的干擾,缺點是不適用於動態變化的場景。

幀差法

幀差法是背景減閈法中的一種.只是幀差法不耑要建模.因為它的背#建模就是上一楨的圖,所以速度非常快.另外幀差法對緩慢變化的光照強度不是很敏感,所以其具有一定的應用價值。目前幀差法主要分為兩幀差分法和三幀差分法。

(1) 兩幀差分法

兩幀差分法的基本原理可以用下面公式表示:
圖片: https://images-cdn.shimo.im/zJnAWJu0430aSiBC/image.png
其中分別為t,t-1時刻對應畫素點的畫素值.T為閾值.當然其不足的地方也不少, 容易出現“空洞”和“雙彩”現象。

(2) 三幀差分法

對子兩幀差分法的“雙影”現象,可以迎過採用三幀差分法來消除該現象.其實現過程如下圖所示
圖片: https://images-cdn.shimo.im/LB5zXotvfMAFMYJQ/image.png
三幀差分法將兩次相鄰幀的查分二值化影象做與操作,使可以得到真正的那個前景影象。三楨差分法在一定程度上可以解決“雙影”現象。但是得到運動內部區域容易出現空洞現象,不利於後續處理。

光流法

光流是一種影象亮點運動資訊的特徵,即影象灰度模式下的運動表現特徵。而一般而言,光流特徵資訊是由於場景中相機和前景運動目標相對運動產生的。其計算方法可以分為三類:基於區域或者基於特徵的匹配方法;基於頻域的方法;基於梯度的方法;

光流法檢測運動目標原理:
賦予影象中的每個畫素點運動向量,就可以形成一個運動向量場,通過其對應關係計算公式便可以將影象中的畫素點投影到三維物體上,然後通過畫素點運動向量特徵進行動態分析。如果影象中不存在運動目標,則速度向量在整個影象區域是連續變化的。當影象中存在運動物體時,背景和運動目標發生相對運動運動目標所形成的速度向量一定和背景的速度向量有所不同,因此可以計算出運動目標的位置資訊。

光流法的基本公式:
光流場是物體的速度向量場,包括兩個分量u,v。設平面上有一點(x,y),其指的是場景中的某一點(x,y,z)在影象平面上的投影,該點在時刻t的灰度值為I(x,y,t)。假設該點在 t+△t時刻運動到位置(x+△x,y+△y),在很短的時間間隔△t內其灰度值保持不變,由此可以得到:
圖片: https://images-cdn.shimo.im/nWL72qohkV4ypHV2/image.png
光流法既可以檢測運動目標,也可以運動於目標跟蹤。單身光流法比較複雜,無法保證檢測實時性。


跟學長聊了一下午 搞懂了要實現的到底是個什麼東西
後面進入基於openCV的關鍵幀提取演算法的實現


OpenCV進行影象相似度對比的幾種辦法

直方圖方法

方法描述:有兩幅影象,分別計算兩幅影象的直方圖,並將直方圖進行歸一化,然後按照某種距離度量的標準進行相似度的測量。
方法的思想:基於簡單的向量相似度來對影象相似度進行度量。

優點:直方圖能夠很好的歸一化,比如256個bin條,那麼即使是不同解析度的影象都可以直接通過其直方圖來計算相似度,計算量適中。比較適合描述難以自動分割的影象。

缺點:直方圖反應的是影象灰度值得概率分佈,並沒有影象的空間位置資訊在裡面,因此,常常出現誤判;從資訊理論來講,通過直方圖轉換,資訊丟失量較大,因此單一的通過直方圖進行匹配顯得有點力不從心。

影象模板匹配

一般而言,源影象與模板影象patch尺寸一樣的話,可以直接使用上面介紹的影象相似度測量的方法;如果源影象與模板影象尺寸不一樣,通常需要進行滑動匹配視窗,掃面個整幅影象獲得最好的匹配patch。

在OpenCV中對應的函式為:matchTemplate():函式功能是在輸入影象中滑動視窗尋找各個位置與模板影象patch的相似度。

PSNR峰值信噪比

PSNR(Peak Signal to Noise Ratio),一種全參考的影象質量評價指標。

簡介:https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio

PSNR是最普遍和使用最為廣泛的一種影象客觀評價指標,然而它是基於對應畫素點間的誤差,即基於誤差敏感的影象質量評價。由於並未考慮到人眼的視覺特性(人眼對空間頻率較低的對比差異敏感度較高,人眼對亮度對比差異的敏感度較色度高,人眼對一個區域的感知結果會受到其周圍鄰近區域的影響等),因而經常出現評價結果與人的主觀感覺不一致的情況。

SSIM(structural similarity)結構相似性

也是一種全參考的影象質量評價指標,它分別從亮度、對比度、結構三方面度量影象相似性。

SSIM取值範圍[0,1],值越大,表示影象失真越小.

在實際應用中,可以利用滑動窗將影象分塊,令分塊總數為N,考慮到視窗形狀對分塊的影響,採用高斯加權計算每一視窗的均值、方差以及協方差,然後計算對應塊的結構相似度SSIM,最後將平均值作為兩影象的結構相似性度量,即平均結構相似性MSSIM:

感知雜湊演算法

感知雜湊演算法(perceptual hash algorithm),它的作用是對每張影象生成一個“指紋”(fingerprint)字串,然後比較不同影象的指紋。結果越接近,就說明影象越相似。

實現步驟:

縮小尺寸:將影象縮小到8*8的尺寸,總共64個畫素。這一步的作用是去除影象的細節,只保留結構/明暗等基本資訊,摒棄不同尺寸/比例帶來的影象差異;
簡化色彩:將縮小後的影象,轉為64級灰度,即所有畫素點總共只有64種顏色;
計算平均值:計算所有64個畫素的灰度平均值;
比較畫素的灰度:將每個畫素的灰度,與平均值進行比較,大於或等於平均值記為1,小於平均值記為0;
計算雜湊值:將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張影象的指紋。組合的次序並不重要,只要保證所有影象都採用同樣次序就行了;
得到指紋以後,就可以對比不同的影象,看看64位中有多少位是不一樣的。在理論上,這等同於”漢明距離”(Hamming distance,在資訊理論中,兩個等長字串之間的漢明距離是兩個字串對應位置的不同字元的個數)。如果不相同的資料位數不超過5,就說明兩張影象很相似;如果大於10,就說明這是兩張不同的影象。
感知雜湊演算法的實現
[C#](https://www.cnblogs.com/technology/archive/2012/07/12/2588022.html)
[openCV] (https://blog.csdn.net/fengbingchun/article/details/42153261)


關於後續openCV的學習和演算法的實現與改進我會在部落格上更新
至於github。整個視訊專案是團隊努力的成果 並不屬於我個人 所以這個專案暫時不會在放到github上面