劉 凱 李 晨 田麗華* 張玉龍 宋 慧
1(西安交通大學軟件學院 陜西 西安 710049)2(武警工程大學信息工程學院 陜西 西安 710086)
隨著互聯網以及影視行業的發展,視頻的傳播越來越普遍,人們可以利用互聯網傳播可以更加方便地獲取視頻資源。視頻的版權保護也逐漸成為現階段研究的熱點問題,視頻水印技術已經成為版權保護的不二選擇[1-2]。H.264比其他的壓縮編碼標準具有更好的壓縮效率,因此研究基于H.264/AVC視頻編解碼的視頻水印算法變得更具有現實意義[3-4]。用于版權保護的視頻水印算法大都具有魯棒性,能抵抗各種攻擊。在H.264/AVC中,視頻都是以壓縮的形式進行存儲和傳輸的,所以視頻水印必須要能夠抵抗H.264/AVC的重壓縮攻擊。
為了滿足視頻版權保護的要求,許多基于H.264/AVC的魯棒性視頻水印算法被提出。文獻[5]提出的魯棒性視頻水印算法將水印圖像壓縮之后的二值序列進行擴頻處理,然后通過修改某個對角線DCT系數中來進行水印的嵌入,該算法魯棒性較好,但算法較復雜。文獻[6]提出的算法中通過調整紋理復雜的兩相鄰子塊的能量來嵌入水印,該算法水印魯棒性較好,但對視頻質量影響較大。文獻[7]提出的算法是一種盲水印算法,該算法在DCT子塊中嵌入水印,具有較好的水印魯棒性與不可見性,但水印容量較小。文獻[8]提出一種魯棒水印算法,該算法結合BCH碼,具有較好的抗重壓縮性,但不能抵抗重量化轉碼攻擊。文獻[9]提出在量化后對每個DCT系數進行即時解碼刷新,在運動矢量中嵌入水印,但魯棒性差。文獻[10]通過調制載體圖像來進行奇異值分解,根據得到的奇異值的大小關系來嵌入水印,該算法簡單,但抗重壓縮能力差。
針對上述算法抗重壓縮性能不足、算法復雜等問題,本文提出一種在色度上修改非零系數符號的算法。該算法選擇通過改變非零系數較多的DCT色度子塊中正負數個數的大小關系來嵌入水印,以達到抗重壓縮的目的。
基于H.264/AVC對魯棒性視頻水印的嵌入最常見的是選擇在DCT變換和量化之后,因為之后的熵編碼的過程是無損的,所以在無攻擊的過程中能完全提取出水印。這類的算法都是根據對應的水印序列值來對量化后的DCT系數進行修改來嵌入水印,并且根據H.264/AVC編碼的特性,一般會選擇在I幀嵌入,使其對視覺影響盡可能小。
通過對DCT塊的量化系數的研究分析,發現量化后的系數正負符號比較穩定并且其正負符號的比例也比較穩定[11]。因此可以考慮通過修改DCT系數正負符號來嵌入水印信息,以此提高水印的魯棒性。另外通過分析重壓縮前后的DCT系數,發現非零系數越多即視頻的紋理復雜度越高,DCT系數越穩定,水印的魯棒性也越好。同時根據HVS的特點,人眼對于紋理復雜度高的視頻變化并不敏感,在紋理復雜度越高的視頻嵌入水印,人眼越難識別[12],因此可以選擇在非零系數較多的子塊中嵌入水印來提高水印的魯棒性和不可見性。
而H.264中DCT系數又具體可分為亮度分量的DCT系數和色度分量DCT系數。多數視頻水印算法都是選擇在亮度分量的DCT系數中嵌入水印,但是這類算法重壓縮后水印提取大都會有明顯的偏移現象,并不具有良好的抗重壓性。而參考H.264/AVC編碼框架,幀內預測分為3類模式,如圖1、圖2所示,一共包括:9種亮度Intra_4×4預測模式,4種亮度Intra_16×16預測模式和4種色度Intra_8×8預測模式。亮度Intra_16×16預測模式和色度Intra_8×8預測模式大同小異。H.264/AVC通過對各個模式的代價的計算,選擇代價最小的預測模式來實現對當前塊的預測[13]。

圖1 9種亮度Intra_4×4預測模式

圖2 4種亮度Intra_16×16預測模式
視頻經過H.264/AVC壓縮編解碼后,視頻序列由于DCT變換和量化過程而出現失真。所以根據預測模式選擇的原則,視頻在進行重壓縮的過程中會發生預測模式的轉移。其中預測模式轉移包括亮度預測模式和色度預測模式的內部轉移,以及兩類亮度預測模式之間的轉移。而兩類亮度預測模式之間的轉移會引起水印提取不同步,對水印的結果造成嚴重失真。本文選取了mobile_cif、flower_cif、tempete_cif、waterfall_cif四個視頻序列的前20幀進行重壓縮實驗,對四種轉移發生的概率進行統計,結果如表1所示。發現色度僅有一類預測模式,不會發生不同類預測模式之間的轉移,且色度較之于亮度變化率更小。

