(南京理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 南京 210094)
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,越來越多的領(lǐng)域都需要使用視頻技術(shù),視頻信息數(shù)據(jù)也在迅速地增長。與單個(gè)的圖像相比,視頻的數(shù)據(jù)量就顯得非常大了,這給它自身的存儲(chǔ)以及傳輸都帶來了一定的困難,因此,視頻壓縮技術(shù)在當(dāng)代社會(huì)是非常有必要的。目前也有很多相關(guān)的視頻壓縮標(biāo)準(zhǔn)[1]和視頻壓縮方法[2~3]被提出,但是基本上都是針對(duì)提升壓縮性能或時(shí)間速率的。
眾所周知,圖像、視頻通常都是由成像設(shè)備所獲取的,而且一般情況下,人們都認(rèn)為我們所處的大氣層是透明清晰的,成像設(shè)備也確實(shí)能夠獲取到相對(duì)比較清晰的圖像和視頻。然而,由于霧霾在人們?nèi)粘I钪性桨l(fā)常見,大氣中的懸浮顆粒物把光線散射,使得成像設(shè)備難以準(zhǔn)確地獲取圖像視頻的細(xì)節(jié)特征,霧霾視頻也給很多戶外視頻應(yīng)用的實(shí)現(xiàn)帶來了困難。因此,將霧霾視頻進(jìn)行去霧、改善其清晰度和能見度是具有重要意義的,同時(shí)也擁有廣闊的應(yīng)用場(chǎng)景。國內(nèi)外很多學(xué)者都對(duì)去霧算法進(jìn)行了研究,針對(duì)圖像或者針對(duì)視頻的去霧算法[4~6]都有,而且都獲得了一定的成果。
然而,考慮到在現(xiàn)有的視頻壓縮方法中,基本上沒有同時(shí)對(duì)霧霾視頻進(jìn)行去霧處理的,本文將視頻去霧和視頻壓縮相結(jié)合,避免在壓縮過程中把霧霾信息壓縮,提出了一種基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法,在減少視頻的存儲(chǔ)空間和傳輸帶寬的同時(shí),降低霧霾對(duì)視頻獲取、傳輸造成的不良影響。
在計(jì)算機(jī)視覺領(lǐng)域,通常使用以下模型來描述霧霾圖像:
其中,I(x)表示有霧的圖像,J(x)表示清晰無霧的圖像,A表示環(huán)境光,t(x)表示透射率,也可以說是沒有被傳輸介質(zhì)散射并最終到達(dá)成像設(shè)備的光,這也就是著名的大氣散射模型[7],根據(jù)該模型就可以推算出清晰的無霧圖像的計(jì)算公式:
在已經(jīng)獲得有霧圖像的情況下,只要再得到環(huán)境光和透射率就可以利用式(2)得到去霧后的圖像。
出于對(duì)視頻幀間相關(guān)性的考慮,文獻(xiàn)[8]提出了一種對(duì)透射率進(jìn)行優(yōu)化的方法。如圖1所示,每次讀取視頻序列中的當(dāng)前幀及其前后相鄰的各兩幀,以這五幀為單位,首先分別計(jì)算各自的透射率,然后將當(dāng)前幀平均劃分為若干個(gè)16*16的宏塊,再利用三步搜索法計(jì)算出當(dāng)前幀中宏塊與其他幀之間的運(yùn)動(dòng)矢量,接著利用這些運(yùn)動(dòng)矢量找到當(dāng)前透射率中宏塊在其他透射率圖中的對(duì)應(yīng)匹配塊,最后使用一個(gè)加權(quán)平均濾波器對(duì)透射率進(jìn)行幀間相關(guān)性優(yōu)化。
圖1 透射率優(yōu)化方法圖
H.264/AVC[1]是一種國際視頻壓縮標(biāo)準(zhǔn),它采用混合編碼的方式,輸入幀以宏塊為單位進(jìn)行編碼,其框架圖如圖2所示。對(duì)于一個(gè)視頻序列,主要有幀內(nèi)預(yù)測(cè)編碼和幀間預(yù)測(cè)編碼的方式,后者通過運(yùn)動(dòng)估計(jì)和運(yùn)動(dòng)補(bǔ)償?shù)玫疆?dāng)前塊的預(yù)測(cè)塊,之后,將當(dāng)前塊與預(yù)測(cè)塊相減可以產(chǎn)生殘差等一系列數(shù)據(jù),然后對(duì)殘差等數(shù)據(jù)進(jìn)行變換量化[9]產(chǎn)生一組系數(shù),在利用熵編碼[10]得到最終的碼流,此外,該框架中還存在一個(gè)環(huán)路濾波器[11],用于消除編碼產(chǎn)生的塊效應(yīng)。
圖2 H.264/AVC框架圖[1]
對(duì)于RGB圖像,He[12]提出了一種暗通道先驗(yàn)知識(shí):通常對(duì)于一幅無霧戶外圖像J(x),它的三個(gè)通道c∈{r,g,b} 中會(huì)存在一個(gè)通道的值是超級(jí)低的:
上式中的Jdark指的就是暗通道,Ω(x)是求解暗通道圖時(shí)進(jìn)行最小值濾波的窗口。通過將暗通道先驗(yàn)知識(shí)與大氣散射模型結(jié)合,可以計(jì)算出大氣散射模型中的透射率:
得到透射率后,再計(jì)算環(huán)境光值就能對(duì)無霧圖像求解了。文獻(xiàn)[12]中的做法是先在暗通道圖中按照亮度值的排序找出最亮的前百分之一個(gè)像素位置,再從原始圖像中找到相應(yīng)的點(diǎn),最后從中找出最亮的像素值作為環(huán)境光值。
由于視頻壓縮通常都是針對(duì)YUV視頻序列壓縮,為了更好地實(shí)現(xiàn)視頻去霧與視頻壓縮的計(jì)算資源共享,本文基于YUV顏色空間進(jìn)行去霧,因此不得不提到另外一種計(jì)算透射率的方法[13]:當(dāng)存在一幅無霧的YUV圖像,則該圖像的亮度分量中會(huì)有一部分像素的強(qiáng)度接近零。那么對(duì)該圖像,同樣也能采用局部最小值濾波得到亮度分量的暗通道圖。
與文獻(xiàn)[12]中的暗通道類似,可以得到亮度分量的透射率表達(dá)公式:
在式(6)和式(7)中,JY是J的亮度分量,IY是YUV圖像的亮度分量,Ω(x)同樣表示濾波窗口,ω是一個(gè)常量,用來保留圖像中少量的霧。
對(duì)于YUV圖像的環(huán)境光值,本文依舊從亮度分量著手進(jìn)行計(jì)算,首先從亮度分量暗通道圖中找出最亮的前百分之二個(gè)像素位置,接著在亮度分量圖中找到對(duì)應(yīng)的點(diǎn),最后計(jì)算這些像素點(diǎn)的平均值作為環(huán)境光值,如算法1所示。
在得到Y(jié)UV視頻序列每幀單獨(dú)的透射率之后,還需要對(duì)相鄰?fù)干渎蔬M(jìn)行一致性優(yōu)化,本文對(duì)已有的基于幀間相關(guān)性的透射率優(yōu)化方法[8]進(jìn)行了改進(jìn),其框架圖如圖3所示。得到透射率之后首先利用引導(dǎo)濾波對(duì)其細(xì)化,讓它擁有與原始視頻序列相近的紋理細(xì)節(jié),與此同時(shí),還利用運(yùn)動(dòng)估計(jì)得到原始視頻相鄰幀之間的運(yùn)動(dòng)矢量,再利用這些運(yùn)動(dòng)矢量在透射率序列中尋找到相應(yīng)的匹配塊,最后進(jìn)行加權(quán)平均濾波得到優(yōu)化的透射率圖。
圖3 透射率一致性優(yōu)化的框架圖
與已有方法相同的是:兩種方法都利用連續(xù)的五幀來進(jìn)行加權(quán)平均濾波,給透射率t(x)都分別加上權(quán)重值λ:
考慮到相鄰幀之間的相關(guān)性,也為了保證權(quán)重值的分布符合高斯分布,本文將權(quán)重值分別設(shè)為
與已有方法不同的是:為了更好地實(shí)現(xiàn)視頻去霧與視頻編碼的結(jié)合,本文還在運(yùn)動(dòng)矢量的計(jì)算方法、宏塊的劃分模式上進(jìn)行了相應(yīng)的改進(jìn),并在以下章節(jié)進(jìn)行介紹。
在對(duì)透射率進(jìn)行優(yōu)化的時(shí)候,本文主要是對(duì)相鄰幀進(jìn)行運(yùn)動(dòng)估計(jì)得到相應(yīng)的信息,而視頻壓縮的關(guān)鍵技術(shù)也是運(yùn)動(dòng)估計(jì),基于這一共同點(diǎn),本文將兩者結(jié)合起來,提出了一種基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法,在整個(gè)視頻去霧和視頻壓縮的過程中,僅進(jìn)行一次運(yùn)動(dòng)估計(jì),而非在去霧時(shí)和編碼時(shí)都各自分開進(jìn)行運(yùn)動(dòng)估計(jì),文本框架大致如圖4所示。
圖4 基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法框架圖
運(yùn)動(dòng)估計(jì)(Motion Estimation,ME)[14]指的是得到運(yùn)動(dòng)矢量的一個(gè)過程,如圖5所示,首先需要將每一個(gè)當(dāng)前幀分成很多宏塊,然后利用塊匹配算法找到當(dāng)前宏塊的最佳匹配塊,兩者之間的相對(duì)位移就是運(yùn)動(dòng)矢量。常用的塊匹配算法主要有全搜索法(Full Search,F(xiàn)S)[15]以及三步搜索法(Three Step Search,TSS)[16]等。
圖5 運(yùn)動(dòng)估計(jì)示意圖
為了實(shí)現(xiàn)運(yùn)動(dòng)估計(jì)共享,本文主要是針對(duì)運(yùn)動(dòng)估計(jì)過程中的運(yùn)動(dòng)矢量、宏塊劃分模式進(jìn)行共享,將這些計(jì)算資源同時(shí)用于視頻去霧進(jìn)行透射率幀間一致性優(yōu)化以及視頻壓縮進(jìn)行幀間預(yù)測(cè),做到保持兩方面不僅運(yùn)動(dòng)矢量一致而且宏塊劃分模式也一致。
3.2.1 運(yùn)動(dòng)矢量共享
所謂運(yùn)動(dòng)矢量共享,在本章節(jié)中主要是指將同一運(yùn)動(dòng)矢量分別用于在透射率圖中尋找相應(yīng)的最佳匹配塊以及用于視頻壓縮的幀間預(yù)測(cè),而非兩者采用不同的運(yùn)動(dòng)矢量。而談到運(yùn)動(dòng)矢量,就不得不提到運(yùn)動(dòng)估計(jì)的塊匹配算法[17],通常,如果是考慮計(jì)算復(fù)雜度或者時(shí)間開銷,被選擇的會(huì)是快速匹配算法,文獻(xiàn)[8]中采用的就是三步搜索法,該算法雖然應(yīng)用較為廣泛,但是也存在一定的缺點(diǎn),尤其是在全局性方面的考慮。
三步搜索法的每一個(gè)步驟都僅僅考慮了當(dāng)前原點(diǎn)及其周圍的八個(gè)搜索點(diǎn),且步長會(huì)逐漸減半直至減為1,這就意味著:如果是在一個(gè)[-7,+7]的搜索范圍內(nèi)進(jìn)行塊匹配,那么能夠匹配到的位置只有25個(gè),這僅僅只占了全部225個(gè)匹配位置的九分之一,另外兩百個(gè)位置根本沒有進(jìn)行匹配,盡管其中可能包含了真實(shí)的最佳匹配塊。
圖6 全搜索法示意圖
出于對(duì)全局最佳匹配塊的考慮,本文選擇一種全局的塊匹配算法,遍歷搜索范圍包含的全部搜索位置,比較每個(gè)位置的匹配度,選擇全局最優(yōu)的運(yùn)動(dòng)矢量,這種算法被稱為全搜索法,在搜索過程中按照螺旋式從原點(diǎn)開始搜索,如圖6所示。如果是在[-7,+7]的搜索范圍內(nèi),能夠匹配到全部225個(gè)位置,找到全局內(nèi)最好的結(jié)果。
3.2.2 宏塊劃分模式共享
所謂宏塊劃分模式共享,在本章節(jié)中主要是指在運(yùn)動(dòng)估計(jì)的過程中,對(duì)透射率進(jìn)行優(yōu)化以及對(duì)視頻壓縮進(jìn)行幀間預(yù)測(cè)的時(shí)候,采用相同的宏塊劃分模式。在已有的幀間相關(guān)性透射率優(yōu)化方法[8]中,每一個(gè)當(dāng)前幀都采用了一致的劃分方式,得到的劃分結(jié)果都是若干個(gè)16*16的宏塊,然而,這種劃分方式比較適合紋理很少以及相對(duì)平滑的圖像;考慮到實(shí)際上很多真實(shí)的圖像在紋理上是比較復(fù)雜的,僅僅在一小塊區(qū)域中也會(huì)包含多個(gè)目標(biāo)物體或場(chǎng)景,因此,很有必要對(duì)圖像中的宏塊進(jìn)行多種不同方式的劃分,此外,采取多種多樣的宏塊劃分模式對(duì)實(shí)現(xiàn)視頻去霧和視頻壓縮之間的宏塊劃分模式共享也是有好處的。
H.264/AVC標(biāo)準(zhǔn)將每一個(gè)16*16的宏塊都被劃分為了16*16、16*8、8*16及8*8等類型的小塊,對(duì)于8*8的亞宏塊,又進(jìn)一步劃分成了8*8、8*4、4*8及4*4等類型的更小的塊,如圖7所示。
圖7 宏塊劃分模式示意圖
本文在進(jìn)行透射率優(yōu)化的時(shí)候,也采用同樣類型的劃分模式,如此一來,既可以實(shí)現(xiàn)視頻去霧與視頻編碼的宏塊劃分模式共享,又能將原本16*16的宏塊劃分為多個(gè)小塊,得到包含圖8在內(nèi)的多種劃分結(jié)果。
圖8 宏塊劃分的一種結(jié)果
首先為了比較本文改進(jìn)的去霧算法與其他已有算法的去霧效果,針對(duì)YUV視頻序列進(jìn)行了以下實(shí)驗(yàn),并對(duì)去霧后的亮度分量結(jié)果進(jìn)行展示。
實(shí)驗(yàn)一:比較去霧后視頻的連續(xù)性。比較的方法有:1)每幀單獨(dú)進(jìn)行去霧的方法;2)本文改進(jìn)的去霧方法。實(shí)驗(yàn)結(jié)果如圖9所示,其中從左到右第一列是原始的視頻序列之中連續(xù)的四幀,第二列是進(jìn)行單幀去霧的結(jié)果,第三列是文本去霧方法的結(jié)果。
在圖9的實(shí)驗(yàn)結(jié)果中,原始的視頻序列在亮度變化方面并不明顯,而對(duì)每幀單獨(dú)去霧后,各幀之間在亮度方面發(fā)生了一些變化,比起第二幀和第四幀,第一幀和第三幀在白色框部分的亮度要暗一些,而本文方法的結(jié)果并沒有出現(xiàn)這種情況,這也就表明:利用連續(xù)的五幀對(duì)當(dāng)前幀的透射率進(jìn)行優(yōu)化可以使去霧后的視頻序列保持良好的連續(xù)性。
圖9 實(shí)驗(yàn)一去霧結(jié)果對(duì)比
除了比較上述方法在亮度方面的連續(xù)性,本文還進(jìn)行了實(shí)驗(yàn)二:比較去霧后視頻的清晰度。比較的方法有:1)每幀單獨(dú)進(jìn)行去霧的方法;2)文獻(xiàn)[8]將宏塊平均劃分并采用三步搜索法的方法;3)本文去霧方法。實(shí)驗(yàn)結(jié)果如圖10所示,其中從左到右第一列是視頻序列之中的一幀,第二列是單幀去霧的結(jié)果,第三列是文獻(xiàn)[8]的去霧結(jié)果,第四列是本文方法的去霧結(jié)果。每列的第一行是完整圖像,第二行是圖像的局部放大圖。
圖10 實(shí)驗(yàn)二去霧結(jié)果對(duì)比
在不考慮連續(xù)性的條件下,我們認(rèn)為對(duì)于某一幀而言,單獨(dú)進(jìn)行去霧的結(jié)果是最清晰的。在圖10的實(shí)驗(yàn)結(jié)果中,通過各結(jié)果的局部放大圖可以看到,每幀單獨(dú)去霧方法和本文方法的去霧結(jié)果比較清晰,而文獻(xiàn)[8]的去霧結(jié)果有點(diǎn)粗糙。這也就表明:本文用全搜索算法得到全局最優(yōu)的運(yùn)動(dòng)矢量,并將宏塊劃分為多種類型的小塊,能找到全局最佳的匹配塊,對(duì)透射率優(yōu)化后也能得到比較清晰的去霧結(jié)果。
鑒于本文主要是將視頻去霧與視頻壓縮相結(jié)合提出了一種基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法,在運(yùn)動(dòng)矢量共享和宏塊劃分模式共享方面,可以通過考慮不同的去霧效果或者壓縮性能得到不一樣的結(jié)果,為了體現(xiàn)表示壓縮性能的率失真曲線對(duì)比效果,本文選擇了三種方案,采取相同的去霧算法和H.264/AVC編碼框架進(jìn)行了實(shí)驗(yàn):方案一只考慮去霧效果,方案二只考慮壓縮性能,方案三同時(shí)考慮去霧效果和壓縮性能,率失真曲線對(duì)比如圖11所示。從圖11可以看出,同時(shí)考慮去霧效果和壓縮性能得到的率失真曲線比較居中且接近方案二僅考慮壓縮性能的率失真曲線,這表示本文基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法也能獲得較好的壓縮性能。
圖11 率失真曲線對(duì)比圖
本文提出了一種基于運(yùn)動(dòng)估計(jì)共享的霧霾視頻壓縮方法,不僅可以對(duì)霧霾視頻進(jìn)行去霧,還能夠同時(shí)實(shí)現(xiàn)視頻的壓縮;本文還對(duì)已有的去霧算法進(jìn)行了一定的改進(jìn),不僅可以維持去霧視頻的幀間連續(xù)性,還能夠獲得清晰的去霧效果,最重要的是對(duì)視頻去霧和視頻壓縮的有效結(jié)合十分有利。