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