祖仲林 李 勃 陳啟美
(南京大學電子科學與工程系 南京 210093)
復雜條件下的背景建模是計算機視覺領域尤其是運動目標檢測中的難點,已有的研究中,提出了大量建立背景模型的方法[1-3],如時域差分與自適應背景更新相結合的方法、高斯混合模型(mixture of Gaussian)、Codebook背景模型來進行背景學習與前景檢測,以及利用區域二維特征(local binary pattern,LBP)來建立模型等.
人的視覺系統識別物體輪廓主要觀測的是紋理信息,由于紋理不隨光照而改變,因此從理論上對紋理的逼近是區分背景最直接的方法.Heikkila提出統計一個區域內的基本LBP紋理,利用紋理直方圖完成對背景建模,但該算法復雜度仍然較高,不能很好滿足實時處理的要求.文中提出了基于CUDA的快速LBP直方圖背景建模算法,利用CUDA技術并發執行的優點,把傳統的基于CPU的背景建模算法移植到GPU平臺上,從而有效地實現實時性與可靠性的同時兼顧.
LBP是一種有效的紋理描述算子,具有旋轉不變性和灰度不變性等顯著優點.在近10年的時間里,該算子已經廣泛地應用于紋理分類、圖像搜索、人臉圖像分析、運動目標檢測等領域.
基本LBP局部紋理描述法簡單且非常有效.定義紋理

式中:gc為中心像素點,gi(i=0,1,2…,p-1)為以gc為中心的正方形框內的鄰域點.以窗口中心點灰度值為閾值對窗口內其他像素做二值化處理

進一步定義閾值判決函數s(gc,gi)(i=0,1, 2,…,p-1):

通過對閾值函數采用因子為2i的加權,得到LBP的紋理描述

為了適應不同尺度的紋理特征,Ojala[5]等對基本LBP算子進行了改進,用圓形鄰域代替了正方形鄰域,采用雙線性插值算法計算沒有完全落在像素位置的點的灰度值.符號LBP(P,R)表示在半徑為R的圓形鄰域內有P個像素點, LBP(8,3)如圖 1所示.文中選取 3×3鄰域的LBP(8,1)算子.

圖1 擴展的LBP紋理算子(R=3,P=8)
由于文中采用的測試序列多為交通監控視頻,考慮到交通視頻具有自身的特殊性,即存在車道線、左右車道間柵欄等,用式(3)中差值控制法進行閾值判決,因其在單幀中閾值是固定的,不能很好地描述車道線、柵欄附近鄰域的紋理.故,提出了基于比值控制的方法,可以很好地解決以上問題,選取閾值判決函數如下(其中 α,β為設定值,均接近于1).

基于紋理直方圖的背景建模算法流程如圖2所示.首先對當前幀圖像進行LBP編碼,計算以Region為半徑的圓形區域內的LBP統一模式直方圖,將當前幀像素的LBP統一模式直方圖h與背景模型中對應像素的直方圖進行匹配.h與當前背景模型的直方圖進行相似性比較.參考Heikkila[4],用式(6)來衡量它們的相似性


圖2 基于紋理直方圖的背景建模算法流程圖
式中:a,b為LBP統一模式直方圖;N為條目數.相似性度量的閾值 Tp是用戶設定的參數,根據經驗,一般在0.6~0.7之間可以得到好的結果.
對于背景模型包含的K個直方圖,根據其權值進行降序排列.將當前幀中像素LBP統一模式直方圖h與降序排列好的進行相似性匹配.如果與背景模型中所有直方圖相似度都小于那么最低權值的直方圖將被h來取代,并被賦予低的初始權值,文中用0.01,同時作比例調整權值.
如果找到了匹配的直方圖,需要按下式更新背景直方圖:


式中:Mk對于匹配的直方圖值為1,其余值為0.背景模型的更新速度由學習速率參數來控制,由用戶設定,其值越大,模型更新越快,但易受噪聲影響.通常情況下它們取值較小時如0.01~0.05,可以得到好的結果.
背景的確定方法如下:將LBP統一模式直方圖按照權值進行降序排序,并在K個降序排列好的直方圖中選取滿足下式的最少的前B個直方圖來表征背景(B<K):

前景檢測在背景模型更新前完成.當前幀某個像素的直方圖h與相應位置表示背景的B個直方圖用式(6)進行比較,如果對于其中一個直方圖來說相似性大于所設定的閾值 Tp,那么此像素就為背景,否則即為前景.
基于CUDA的CPU+GPU整體架構如圖3所示,在主機和設備端都有獨立的存儲空間,首先在主機端開辟內存空間,通過cudaMemcpy將待處理數據傳遞到設備,在設備上執行完Kernel函數,完成處理后,數據再傳回主機.其中Kernel函數由多處理器并行執行,每個網格對應一個Block,每個多處理器可以使用16 kB共享內存,通過充分利用共享內存,可以更加有效地提高設備的使用效率.

圖3 CPU+GPU系統架構圖
圖像在設備上的存儲主要有3種方式,包括主機端的分頁存儲、分片存儲以及紋理存儲.
其中,使用cudaMallocHost開辟的分片存儲空間(頁面鎖定)必定存在于物理內存中,而且地址固定,可以有效提高主機端與設備端的通信效率.相比cudamalloc開辟的分頁存儲空間,分片存儲能使用CUDA API提供的異步傳輸功能,實現流式處理,在設備主機之間拷貝數據耗時更少,雖然分片存儲有很多好處,但實際中不能分配過大,否則會降低系統整體性能.
在LBP直方圖背景建模算法中,由于每個thread運算需要讀取一小塊數據而不是單個數據(比如LBP編碼),如果每次訪問都需要重新從全局存儲器中訪問,重復讀取較多,訪問效率低,同時需要考慮圖像的邊界問題.紋理存儲為圖像處理提供了優化,具有一組高速緩存,能夠自動處理邊界條件.在核函數中通過tex2D()函數獲取像素值,非常方便,但紋理存儲是只讀的,不能用紋理作為輸出.
設備和主機之間數據傳遞的時間是實時系統中需要考慮的因素,文中對多分辨率下(704×576 D1、320×240)的常見測試序列,分別使用3種不同存儲方式,測試耗時表1所列(實驗平臺:E6300 1G ddr2內存G9600GSO).