表1 重壓縮預測模式轉移概率統計
在H.264中,當前塊編碼模式CBP(co-ded block pattern)代表了亮度分量和色度分量子塊殘差的編碼方案。CBP共有6 bit,高2 bit和低4 bit分別代表了色度分量子塊和亮度分量8×8子塊是否存在非零系數。而H.264是根據CBP的值對宏塊進行編碼的,CBP的值決定了當前塊的編碼模式,因為重壓縮的過程是有損的,DCT系數會發生改變,所以CBP值也可能會發生改變。CBP值的改變會影響當前塊的編碼,如果CBP突變為0,會導致某些子塊不再編碼,因而導致水印提取不同步[14]。據實驗統計,色度CBP值突變為0的概率很小,遠小于亮度。因此為解決水印提取不同步的問題,可以考慮不選擇在亮度分量上嵌入水印,而是選擇在色度分量嵌入水印,這樣就能很有效地解決水印提取不同步的問題。
綜上所述,由于DCT系數正負符號有一定的穩定性,同時DCT系數中非零系數越多視頻水印的魯棒性越好,另外在色度分量上嵌入水印比亮度分量更能抗重壓縮,故本文算法將基于色度分量的非零系數上進行水印的嵌入。
為了提高水印的安全性,需要對有意義的水印信息進行置亂。本文選擇使用Arnold置亂預處理來消除圖像像素之間的關聯性,Arnold置亂的計算過程簡單,置亂效果好,同時也可以快速恢復置亂圖像。置亂公式:
(1)
式中:(x,y)是水印原始圖像的像素值,(x′,y′)是水印置亂后的像素值,N是圖像階數。
根據第2小節的分析,本文選擇在色度分量且紋理比較復雜的位置上嵌入水印,且為了兼顧視覺影響和魯棒性的要求,本算法選擇改變中頻位置的非零系數的正負號來完成水印信息嵌入。具體步驟如下:
第1步對水印信息預處理后得到序列M={wm1,wm2,…,wm1024},水印值wm的值為0和1。
第2步在每個16×16的宏塊中,選擇非零系數個數NNZ大于設定的閾值K的色度子塊,如果NNZ大于K,則進行水印的嵌入,反之跳過不執行。此處K值的選擇主要是根據視頻紋理復雜度來決定,對于紋理復雜度高的視頻序列可以適當提高K值,對于紋理復雜度低的視頻序列可以適當減小K值,以此來平衡魯棒性、不可見性和水印容量三者的關系。
第3步對符合第2步要求的色度子塊進行嵌入水印,分別計算出該色度塊中正數個數NP和負數個數NN,然后比較正負數個數的大小關系。
第4步通過修改DCT色度非零系數的正負號來滿足該子塊非零系數的正負數個數關系和水印信息相對應,本文算法的修改順序是從zig-zag掃描后的最后一個中頻系數開始從后向前進行修改。如果水印值為1,則應滿足負數的個數大于等于正數的個數,若不滿足,則需改變n個正數的符號;如果水印值為0,則應滿足負數的個數小于正數的個數,若不滿足,則需改變n個負數的符號。定義diff為正負數個數差值的絕對值如下:
diff=|NP-NN|
(2)
本文中n值的取值如下:
n=diff/2+1
(3)
通過以上的方法,能使得每個宏塊中非零系數個數大于一定閾值的色度子塊中,如果對應的水印值是1,那么非零系數中負數的個數就大于等于正數,如果對應的水印值是0,那么負數的個數就小于正數。具體的水印嵌入的流程如圖3所示。

圖3 水印的嵌入流程圖
水印的提取過程相當于水印嵌入的逆過程,在H.264/AVC的解碼端完成,由于本文算法中水印的嵌入是在量化之后進行的,所以水印的提取是在熵解碼之后反量化之前進行的。結合水印的嵌入過程和H.264的編解碼原理,可利用如下步驟來提取水印。
第1步在解碼端的每個16×16的宏塊中,并將其每個色度塊的非零系數個數NNZ與設定的閾值K進行比較,如果NNZ大于K,則意味著該子塊有水印的嵌入,需要進行水印的提取,反之跳過不執行。
第2步計算符合第1步要求的色度子塊計算其正數個數NP和負數個數NN,根據式(4)比較二者的關系來求得水印值。

(4)
第3步將提取出的水印進行Arnold反置亂,最后得到原始的水印。
本文算法通過在VS2012上運行H.264/AVC測試模型JM8.6來進行仿真實驗,運行服務器參數為:Intel(R) Core(TM) i5-3470M 3.20 GHz,內存:4 GB。具體的實驗參數設置如表2所示。

表2 JM實驗參數配置
本文選擇tempete_cif、mobile_cif、flower_cif、waterfall_cif、akiyo_cif、news_cif等視頻作為被測視頻,對其進行水印的嵌入。
不可見性是視頻水印最基本的要求,水印的嵌入應該以不影響視頻質量為前提。圖4、圖5顯示了mobile_cif、news_cif、water-fall_cif、tempete_cif、flower_cif五個視頻序列嵌入水印前后的第30幀的重構圖像對比。通過對比可以發現,水印的嵌入前后的同一視頻的同一幀幾乎沒有差別,因此本文算法主觀上具有良好的不可見性。

