??? 摘 要: 分析了噪聲對視頻圖像壓縮速度的影響及傳統(tǒng)去噪" title="去噪">去噪方法的性能缺陷,提出了使用二次殘差算法來改進(jìn)由于噪聲引起誤判的思想,以提高壓縮速度。實驗結(jié)果說明,該方法能有效地減少由噪聲帶來的誤判,在壓縮速度上也較傳統(tǒng)方法有一定的改善。
??? 關(guān)鍵詞: 視頻圖像? 壓縮速度? 殘差算法
?
??? 隨著全世界安防事業(yè)的迅猛發(fā)展,視頻監(jiān)控" title="視頻監(jiān)控">視頻監(jiān)控系統(tǒng)的應(yīng)用越來越廣泛,視頻卡的需求也隨之增加。由于原始視頻數(shù)據(jù)量很大,直接對其進(jìn)行存儲與傳輸實現(xiàn)起來比較困難。故在保證圖像質(zhì)量的前提下,減少圖像的數(shù)量,提高壓縮速度將成為研究的重點。
??? 視頻圖像之所以可以被壓縮,是因為它們存在著很多數(shù)據(jù)冗余[1]:視覺冗余、空間冗余、時間冗余以及編碼冗余[2-3]。在視頻壓縮過程中,最重要的是減少視頻的時間冗余,即同一像素點在不同時刻具有很大的相關(guān)性,稱為時間上的冗余。由于視頻是一系列的圖像序列,很多時候前一幀與后一幀的差別并不大,如果每一幀圖像都傳送將會存在很多冗余。故對有運(yùn)動的塊進(jìn)行編碼傳輸,忽略沒有運(yùn)動的塊,就可以達(dá)到比較高的壓縮比率。
??? 在判斷宏塊" title="宏塊">宏塊是否有運(yùn)動的時候,通常采用殘差計算,當(dāng)結(jié)果超過閾值時就進(jìn)行后續(xù)運(yùn)算編碼。但是在視頻監(jiān)控中的視頻壓縮與通常的影片視頻壓縮有很大的不同,在實際使用中會有很多圖像噪聲。而噪聲的引入會對判斷宏塊是否有運(yùn)動造成影響,增加了許多額外的運(yùn)動向量估計,減緩了壓縮速度。本文針對如何減少圖像噪聲帶來的影響,提出了一種改進(jìn)的殘差計算方法,有效地優(yōu)化了視頻壓縮速度。
1 殘差算法改進(jìn)的原因
1.1 圖像的噪聲
??? 在視頻監(jiān)控系統(tǒng)中,攝像頭中的CCD感光器件將光信號轉(zhuǎn)換成電信號形成了圖像信號,但是在這個過程中卻不可避免地引發(fā)了噪聲問題。圖像中的噪點一般是由CCD噪聲形成的,主要有散粒噪聲、暗電流噪聲、轉(zhuǎn)移噪聲。當(dāng)CCD在低光照、低反差下應(yīng)用時,散粒噪聲成為主要的噪聲源,它是CCD敏感器件所固有的噪聲,不能被后續(xù)電路所抑制或抵消[4]。因此,在視頻監(jiān)控實際使用過程中,圖像的噪點主要是由CCD形成的散粒噪聲所引起的。
??? 圖像去除白噪聲" title="白噪聲">白噪聲的方法已經(jīng)有很多經(jīng)典的算法,如平均濾波、中值濾波以及頻域濾波等。但是傳統(tǒng)的去噪方法不能完全適用,主要原因:(1)去噪算法本身需要增加很多運(yùn)算量,因此很難加快壓縮速度。(2)由于白噪聲的隨機(jī)性,即使運(yùn)用去噪算法,后兩幀所得的結(jié)果不會一致,還是會造成前后幀的殘差過大。(3)對于需要傳輸?shù)膱D像或者圖像的某一部分,壓縮算法都會進(jìn)行離散余弦變換DCT(Discrete Cosine Transform),并且對高頻分量的量化步長會比較大,這也將影響圖像的去噪效果。
??? 因此傳統(tǒng)的去噪方法不會提高視頻壓縮的速度,故達(dá)不到所要求的目的。
1.2 殘差算法
??? 在視頻壓縮的過程中,最重要的工作是消除時間上的冗余性,即盡量去除幀與幀之間的冗余。對于XVID編碼格式,幀分成VOP_I與VOP_P。VOP_I采用幀間編碼模式,VOP_P采用幀內(nèi)編碼模式。幀內(nèi)編碼采用的是類似于JPEG壓縮算法即將一幀圖像傳輸過去,而幀間編碼是將兩幀之間的差值傳送過去。在幀間編碼的過程中,首先對圖像分成16×16的宏塊,然后判斷該宏塊是否相對于前一幀運(yùn)動,如果沒有運(yùn)動,則設(shè)置成SKIP模式不進(jìn)行編碼;如果視頻能夠盡可能地使用幀間編碼方式,同時又有許多的宏塊是SKIP模式的,則可以不進(jìn)行最為耗時的運(yùn)動估計算法" title="估計算法">估計算法,而視頻流將會比較小,編碼的速度也會大大增加。
??? 在幀間編碼方式上,判斷一幀圖像是否有運(yùn)動,需要將其編碼成SKIP模式,主要是與前一幀圖像進(jìn)行如下殘差計算:
???
??? 由前面的分析可知,圖像的噪點主要是由散粒噪聲所引起的,特別是在光線不足的情況下噪點越發(fā)明顯。由于噪點的引入使得原本沒有變化的兩幀圖像計算得到的殘差SAD很大,超過了判斷閾值,被誤判為運(yùn)動塊,進(jìn)行了非常耗時的DCT或者運(yùn)動向量估計算法,造成了視頻壓縮速度的降低以及傳輸碼流的增大。為此,提出了對SAD殘差算法的改進(jìn)。
2 殘差SAD算法的改進(jìn)
??? 由于噪點的引入,使得原有SAD算法判斷圖像運(yùn)動與否的過程出現(xiàn)了很多誤判,為了減少這種誤判提出了對原有SAD算法的改進(jìn),增加了二次殘差判斷SAD′。二次計算殘差的SAD′算法如下:
???
??? 式(2)與式(1)原有的SAD相比只是將取絕對值放到了對所有點殘差求和之后。其實驗結(jié)果:兩幀沒有變化的圖像如圖1所示,將圖1中圖像的每個像素相減求差后得到結(jié)果如圖2所示。
?
?
??? 由圖2可以看出,差值基本符合白噪聲的規(guī)律。SAD算法是將每個差值取絕對值后累加得到的SAD(MBM×N),其值將遠(yuǎn)遠(yuǎn)大于運(yùn)動閾值。而在本文提出的改進(jìn)SAD′算法中是將每個差值直接累加后取絕對值。由于白噪聲的統(tǒng)計特性,所得到的結(jié)果SAD′(MBM×N)非常接近于0。即式(2)可以等效于式(3)。
???
式中,Y(x,y)為當(dāng)前幀圖像,Ypre(x,y)為前一幀圖像,N(x,y)為當(dāng)前幀散粒噪聲,Npre(x,y)為前一幀散粒噪聲。由于圖像未運(yùn)動Y(x,y)=Y(jié)pre(x,y),又因為白噪聲的統(tǒng)計特性因此SAD′(MBM×N)理論值為0,與實驗結(jié)果相吻合。
??? 在運(yùn)算殘差過程中,如果SAD值大大超過閾值,則需要進(jìn)行二次閾值判斷SAD′;如果是噪聲引起的殘差值,則可以很有效地避免誤判,而不需要進(jìn)行耗時的運(yùn)動向量估計算法。
3 改進(jìn)殘差算法的應(yīng)用
??? 本文選用MPGE-4編碼器作為視頻編碼器,并采用源碼開發(fā)的XVID壓縮格式。為了提高壓縮速度,選用XVID中的single pass編碼方式[5]。
3.1 MPGE-4編碼器工作流程
??? 首先判斷采用幀內(nèi)編碼模式還是幀間編碼模式,即判斷是否對整一幅圖像進(jìn)行編碼還是對某些部分進(jìn)行編碼。若采用幀內(nèi)編碼其原理如JPEG算法;若采用幀間編碼,則需要將圖像分塊判斷該塊是否運(yùn)動,通過殘差計算與前一幀圖像進(jìn)行比較。如果是靜止塊則設(shè)置成SKIP模式進(jìn)行簡單的處理;如果是運(yùn)動塊則進(jìn)行運(yùn)動向量估計。編碼器的工作流程如圖3所示。
?
3.2 二次殘差算法的驗證
??? 在整個編碼流程中有兩處用到了殘差算法:
??? (1)在判斷是采用幀間編碼還是幀內(nèi)編碼時調(diào)用了MEanalysis函數(shù)。MEanalysis的原理是:如果某個宏塊的殘差的sad大于該宏塊的平均值的偏離,則使用intra方式;否則使用inter方式,然后對這些宏塊進(jìn)行統(tǒng)計,得到整幀的編碼方式,即if(sSAD>IntraThresh2) return I_VOP;//IntraThresh=90。
??? (2)在采用幀間編碼確定SKIP模塊時,每個宏塊調(diào)用sad16v計算本宏塊與參考幀對應(yīng)位置的宏塊的亮度的殘差,將其保存在相應(yīng)的數(shù)組中;然后調(diào)用sad8兩次,分別計算u分量和v分量的殘差,也保存在相應(yīng)的數(shù)組中。如果該宏塊的量化差值為0,并且所記錄的最大亮度塊殘差沒有超過SKIP模式的閾值,則使用xvid_me_SkipDecisionP確認(rèn)符合SKIP模式。即:
??? if(iSAD>=BFRAME_SKIP_THRESHHOLD?鄢pMB->quant)
??? { bSkip=0;/?鄢could not SKIP?鄢/}//BFRAME_SKIP_THRESHHOLD=30
?? ?通過上述函數(shù)分析可知,在幀內(nèi)編碼模式和幀間編碼的確定過程中,都是通過計算殘差SAD得到的,而且在判斷宏塊是否為SKIP模式時還需要通過Y、U、V三次計算殘差。
??? 在本應(yīng)用中將上述兩個判斷引入二次殘差算法計算SAD′,同時加大了閾值門限IntraThresh和BFRAME_SKIP_THRESHHOLD(分別增加了10%),并分別設(shè)為99和33,并且在判斷宏塊是否為SKIP模式時只對亮度信號進(jìn)行殘差運(yùn)算忽略色度信號,達(dá)到了一定效果。其編碼器速度優(yōu)化結(jié)果如表1所示。
?
??? 表1是在低照度、分辨率為360×288的情況下得到的結(jié)果。從表中數(shù)據(jù)可以看出,改進(jìn)以后壓縮速度提高了40%以上,因此,在保證視頻顯示效果的同時,增加二次殘差計算能夠大大減少誤判,可有效提高壓縮速度。
??? 在保證圖像不失真的前提下,提高壓縮速度是當(dāng)前視頻編碼的熱點問題。本文在原有殘差算法的基礎(chǔ)上,給出了一種適用于MPEG環(huán)境的二次殘差算法。與傳統(tǒng)算法相比,該方法可以更有效地避免由于噪聲引起的運(yùn)動塊誤判。應(yīng)用表明,改進(jìn)后的算法可以明顯提高壓縮速度,有效解決由CCD噪聲引起的運(yùn)動誤判問題。
參考文獻(xiàn)
[1] 薛文通,宋建社,袁禮海,等.圖像壓縮技術(shù)的現(xiàn)狀與發(fā)展.計算機(jī)工程與應(yīng)用,2003,(2).
[2] TORRES L,KUNT M.Video coding:the second generation?approach[M].Englewood Cliffs,NJ:Kluwer,1996.
[3] SALEMBIER P,TORRES L,MEYER F,et al.Region-based video coding using mathematical morphology[J].Proc.IEEE,1995,83(6):843-857.
[4] 謝小權(quán).低照度CCD圖像采集及噪聲預(yù)處理.電子技術(shù)應(yīng)用,2000,26(8):11-12.
[5] 王文慶,毛文林,張利飛.基于MPEG-4的視頻監(jiān)控系統(tǒng)模型及實現(xiàn).計算機(jī)工程,2006,(11).