表1 不同存儲方式下傳輸耗時比較

圖4 多點訪問技術
對于單個網格內部,由于計算單個像素點以Region為半徑的LBP統一直方圖時,相鄰點有較多重疊部分,針對這一特性,充分使用每個多處理器(MP)對應的16 kB共享內存,可以節省大量全局存儲器帶寬,大大提高單次全局讀取平均對應的運算次數.
設備端存儲主要包含背景圖像的LBP直方圖、一些配置參數(如背景更新速率、背景判決閾值等).實驗中選取每個block對應為128個thread(16×8),通過2.3中多點訪問技術,可以看出每次計算對應4個點的輸出,綜合考慮每個MP的寄存器數量與最大并發線程數,選取每個thread對應4×3個像素點.設備端主要的kernel函數包含:
1)LBP編碼 LBP_code<<<blocks, threads>>>()
通過紋理獲取主機端傳遞的當前幀圖像,完成對圖像的LBP紋理編碼,選用LBP(8,1)算子
2)前景提取 Forg_Get<<<blocks, threads,SharedMem>>>()
先計算當前幀圖像的LBP紋理直方圖,通過與背景紋理直方圖相似性比較,區分前景點,將前景二值化圖像傳回主機端,注意這里用到了共享內存
3)背景 LBP直方圖更新 Update_back<<<blocks,threads>>>()
根據已提取的前景圖像更新設備端儲存的背景LBP直方圖
硬件平臺:CPU為Intel Core E6300;內存為ddr2 533 1.0 GB;顯卡為 Nvidia G9600GSO (384MB,192bit).軟件平臺:Linux Suse 10.3;編譯環境gcc,g++;支持Intel opencv libarary,整體實現基于CUDA SDK 2.1.
實驗使用的數據包括2組測試視頻
1)http://cvrr.ucsd.edu/aton/shadow提供的標準測試序列,選用其中高速公路上的場景——highwayII測試序列(32×240)
2)項目組選用的來自江蘇省寧連高速公路的路況監控視頻,D1格式(704×576)
3.2.1 檢測效果對比 利用文中算法對兩組視頻進行測試,圖5為highwayII上的測試結果,圖6為寧連高速路段視頻測試結果,其中后一組視頻中運動車輛有不同程度的陰影,為突出顯示抑制陰影的效果,作了適當截圖(圖中所有檢測結果均未經過形態學濾波等后續處理).

圖5 highwayII序列的檢測結果圖

圖6 寧連監控視頻檢測效果圖(有陰影)
對比文獻[1-4]的實驗結果,由圖5,6可以看出,基于LBP紋理直方圖的背景建模算法可以很好地檢出運動目標,特別是對于有伴隨陰影的運動目標,可以較好地抑制陰影點.
3.2.2 檢測速度對比 利用文中算法對選用的兩組視頻進行測試,設備端圖像讀取時采用紋理存儲方式,前景圖像回傳主機時采用分片存儲方式,block大小選取為16×8.表2,3列出了在GPU和CPU上執行的實驗結果.
由表 2,3可以看出,采用GPU方式,相比CPU平臺有明顯加速效果,不同分辨率下加速比達到20~40x,LBP紋理直方圖背景建模算法的幀處理速率能夠達到40 f/s以上.主要原因一方面是由于GPU并發執行的架構,能夠同時處理多組數據;另一方面是由于針對該算法的特殊性和對稱性,文中在CUDA架構上充分利用了共享內存和多點訪問技術,更好地提高了系統性能.

表2 序列highwayII CPU與GPU檢測對比(320×240)

表3 寧連高速視頻CPU與GPU檢測對比(704×576)
針對復雜條件下背景建模這一視頻檢測領域的難點,文中提出了CUDA架構下的快速LBP直方圖紋理背景建模算法,同時針對具體應用場景改進了基本LBP算子.實驗結果表明,相比傳統的CPU實現,GPU方式在實時性上有明顯改善效果,不同分辨率下加速比在30x左右,幀處理速度達到40 f/s以上,很好兼顧地了實時性與可靠性.文中算法的GPU實現時采用的技術具有較強的通用性,可以應用于其他常見的背景建模算法,同時對于圖像處理領域類似算法的GPU實現也有一定借鑒作用.
[1] Wang H,Suter D.A revaluation of mixture of gaussian background modeling[C]//IEEE International Conference on Acoustics,Speech,and Signal Processing(ICASSP).Pennsylvania,USA,2005:1 017-1 020.
[2]Lee D.Effective gaussian mixture learning for video background subtraction[J].IEEE T ransactions on Pattern Analysis and M achine Intelligence,2005, 27(5):827-832.
[3]Kim K,Chalidabhongse T H,Harwood D,et al. Real-time foreground-background segmentation using codebook model[J].Real-Time Imaging,2005, 11(3):172-185.
[4]Heikkila M,Pietikainen M.A texture-based method for modeling the background and detecting moving objects[J].IEEE Transactions Pattern Analysis and Machine Intelligence,2006,28(4):657-662.
[5]Ojala T,Pietikainen M,Maenpaa T.Multiresolution gray-scale and rotation invariant texture classification with local binary patterns[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2002, 24(7):971-987.