圖4 嵌入水印前的重構圖像

圖5 嵌入水印后的重構圖像
為了從客觀上分析算法的不可見性,本文引入了峰值信噪比PSNR(Peak Signal Noise Ratio)和結構相似性SSIM(Structural Similarity)這兩個視頻質量評價指標。PSNR和SSIM是通過對嵌入水印前后的視頻同一幀進行比較的結果,二者能較好地評價嵌入水印前后的視頻質量。圖6、圖7分別給出了本文算法的第30幀重建圖像的PSNR值和SSIM值。通常認為,當PSNR值在30之上,SSIM值在0.90之上就說明視頻質量很好。由圖中數據可得,每個視頻序列的PSNR值均在36以上,每個視頻序列的SSIM值都在0.93以上。因此本文算法在客觀上具有良好的不可見性。

圖6 本文算法PSNR值統計圖
比特增加率BIR(BitIncrease Rate)是衡量視頻網絡親和力的一個指標。視頻嵌入的前后比特率的穩定有利于視頻的傳輸,因此視頻水印算法要求盡量降低比特增加率。本文選擇對數量較少的色度非零值進行改變來嵌入水印,因此本文算法對比特率的影響并不大。比特增加率BIR的計算公式如下:
BIR=(Bw-Bo)/Bo×100%
(5)
式中:Bw為視頻嵌入水印后的比特率,Bo為視頻嵌入水印前的比特率。如圖8所示,對比文獻[14]的BIR值,可以發現本文算法具有更低的BIR值,因此本文算法具有較好的網絡親和力。

圖8 比特增加率對比圖
為了對水印算法的抗重壓縮能力進行測試,對上文中的6個已經嵌入過水印的視頻進行等量化值重壓縮(QP=28),重壓縮后提取的水印結果如表3所示。從主觀上看,仍然可以清晰地識別出“交大”的字樣,能夠達到版權保護的作用。同時對比不同視頻的水印圖像,發現紋理復雜度越高的視頻,提取出來的水印結果也越好。

表3 重壓縮后水印的提取效果圖
為了更客觀地對水印的魯棒性進行分析,本文引入了歸一化互相關系數NC(Nor-malized Correlation)和誤比特率BER(BitError Rate)這兩個視頻水印魯棒性評價指標[15]。表4所示為各個視頻序列嵌入水印并重壓縮后提取的水印與原始水印對比計算得到的NC值和BER值,通常認為,當NC值大于0.8,BER值小于0.35就說明水印信息可以被正確識別出來。由表中數據可得,每個視頻序列對應的水印的NC值均在0.92以上,每個視頻的BER值都在0.14以下,因此本文算法在客觀上具有良好的魯棒性。通過對比文獻[14]算法中相同序列重壓縮后提取的水印的BER值,對比結果如圖9所示,發現本文算法具有比文獻[14]更低的BER值,說明本文算法具有更好的抗重壓縮性。

表4 重壓縮后水印的NC值和BER值

圖9 本文與文獻[14]算法的BER值對比
為了進一步驗證本文算法的魯棒性,實驗對各視頻序列進行了不同量化值情況下的水印提取,并測量了其BER值。本文將QP值由24變為22,表5是其中若干視頻的水印效果圖。觀察可得,重量化步長攻擊會使水印的辨識度降低,但主觀上仍然能夠比較清晰地識別出“交大”的字樣。圖10所示為各個視頻序列改變量化參數后提取的水印的BER值。發現除了akiyo的BER為0.19外,其他的視頻均在0.13以下。說明改變量化值的情況下水印的魯棒性依然良好。同時對比文獻[14],對比結果如圖11所示,發現本文算法具有比文獻[14]更低的BER值。文獻[14]是在色度上修改相鄰的兩個非零系數的大小關系,本文是在色度上修改非零系數的正負數個數的大小關系,因為DCT系數的符號要比它的數值大小更加穩定,所以本算法具有更好的魯棒性。

表5 不同量化值的水印提取結果

圖10 QP(24->22)的BER值

圖11 QP(24->22)的BER值
本文提出一種抗重壓縮的魯棒性算法。通過對H.264/AVC幀內預測模式的轉移以及CBP值突變的規律進行分析,發現了在色度分量上嵌入水印要比亮度更加抗重壓縮攻擊。同時通過大量實驗分析發現,紋理復雜度越高其DCT系數值越穩定視頻質量越不受影響和DCT系數的正負號具有一定的穩定性,由此提出一種基于色度上通過改變非零系數較多的非零系數的正負號來進行水印的嵌入。實驗結果表明該算法在具有良好的水印不可見性的前提下具有較好的抗重壓縮和抗重量化攻擊的特性,并且和已有的算法相比,本文算法具有更好的效果。本算法雖然比在亮度上更具有較好的抗重壓縮和抗重量化攻擊的特性,但無法抵抗其他的惡意的攻擊,如惡意篡改、幀刪除等,這也是今后需要更進一步深入研究的工作。