王子曄 封化民 劉 飚 黃嘯晨 魚海洋 葛 鴿
1(西安電子科技大學(xué)通信工程學(xué)院 陜西 西安 710071)2(北京電子科技學(xué)院 北京 100070)
信息隱藏技術(shù)是指利用人類感知及數(shù)字媒體的冗余,將特定的秘密信息嵌入到指定的文本、圖像、音頻或視頻等數(shù)字化載體中。視頻資源是現(xiàn)今網(wǎng)絡(luò)上較為常見的一種多媒體資源,相比于圖像音頻等信息載體不但自身數(shù)據(jù)量大,而且具有更多的信息冗余。利用視頻作為信息隱藏載體數(shù)據(jù)可以實現(xiàn)較大的信息隱藏容量。隨著當(dāng)下視頻編碼技術(shù)日益革新,處理高清乃至超清分辨率視頻的需求日益增加,適用于處理高清視頻的高效率視頻編碼(H.265/HEVC)成為了當(dāng)下研究熱點。與此同時,基于H.265/HEVC視頻信息隱藏技術(shù)具有極大的開發(fā)價值,國內(nèi)外研究學(xué)者也相繼提出基于H.265/HEVC的視頻信息隱藏算法。
根據(jù)視頻編碼的階段,現(xiàn)有基于H.265/HEVC視頻信息隱藏算法主要分為三類:(1) 基于預(yù)測階段的信息隱藏,其中包括幀內(nèi)預(yù)測和幀間預(yù)測,通過調(diào)整在預(yù)測過程中的相關(guān)參數(shù)可以完成秘密信息的嵌入;(2) 為基于變換與量化過程的信息隱藏,通過改變量化系數(shù)或整數(shù)變換后的DCT系數(shù)進(jìn)行信息隱藏;(3) 基于熵編碼的信息隱藏,利用熵編碼的性質(zhì)進(jìn)行信息隱藏。
在基于幀內(nèi)預(yù)測的信息隱藏算法中,王家驥等[1]在總結(jié)H.264/AVC中基于幀內(nèi)預(yù)測的信息隱藏算法的基礎(chǔ)上,選取紋理復(fù)雜度較高的4×4亮度塊作為嵌入?yún)^(qū)域,建立拉格朗日率失真模型,選取對應(yīng)的幀內(nèi)編碼模式進(jìn)行嵌入,算法對視頻質(zhì)量影響較小。陳甬娜等[2]將相鄰的一對4×4編碼單元的預(yù)測模式編成一組,并改進(jìn)菱形編碼算法,將其應(yīng)用于模式調(diào)制和信息嵌入,算法在視頻碼率上升不明顯的情況下,較大地提升了嵌入容量。在基于幀間預(yù)測的信息隱藏算法中,李松斌等[3]結(jié)合HEVC編碼標(biāo)準(zhǔn)的特點,針對運動向量集合與對應(yīng)空間中點的性質(zhì)關(guān)系,建立映射,在此基礎(chǔ)上通過修改映射值完成信息隱藏,算法具有較高的嵌入率。Van等[4]通過修改運動向量差(MVD)和變換系數(shù)的語法元素進(jìn)行秘密信息的嵌入,算法具有低復(fù)雜度的優(yōu)點。
在基于變換量化的信息隱藏算法中,Swati等[5]通過修改量化變換系數(shù)(QTC)進(jìn)行隱秘信息的嵌入,算法對視頻質(zhì)量影響較小但未考慮魯棒性問題。Elrowayati等[6]提出了一種基于BCH校正碼技術(shù)的信息隱藏技術(shù),并選擇量化DCT/DST系數(shù)作為嵌入目標(biāo),算法具有較高的魯棒性。
在基于熵編碼的信息隱藏算法中,Jiang等[7]選擇基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC)中二進(jìn)制化后的運動向量差語法元素作為嵌入目標(biāo),將信息嵌入到編碼末位中,信息嵌入沒有使編碼視頻產(chǎn)生比特率變化,但算法嵌入效率較低。此外,還有一些基于H.264/AVC編碼標(biāo)準(zhǔn)的熵編碼信息隱藏算法。Zou等[8]同樣選擇CABAC中二進(jìn)制化后的MVD語法元素作為嵌入載體。Xu等[9]選擇基于上下文的可變長度編碼(CAVLC)作為嵌入目標(biāo),通過調(diào)制拖尾系數(shù)完成信息嵌入,但算法對視頻質(zhì)量影響較大。
在上述算法的基礎(chǔ)上,本文提出一種基于CABAC的HEVC信息隱藏算法,通過分析熵編碼過程中指數(shù)哥倫布編碼后綴與語法元素值的相關(guān)性,闡述使用指數(shù)哥倫布編碼后綴作為信息嵌入載體的可行性,并選擇語法元素abs_mvd_minus2經(jīng)過一階指數(shù)哥倫布編碼產(chǎn)生的后綴作為嵌入載體,結(jié)合矩陣編碼修改后綴值完成秘密信息的嵌入。實驗結(jié)果表明,算法對信息嵌入后視頻編碼重建圖像的主客觀質(zhì)量基本沒有影響,在減少了載體修改量的同時,得到了較大的嵌入容量和較高的嵌入效率。
熵編碼是一種利用信源隨機(jī)過程統(tǒng)計特性的無損壓縮編碼方式,其位于編碼過程的最后一步,將視頻編碼過程中的語法元素映射成二進(jìn)制形式寫入比特流中。H.264/AVC采用基于上下文的可變長度編碼和CABAC兩種熵編碼方法,而H.265/HEVC采用唯一熵編碼方法CABAC[10]。相較于H.264編碼標(biāo)準(zhǔn),H.265中的CABAC在部分技術(shù)上進(jìn)行了改進(jìn),總體架構(gòu)并沒有變化。CABAC編碼流程主要分為三步:語法元素二進(jìn)制化、上下文建模與概率的自適應(yīng)更新和二進(jìn)制算術(shù)編碼。
二進(jìn)制化是指將預(yù)測、變換、量化階段產(chǎn)生的一系列語法元素映射為二進(jìn)制符號(bin)。與H.264相似,H.265中采用一元碼(U)、截斷一元碼(TR)、K階指數(shù)哥倫布編碼(EGK)和定長碼(FL)這幾種編碼方式完成語法元素的二進(jìn)制過程,具體取決于語法元素的類型和概率分布的特征[11]。實際編碼過程中,大部分語法元素的值為二進(jìn)制,不需要經(jīng)過二進(jìn)制化的步驟便可直接進(jìn)行算術(shù)編碼。
上下文建模為二進(jìn)制化后的語法元素值的每一個bin提供條件概率分布的估計[12],并通過之前處理的二進(jìn)制符號集合進(jìn)行概率模型的自適應(yīng)更新。上下文建模涉及到兩個主要參數(shù):MPS(最大概率符號)和δ(概率的狀態(tài)索引)。通過變量MPS和δ的值可以確定上下文模型的狀態(tài)以及更新方式。
算數(shù)編碼是一種基于區(qū)間的遞歸劃分的熵編碼方法[13]。首先將輸入符號映射到[0,1)區(qū)間,再根據(jù)符號概率劃分兩個子區(qū)間并根據(jù)輸入符號選取其中一個,不斷遞歸得到小區(qū)間,最后選取區(qū)間內(nèi)任意小數(shù)作為最終的編碼輸出。在二進(jìn)制算術(shù)編碼中,輸入符號僅有0和1兩種。在CABAC編碼過程中,根據(jù)編碼概率可將編碼分為兩類:常規(guī)編碼(概率由上下文模型得到),旁路編碼(等概率二進(jìn)制算術(shù)編碼)。
在常規(guī)編碼中,算術(shù)編碼的編碼概率通過語法元素的上下文建模得到,并根據(jù)實際編碼值進(jìn)行更新。上下文概率模型在影響二進(jìn)制化后的語法元素的每個bin的同時,也會由于bin的改變而進(jìn)行自適應(yīng)更新。通過修改或插入bin值進(jìn)行信息隱藏會對同種語法元素編碼過程產(chǎn)生較大的影響[14]。因此難以通過修改常規(guī)編碼中的二進(jìn)制化后的語法元素值完成信息隱藏。而在旁路編碼中,算術(shù)編碼并未使用上下文模型與概率的自適應(yīng)更新,所有bin均以0.5的概率進(jìn)行編碼,二進(jìn)制化后的語法元素相互之間不會產(chǎn)生影響,因此可以選擇使用旁路編碼的語法元素完成信息嵌入。根據(jù)H.265標(biāo)準(zhǔn)[15],MVD的語法元素由前綴和后綴級聯(lián)而成,其后綴即MVD值大于等于2的部分用語法元素abs_mvd_minus2表示,采用旁路編碼模式完成熵編碼。文獻(xiàn)[7]指出,除了運動向量殘差的后綴值以外,大部分可修改的語法元素為flag類,用于表示編碼過程中的各類編碼標(biāo)志,強(qiáng)行修改會導(dǎo)致解碼器無法正常解碼。因此本文參照文獻(xiàn)[7],選擇二進(jìn)制化的MVD后綴(abs_mvd_minus2)作為嵌入?yún)^(qū)域。
語法元素abs_mvd_minus2采用1階指數(shù)哥倫布編碼(EG1)完成二進(jìn)制化。指數(shù)哥倫布編碼分為前綴和后綴,在H.265中,階數(shù)大于0的指數(shù)哥倫布編碼結(jié)構(gòu)為[M個1][0][INFO],其中:
(1)
INFO=X+2K(1-2M)
(2)
編碼長度:
CODELEN=2M+K+1
(3)
后綴長度:
INFOLEN=M+K
(4)
式中:X表示非二進(jìn)制無符號整數(shù)值;K表示哥倫布編碼的階數(shù)。
abs_mvd_minus2二進(jìn)制化后的編碼值如表1所示,括號內(nèi)為EG1編碼的后綴INFO。由式(1)、式(2)、式(4)可知,在編碼階數(shù)K固定的情況下,INFO值僅與語法元素數(shù)值X的大小有關(guān),但前綴M的編碼長度會影響后綴INFO的長度。因此,在保持INFO比特位數(shù)不變的情況下,通過修改INFO值進(jìn)行秘密信息的嵌入,在解碼時只會使解析出的語法元素的數(shù)值大小產(chǎn)生變化,不會產(chǎn)生EG1編碼前綴M與后綴INFO長度不對應(yīng)的情況,語法元素依舊可以被成功解析。與此同時,由于語法元素abs_mvd_minus2后續(xù)采用旁路編碼,每個二進(jìn)制符號以0.5的概率進(jìn)行獨立編碼,不采用上下文模型進(jìn)行概率更新,對其中單個EG1編碼進(jìn)行修改不會影響其他語法元素的編解碼過程。相對于傳統(tǒng)算法選擇的編碼末位[7],EG1編碼的后綴位具有更大的嵌入容量。因此本文算法選擇語法元素abs_mvd_minus2經(jīng)過EG1編碼后的后綴INFO作為嵌入載體,通過對INFO進(jìn)行比特位替換修改嵌入完成信息隱藏。
表1 語法元素值及其EGK編碼值
矩陣編碼因為其較高的嵌入效率和較大的嵌入容量,在信息隱藏領(lǐng)域得到廣泛應(yīng)用。文獻(xiàn)[16]首先提出矩陣編碼的概念,文獻(xiàn)[17]改進(jìn)了矩陣編碼并應(yīng)用于離散余弦變換(DCT)后的交流系數(shù)中,通過修改編碼末位完成多位比特的信息嵌入,相較于同類實驗顯著提升了秘密信息的嵌入數(shù)量,并減少了載體修改量。矩陣編碼表現(xiàn)為元組(dmax,n,k),n=2k-1,意義為通過修改n比特載體信息中的dmax比特,完成最多k比特信息的嵌入。α=a1a2…an和β=b1b2…bk分別表示嵌入載體與待嵌入的秘密信息,具體嵌入步驟如下:
(1) 計算散列值:
(5)
(2) 計算嵌入位置:
s=f(α)⊕β
(6)
(3) 修改嵌入載體:
(7)
本文算法選擇語法元素abs_mvd_minus2經(jīng)過EG1編碼產(chǎn)生的后綴INFO作為嵌入載體,結(jié)合F5矩陣編碼方法,使用元組(dmax,n,k)=(1,3,2),通過修改載體信息中3比特位中的1位,完成2個比特的信息嵌入,在保證了嵌入容量的同時,減少了對載體的修改量,使算法具有較高的嵌入效率。
算法采取二次編碼的方式,信息嵌入在CABAC熵編碼部分完成,具體步驟如下:
(1) 為提高算法安全性,本文使用Logistic混沌序列對秘密信息進(jìn)行加密預(yù)處理,生成2n比特待嵌入二進(jìn)制序列M=(m1,m2,…,m2n),并將每兩個二進(jìn)制字符組成二進(jìn)制字符串Mi=m1im2i。
(2) 進(jìn)行第一次編碼,提取所有語法元素abs_mvd_minus2經(jīng)過EG1編碼產(chǎn)生的后綴INFO的全部比特位,并保存為二進(jìn)制字符串α=a1a2…al。
(4) 重復(fù)第3步,直至所有待嵌入信息嵌入完畢,得到修改后的二進(jìn)制字符串α′。
(5) 進(jìn)行第二次編碼,將當(dāng)前進(jìn)行熵編碼的語法元素abs_mvd_minus2經(jīng)過EG1編碼得到的后綴INFO的比特位數(shù)記為n,按順序讀取α′中n比特二進(jìn)制字符并替換該INFO,將修改過的編碼重新寫入碼流進(jìn)行旁路編碼。重復(fù)該步驟,直至字符串α′替換完畢。
算法信息提取過程在熵解碼部分完成,具體步驟如下:
(1) 提取所有語法元素abs_mvd_minus2經(jīng)過EG1編碼產(chǎn)生的后綴INFO部分,并保存為二進(jìn)制字符串β=b1b2…bm。
(3) 重復(fù)步驟(2),直至所有信息轉(zhuǎn)換完畢,最后對使用Logistic混沌序列加密過的信息進(jìn)行解密得到嵌入的秘密信息。
實驗在VS2015上使用HEVC參考軟件HM16.9對本文算法進(jìn)行仿真分析,選取不同分辨率的官方測試序列(BasketballDrive,BQMall,Kimono,PeopleOnStreet,RaceHorses)進(jìn)行對比分析。編碼視頻幀序列結(jié)構(gòu)為IPPP…,量化參數(shù)為27,其余參數(shù)均使用默認(rèn)設(shè)置。編碼端輸入內(nèi)容為YUV測試序列和秘密信息,輸出內(nèi)容為編碼重建后的HEVC視頻序列和載密二進(jìn)制流,解碼端輸入內(nèi)容為二進(jìn)制流,輸出內(nèi)容為秘密信息及解碼視頻。
為了主觀分析秘密信息對編碼重建視頻質(zhì)量的影響,圖1給出了秘密信息嵌入前后的第30幀的視頻編碼重建圖像。從主觀性角度分析,信息隱藏前后圖像差別很小,信息隱藏后并未對編碼重建后的HEVC視頻圖像造成明顯影響。
圖1 嵌入前和嵌入后重建圖像對比
為了客觀分析秘密信息嵌入前后對編碼重建后的HEVC視頻質(zhì)量的影響,本文選擇峰值信噪比(PSNR)、比特率(BR)、比特率變化率(BRI)對嵌入前后的視頻質(zhì)量進(jìn)行客觀評價。
(8)
式中:MSE表示原視頻圖像與編碼后視頻圖像之間的均方誤差。
(9)
式中:BR′和BR分別為信息隱藏前后的編碼比特率。
圖2、圖3給出了在QP=22,27,32下,秘密信息嵌入前后,部分測試序列編碼后視頻的PSNR值隨比特率的變化折線圖??梢钥闯觯度肭昂蟮恼劬€圖基本重合,PSNR值隨比特率變化情況基本一致,視頻質(zhì)量未產(chǎn)生明顯變化。
圖2 PSNR值隨比特率變化圖(RaceHorses)
圖3 PSNR值隨比特率變化圖(BQMall)
表2、表3給出量化參數(shù)QP=27時,在不同分辨率的測試序列下,本文算法在信息嵌入前后編碼重建視頻的PSNR、BR、BRI的數(shù)值對比??梢钥闯觯孛苄畔⒌那度氩]有使PSNR值產(chǎn)生明顯變化。與文獻(xiàn)[7]算法類似,本文算法并沒有引起信息嵌入前后的比特率變化。這是因為兩種算法均選擇在指數(shù)哥倫布編碼過程中進(jìn)行信息嵌入,僅對載體數(shù)據(jù)的部分比特位進(jìn)行修改,并沒有對編碼長度產(chǎn)生影響,不會產(chǎn)生額外的比特位。由于熵編碼是編碼過程的最后一步,語法元素abs_mvd_minus2經(jīng)過指數(shù)哥倫布編碼后通過旁路編碼寫入比特流中完成編碼,所有二進(jìn)制符號均以0.5的概率進(jìn)行編碼,信息熵公式如下:
表2 PSNR測試結(jié)果對比
表3 比特率及其變化率測試結(jié)果
(10)
式中:H表示信息熵值;Xi表示隨機(jī)變量,在本實驗中表示單個二進(jìn)制符號;P(Xi)表示每個二進(jìn)制字符的出現(xiàn)概率。信息嵌入后不會改變進(jìn)入比特流中的信息熵即平均信息量的大小。因此,使用本文算法進(jìn)行信息嵌入后不會改變編碼比特率,具有較好的客觀不可感知性。
本文采用嵌入容量和嵌入效率測試分析算法信息隱藏效果。嵌入效率表示修改單位載體后嵌入的信息量[18]:
E=m/n
(11)
式中:m表示平均每個p幀嵌入的比特總數(shù);n表示平均每個p幀修改的比特總數(shù)。
表4列出了當(dāng)量化參數(shù)QP=27時,部分序列使用本文算法進(jìn)行信息嵌入后平均每個p幀的秘密信息嵌入位數(shù),最大載體修改位數(shù)和嵌入效率。為方便進(jìn)行實驗對比,在統(tǒng)計嵌入容量時,本文算法設(shè)置與文獻(xiàn)[7]相同的閾值T,即選擇數(shù)值大于等于T的語法元素abs_mvd_minus2進(jìn)行信息嵌入。隨著閾值T的提升,本文算法相較于文獻(xiàn)[7]的嵌入容量提升比率也隨之提高。并且本文算法對載體修改量較少,具有較高的嵌入效率。這是由于本文算法選擇語法元素abs_mvd_minus2經(jīng)過EG1編碼產(chǎn)生的后綴INFO作為嵌入載體,相較于文獻(xiàn)[7]選擇的編碼末位具有更多的載體比特位。又因為矩陣編碼的引入,理論上,本文算法最多修改1個載體比特便可完成2比特信息嵌入,嵌入效率為2。在實際嵌入中,若嵌入信息與載體信息有較高的重合度,可以修改更少的載體比特,從而得到更高的嵌入效率。
表4 本文與文獻(xiàn)[7]方法嵌入容量和嵌入效率測試結(jié)果對比
為了進(jìn)一步評價本文算法的嵌入容量與嵌入效率,本文選擇最新的HEVC信息隱藏算法[19-20]與本文算法進(jìn)行對比。文獻(xiàn)[19]選擇修改PU分區(qū)模式進(jìn)行信息嵌入,并采用不同嵌入級別完成對不同分辨率視頻的信息隱藏,本文選擇其測試視頻分辨率范圍最廣且嵌入強(qiáng)度較高的算法的實驗結(jié)果進(jìn)行對比。文獻(xiàn)[20]選擇運動向量分量作為嵌入載體,同樣采用不同的嵌入強(qiáng)度進(jìn)行嵌入,本文選擇其中嵌入強(qiáng)度較高的結(jié)果進(jìn)行對比。如表5所示,在量化參數(shù)QP=32下,雖然本文算法在嵌入效率上略低于文獻(xiàn)[20]的算法,但在信息嵌入量上明顯優(yōu)于文獻(xiàn)[19]與文獻(xiàn)[20]的算法,這進(jìn)一步說明了本文算法較好地兼顧了嵌入容量和嵌入效率。
表5 本文與文獻(xiàn)[19]、文獻(xiàn)[20]的算法測試結(jié)果對比
本文提出一種基于CABAC的HEVC信息隱藏算法。通過闡述兩種算術(shù)編碼的性質(zhì)以及指數(shù)哥倫布編碼的特點,分析了將語法元素abs_mvd_minus2經(jīng)過指數(shù)哥倫布編碼產(chǎn)生的后綴作為嵌入載體的可行性,并采用矩陣編碼的方法實現(xiàn)秘密信息的嵌入。為了保證算法的安全性,本文采用Logistic混沌加密完成對秘密信息的預(yù)處理。實驗結(jié)果表明,本文算法在主客觀上均有良好的不可感知性。與同類基于CABAC熵編碼的信息隱藏算法相比,本文算法在嵌入效率上較文獻(xiàn)[7]增加了1倍,在相同嵌入閾值下,嵌入容量也得到了大幅度提高。與其他類型的最新HEVC信息隱藏算法[19-20]相比,本文算法同樣在嵌入容量上得到了較大的提高,并較好地兼顧了嵌入效率。