寧志強, 鈕可,2*, 潘峰,2, 邱楓
(1.武警工程大學密碼工程學院, 西安 710086; 2.網絡與信息安全武警部隊重點實驗室, 西安 710086)
信息隱藏技術利用原始載體中存在的冗余空間進行秘密信息的嵌入,并且在信息嵌入后不會引起人們的察覺[1]。按照載體與嵌入信息的關系,信息隱藏可以分為隱寫術與數字水印。隱寫術是隱蔽通信的重要手段,數字水印是保護版權、防偽與追蹤的重要方法。按照載體的類別,信息隱藏可以分為音頻信息隱藏、圖像信息隱藏和視頻信息隱藏等。視頻信息隱藏與其他方法相比,具有隱藏容量大、隱蔽性好、應用途徑廣泛的優(yōu)點,近年來引起了學者的關注。
目前,視頻信息隱藏的常用嵌入方法有基于量化或未量化的離散余弦變換(discrete cosine transformation, DCT)系數、基于幀內/幀間預測模式和基于運動矢量的信息隱藏。在運動矢量上嵌入信息具有嵌入容量大且不易遭到破壞的特點,已經成為視頻信息隱藏的主要方法之一。
傳統的信息隱藏技術雖然能夠完成較好的不可見性,但是在嵌入信息過程中會破壞載體,造成載體的永久性失真。為了解決這個問題,發(fā)展出了可逆信息隱藏技術??赡嫘畔㈦[藏是指接收方正確提取秘密信息后,可以利用一定的規(guī)則完全恢復載體的技術??赡嫘畔㈦[藏具有更加廣泛的應用,例如:在軍事視頻通訊中使用可逆信息隱藏,既可以完成秘密消息的傳送,又不影響正常的視頻通話;在遠程醫(yī)療中使用可逆信息隱藏,既可以把病人的個人信息嵌入到視頻中,保護病人的隱私,又可以保證視頻質量,避免由于視頻質量的原因影響對病人病情的判斷。
差值擴展算法(difference expansion, DE)、直方圖平移算法(histogram shifting, HS)和預測誤差擴展算法(prediction-error expansion, PEE)是可逆信息隱藏中常用的三種方法。像素值排序(pixel value ordering, PVO)是從PEE發(fā)展而來的一種技術[2]。在PVO中,圖像被分成相同大小的非重疊塊。塊中的像素值按升序排列,使用第二大像素預測最大值像素,使用第二小像素預測最小值像素。計算最大(小)像素和第二大(小)像素之間的預測誤差,生成預測誤差直方圖。利用PVO技術能夠以較小的失真換取較大的嵌入容量,一個塊中最多可以隱藏兩位數據[3]。Ou等[4]提出了k階運動矢量排序技術(k-pass pixel value ordering, PVO-k),把塊中的k個最大(最小)像素作為嵌入單元,同時修改k個像素來嵌入一位數據。與PVO相比,具有更大的嵌入容量,但同時增大了嵌入時造成的失真。Wu等[5]考慮到每個塊中的兩個預測誤差具有密切的相關性,將兩個預測誤差視為一對,并利用自適應二維直方圖嵌入秘密信息。但由于嵌入容量過大,導致嵌入信息后的視覺質量較差。Lee等[6]使用不同的操作模式將秘密信息分散到兩層中,第一層和第二層不存在重復。該方法能夠應用到現階段的PVO技術中,增大嵌入容量??自伩〉萚7]提出了基于排序像素值也階躍響應的可逆信息隱藏方案,能夠在減小像素修改數量的同時增大了嵌入容量。Niu等[8]提出了一種新的視頻可逆信息隱藏算法,通過改變編解碼時的參考幀,克服了修改運動矢量而引起的失真漂移效應,提升了視覺質量。
PVO技術已經在圖像信息隱藏發(fā)揮了重要的作用,但在視頻領域中很少被使用?;谏鲜鲅芯炕A,現改進PVO-k技術,使其應用在視頻時具有較低的失真和更好的視覺質量,設計一種基于運動矢量排序的視頻可逆信息隱藏算法。本文算法將運動矢量分組,在每組中把運動矢量按升序排列,使用第二大(小)運動矢量預測最大(小)運動矢量,統計預測誤差直方圖,利用PEE嵌入和提取信息,獲得較好的視頻質量。同時融入改變參考幀的方法,進一步改善視頻質量。
在繼承了以往標準中成熟的標準編碼框架的同時,H.264標準支持可變大小的運動矢量(motion vector, mv)和1/4像素精度的運動估計。每個16×16大小的宏塊有4種分割方式:1個16×16、2個16×8、2個8×16、4個8×8。每個8×8的子宏塊可以繼續(xù)進行分割:1個8×8、2個4×8、2個8×4和4個4×4。不同的分割方式有其對應的運動補償。如圖1所示,這種分割下的運動補償稱為樹狀結構運動補償[9]。
圖1 宏塊及子宏塊分割Fig.1 Macroblock and sub-macroblock partitions
由于相鄰運動矢量的具有較強的相關性,將運動矢量分組后,同一組中的運動矢量可能存在多個相同的最值。所以,本文算法以k個最值作為單元,更適用于在運動矢量中嵌入信息。運動矢量可分為橫向分量和縱向分量,兩者均能嵌入信息。本文中只利用橫向運動矢量進行說明,縱向運動矢量的嵌入方式與橫向運動矢量相同。
具體來說,當排序序列中存在k個最大(小)橫向分量時,可以取第二大(小)橫向分量來預測最大(小)運動矢量。為了保證嵌入信息后的排列順序不變,必須同時修改所有最大(小)值橫向分量。例如,在分塊中存在下列排序序列。
mvx1=…mvxb =…=mvxn (1) 式(1)中:mvx為運動矢量的橫向分量。序列中存在a個最大橫向分量和b個最小橫向分量。在數據嵌入時,會修改所有的最大值橫向分量{mvx(n-a+1),mvx(n-a+2),…,mvxn}和最小橫向分量{mvx1,mvx2,…,mvxb},同時保持其他分量不變。序列中的最大橫向分量在嵌入信息時的變換方法,可以通過式(2)得 (2) 式(2)中:x為預測誤差,且x=mvx(n-k+1)-mvx(n-k)>0,m∈{0,1}是待嵌入的秘密信息。當k=1時,序列中只存在一個最大分量,只需修改這個最大值便可嵌入信息;當k=2時,序列中存在兩個相同的最大分量,必須同時修改這兩個最大值;當k>2時,序列中最大分量的個數大于2個,則跳過此分組,不進行任何修改。嵌入信息時,根據秘密信息的大小和可接受的最大失真程度確定k的值。k越大,嵌入容量越大,嵌入后的失真越大。 如圖2(a)所示,在H.264壓縮規(guī)則中,當前幀的解碼依賴于前一幀或后一幀。基于運動矢量的信息隱藏會修改運動矢量,當前幀在解碼時參考了已經被修改的前一幀,從而造成錯誤解碼。特別是在基線編碼中,第一幀為I幀,其余全部為P幀,因此運動矢量的修改會造成錯誤積累。P幀越多,視頻的視覺質量就越差。 H.264編碼的圖像存儲在編碼器的參考緩沖區(qū)中,解碼器有相應的參考圖像列表用于補償幀間預測[10]。與以前的編碼標準不同,它在多個參考幀上使用預測技術,最多允許從15幀中選擇1幀或2幀。如圖2(b)所示,為了有效防止由于運動矢量修改而引起的誤差傳播和積累,可以指定編解碼時的參考幀。參考幀不被嵌入信息,只用于后續(xù)若干幀的解碼。由于參考幀的運動矢量沒有被修改,錯誤被限制在有限幀中,阻斷了錯誤積累。指定參考幀的間隔k可以靈活選擇,k越大,嵌入容量越大,引起的失真漂移越大。 圖2 參考幀的變換Fig.2 The transformation of the reference frame 本算法的流程框架如圖3所示。視頻發(fā)送方得到原始視頻每一幀的運動矢量。而后對運動矢量分組和排序,按照規(guī)則嵌入信息。最后對視頻進行量化和編碼,得到二進制碼流。視頻接收方接收到視頻后,得到含有秘密信息的運動矢量,再進行秘密信息的提取與運動矢量的恢復,最后利用恢復的運動矢量解碼視頻。根據設計的算法,接收方可以正確提取出秘密信息,并完全恢復原始視頻。 圖3 算法流程框架圖Fig.3 Framework diagram of algorithm flow 根據H.264視頻編碼器的特點,把一幀中全部的運動矢量分組,便于排序和嵌入信息。 在H.264編碼規(guī)則中,運動矢量最基本的單位是16×16大小的宏塊,16×16的宏塊還可以繼續(xù)分割成更小精度的運動矢量。為增大嵌入容量、減小失真,本文在嵌入信息時盡可能利用所有的運動矢量宏塊,并對不同類型的運動矢量設計分組規(guī)則。如表1所示,若宏塊大小為16×16、16×8或8×16,則相鄰兩個宏塊內的所有運動矢量為一組,對組中的運動矢量排序并嵌入信息;若宏塊被分割成8×8及更小的運動矢量,則該宏塊內的所有運動矢量為一組,對組中的運動矢量排序并嵌入信息。 表1 運動矢量分組規(guī)則Table 1 Motion vector grouping rules 對運動矢量分組后,在每個分組中進行運動矢量的排序并嵌入信息。由于H.264/AVC中運動矢量為1/4像素,下列mvx均指4倍的運動矢量橫向分量。 步驟1首先,對于某一分組中的n個橫向分量,把它們按照升序排列,得到 mvx1=…=mvxb mvx(n-a+1)=…=mvxn (3) 式(3)中:a和b分別為最大和最小的橫向分量個數,滿足a>0,b>0且a+b≤n。 步驟2利用mvx(n-a)預測mvx(n-a+1),用mvx(b+1)預測mvxb,得到最大橫向分量的預測誤差x和最小橫向分量的預測誤差y: x=mvx(n-a+1)-mvx(n-a)≥1 (4) y=mvxb-mvx(b+1)≤-1 (5) 步驟3若a=k或b=k,則該分組按照下列4種情況嵌入信息。 (1)當a=k,b≠k時,只能修改最大值來嵌入信息,設i∈{1,2,…,n},則mvxi的值為 (6) 式(6)中:x為根據式(4)得到的預測誤差;m為待嵌入的比特位,m∈{0,1}。若x=1,則可以向該運動矢量分組中嵌入1bit信息。 (2)當a≠k,b=k時,只能修改最小值來嵌入信息,則mvxi為 (7) 式(7)中:y為根據式(5)得到的預測誤差,若y=-1,則可以向該運動矢量分組中嵌入1bit信息。 (3)當a=b=k,n>2k時,最大值和最小值都可以嵌入信息,mvxi的值為 (8) 此時可以在橫向分量分組中嵌入最多2bit信息。 (4)當a=b=k,n=2k時,分組中的橫向分量只存在最大值與最小值。此時只在最大值中嵌入信息,利用最小值預測最大值。 步驟4重復步驟1~步驟3,直到在所有分組中嵌入信息。 步驟1把嵌入信息后的橫向分量按升序排列,其排列順序與嵌入數據前保持不變。在解碼端按式(9)把分量升序排列: mv′x1=…=mv′xb mv′x(n-a+1)=…=mv′xn (9) 步驟2利用mv′x(n-a)預測mv′x(n-a+1),用mv′x(b+1)預測mv′xb,得到最大橫向分量的預測誤差x′和最小橫向分量的預測誤差y′分別為 x′=mv′x(n-a+1)-mv′x(n-a)≥1 (10) y′=mv′xb-mv′x(b+1)≤-1 (11) 步驟3在嵌入信息時同時修改了所有的最大值或最小值,所以a和b的值是不變的??梢愿鶕和b判斷是否嵌入了信息。并利用排列順序和a、b的不變性,完全提取出秘密信息。與嵌入過程相同,提取過程也分為4種情況。 (1)當a=k,b≠k時,mv′xi可以恢復為 (12) 式(12)中:x′是根據式(10)得到的預測誤差;x′為1和2時,嵌入的信息分別為0和1。 (2)當a≠k,b=k時,mv′xi可以恢復為 (13) 式(13)中:y′為根據式(11)得到的預測誤差;y′為-1和-2時,嵌入的信息分別為0和1。 (3)當a=b=k,n>2k,mv′xi可以恢復為 (14) 當(x′,y′)為(1,-1)、(1,-2)、(2,-1)和(2,-2)時,嵌入的信息分別為“00”“01”“10”和“11”。 (4)當a=b=k,n=2k時,恢復橫向分量和提取信息的方法與情況(1)相同。 步驟4重復步驟1~步驟3,直到提取所有信息和恢復所有的橫向分量。 使用H.264編解碼器,在MATLAB平臺上進行實驗。測試視頻為6個QCIF(176×144)的YUV視頻序列:Carphone, City, Coastguard, Container, Foreman和News。每個視頻取前150 幀,第一幀為I幀,其他全部為P幀,量化參數(quant param, QP)值為27。把生成的隨機二進制數據當作秘密信息嵌入。為驗證算法的有效性,選取文獻[11-13]這三個相同類型的視頻可逆信息隱藏算法進行對比。 為驗證本文算法的不可見性,分別從解碼后視頻的主觀視覺感受和客觀評價標準兩方面進行分析。 圖4分別是視頻序列Carphone和News原始視頻第150幀的亮度分量與嵌入信息后的對應幀的亮度分量。通過對比,從主觀視覺上并未發(fā)現視頻幀有改變。 圖4 第150幀亮度分量對比Fig.4 Comparison of brightness components at frame 150 峰值信噪比(peak signal-to-noise ratio, PSNR)是當前常用的圖像客觀質量評價標準,表示為 (15) 最小均方誤差MSE為 (16) 式(16)中:I1和I2為兩個M×N大小的圖像。若I1和I2完全相同,則MSE趨近于0,PSNR為無窮大。在圖像中,PSNR通常在30~50[14]。結構相似性 (structuralsimilarityindex,SSIM)是另一種衡量人眼視覺質量的重要工具,是基于亮度、對比度和結構建立的[15]。本文引入ΔPSNR和ΔSSIM來評價嵌入信息對視頻質量的影響。ΔPSNR和ΔSSIM越小,代表本算法對視頻質量的影響就越小。 ΔPSNR=PSNRp-PSNRs (17) ΔSSIM=SSIMp-SSIMs (18) 式中:PSNRp和SSIMp分別為未嵌入信息的壓縮視頻的峰值信噪比和結構相似性;PSNRs和SSIMs為本算法得到的峰值信噪比和結構相似性。圖5為150 幀視頻序列的PSNR,圖例為各視頻序列的名稱。表2為視頻序列的ΔPSNR和ΔSSIM的值。 由圖5和表2可以看出,本文算法在6個視頻中的平均PSNR等于37.208,能夠滿足人眼對視頻質量的要求。與對比文獻相比,平均ΔPSNR分別降低了80.75%、78.20%和59.36%。平均ΔSSIM分別降低了82.63%、68.52%和41.38%。 圖5 150幀視頻序列的PSNRFig.5 PSNR of 150-frame video sequence 表2 視覺質量對比Table 2 Comparison of visual quality 對于嵌入容量的分析,采用每幀嵌入比特數(bits per frame, bpf)來進行評價。表3是視頻序列的嵌入容量對比。從表3中可以看出,本算法的平均嵌入容量為41.05 bpf,與文獻[11]和文獻[12]相比增大了25.16%與47.28%,與文獻[13]相比幾乎相同。本算法具有良好的嵌入容量,能夠滿足應用場景的需求。 表3 嵌入容量對比Table 3 Comparison of embedding capacity 使用比特增長率來分析視頻在嵌入信息前后的碼率變化。由于比特率與視頻的運動劇烈程度密切相關,且不同運動劇烈的視頻的運動矢量數量較多,故在此利用每運動矢量嵌入比特數(bits per motion vector, bpmv)來衡量嵌入容量更恰當。表4是嵌入容量分別為0.1 bpmv、0.2 bpmv和0.3 bpmv時比特率的擴張對比。 表4 不同嵌入容量下的比特率擴張Table 4 Bit rate expansion under different embedding capacities 通過實驗發(fā)現,本算法的比特率擴張較大。這是使用改變參考幀的技術所造成的結果。未改變參考幀時,后一幀以前一幀為參考,相鄰兩幀圖像內容相差較小,得到的運動矢量數值也較小,編碼得到的比特流較短。改變參考幀后,后一幀可能會以前K幀為參考,編碼幀與參考幀之間內容相差較大,得到的運動矢量數值較大,編碼得到的比特流較長,使比特率擴張變大。在今后的工作中,可以嘗試對改變參考幀的技術加以改進,降低比特率的增長。 利用運動矢量分組與排序,微調最大或最小運動矢量,實現了信息的嵌入與提取。通過改變參考幀,進一步提高了解碼后視頻的視覺質量。實驗證明,在提取信息后能夠完全恢復載體,嵌入容量能夠滿足應用場景的需求。本文算法的最大優(yōu)點在于視覺質量較好,適用于醫(yī)學、軍事等對視頻質量要求較高的場合。 未來,可以在DCT系數中使用排序的方法嵌入信息,也可以將本算法拓展到密文域可逆信息隱藏中。1.3 參考幀變換
2 算法設計
2.1 運動矢量分組
2.2 嵌入流程
2.3 提取流程
3 實驗結果
3.1 不可見性分析
3.2 嵌入容量分析
3.3 比特率分析
4 結論