肖為恩,張正偉,劉天府,李 瑤,孟 倩
(淮陰工學院 計算機與軟件工程學院,江蘇 淮安 223003)
可逆信息隱藏是近年來多媒體信息安全領域的熱點研究問題,該技術能夠將一定量的信息嵌入到載體圖像中,并且不但能夠盲提取所嵌入的信息,而且還可以無損恢復載體圖像,因此其所具備的可逆特性,在軍事、遙感以及醫(yī)療等特殊行業(yè)發(fā)揮出了巨大作用,從而引起了研究者們廣泛關注[1]。目前可逆信息隱藏算法研究的基本目標之一就是通過以最小的圖像失真代價換取最大的嵌入容量。
在可逆信息隱藏領域,Ni等[2]提出的直方圖平移算法是一種最為經典的可逆信息隱藏算法之一,該算法通過利用灰度圖像像素值,生成灰度直方圖,并選取頻率最高的峰值點用于水印信息的嵌入。該算法能夠使得載密圖像具備較高的視覺質量,但缺點就是水印嵌入容量較低。Lee等[3]利用了像素間的高相關性,提出了基于差值直方圖的可逆水印算法,該算法很好的利用了峰值點高度集中在0點的分布特性,使得嵌入容量得到了較大的提升。Thodi等[4]提出了基于預測誤差擴展(prediction error expansion,PEE)的可逆信息隱藏算法,該算法通過擴展像素的預測誤差來嵌入秘密信息,而不是圖像2個相鄰像素的差值,因此其算法性能更優(yōu)。
在基于PEE可逆信息隱藏方案中,一般主要分成兩部分,即生成預測誤差直方圖和擴展預測誤差,因此也產生了眾多預測方法來產生更加陡峭的預測誤差直方圖,例如中值邊緣檢測(median edge detection,MED)[4]、梯度調整預測器(gradient adjusted predictor,GAP)[5]、菱形預測器[6]和像素值排序(pixel value ordering,PVO)[7]?;赑EE方案的第二步則為修正誤差,目前一些方法是通過將秘密信息采用自適應嵌入的方法嵌入到圖像平滑區(qū)域的像素中,例如,Sachdev等[8]提出了一種自適應水印嵌入的可逆信息隱藏方案,在水印信息嵌入過程中,局部復雜度低的像素將會優(yōu)先被處理,從而達到減少嵌入失真的目的。Pan等[9]將自適應嵌入策略納入到PVO預測器中,通過利用預測像素的相對位置角度自適應地選擇上下文像素,從而打破當前塊的限制,減少圖像的失真。任方等[10]提出基于中值預測的四輪嵌入可逆信息隱藏算法,其更好利用了圖像的紋理信息,通過像素排序技術,減少了無效平移像素數(shù)量,從而保證了載密圖像的不可感知性。Kumar等[11]則將原始圖像按人字形順序劃分為3個像素的非重疊塊,并將這些塊分為平滑塊和復雜塊。采用2個不同的預測器分別進行嵌入,因此大大提高了算法的嵌入容量。
此外,在預測誤差直方圖擴展方式中,引入了成對PEE[12]和二維差分直方圖修改[13],取代了傳統(tǒng)PEE。在這些方法中,除了利用空間信息外,還利用預測誤差之間的相關性來減少嵌入失真。由于成對PEE的優(yōu)異性能,它在研究中得到了廣泛應用[14-16]?;谧赃m應和最優(yōu)PEE的概念,Li等[17]提出了多重直方圖修改的可逆信息隱藏策略,這類算法將不同復雜度像素的預測誤差放在多個直方圖中進行修改,使得能夠自適應嵌入秘密信息,提高水印的嵌入容量和視覺質量。
上述預測方法主要目的在于能夠生成具有對稱分布的更尖銳的預測誤差直方圖,然而2013年Chen等[18]提出了一種基于非對稱的可逆信息隱藏算法,該算法通過平移非對稱的預測誤差直方圖來嵌入水印信息,這類嵌入方式有效減少了無效平移像素數(shù),從而降低了圖像的失真。Kim等[19]提出了一種先進的極值預測器,從而達到增加非對稱預測誤差直方圖的峰值數(shù)以及保證其非對稱性的目的,但是此類方法由于固定在0值點嵌入,因此降低了算法的嵌入容量。
為了能夠進一步提高水印嵌入容量和圖像視覺質量,本文中提出了一種新的像素極值預測器方法和水印信息嵌入方案,該方案利用所構造出的兩類非對稱預測誤差直方圖并通過單向預測誤差擴展來實現(xiàn)水印的嵌入。在此過程中,能夠使得由于預測誤差擴展所造成修改的像素得到補償,而且隨著嵌入容量的增加這種像素補償效應會更加明顯,因此大大減少移位的像素數(shù)量,該算法在保證圖像質量的前提下,能夠大幅度提高水印信息的嵌入量。
傳統(tǒng)的預測誤差擴展算法所生成的預測誤差直方圖大多類似于兩側對稱的拉普拉斯分布,但通過這類對稱直方圖利用峰值點嵌入信息時,無論往哪個方向進行平移,其無效修改像素(numbers of invalid modifications,NIM)幾乎相等,如圖1所示,左側NIM為49 274,右側NIM為48 018,因此Chen等[22]提出了基于非對稱預測誤差直方圖的可逆信息隱藏方案,旨在減少無效修改像素數(shù)。在該方法中,生成了兩個非對稱的預測誤差直方圖,并通過擴展0值點,向預測誤差值分布較少一側單向移動來進行信息的嵌入,這意味著圖像像素會被嵌入2次。如圖2所示,秘密信息在兩層嵌入時,會產生像素補償效應,使得大部分像素的擴展量能夠相互抵消,這樣就能在一定程度上減少圖像的失真,提高載密圖像的視覺質量。但此類方法仍存在著一些缺點,比如由于像素預測精度不高且固定在0值點嵌入,因此秘密信息嵌入量就會降低,而且由于采用了非自適應的秘密信息嵌入策略,NIM得不到有效降低。
圖1 lena圖像菱形預測誤差直方圖
圖2 基于非對稱直方圖的兩層嵌入策略
基于此設計了一種基于單向極值預測誤差擴展的可逆信息隱藏算法,考慮到圖像紋理區(qū)域,目標像素與其相鄰像素之間的差值較大,因此提出了一種新的像素預測權重計算方法,并且鑒于相鄰預測誤差間所存在的強相關性,通過二次預測誤差來進一步提高像素預測精度,減小2個預測誤差間的差值,從而能夠保證所利用的像素極值預測器既能夠增加非對稱直方圖的峰值點,又可以減少NIM。最后根據(jù)所生成的非對稱直方圖以及期望嵌入容量(EC),自適應選擇峰值來完成秘密信息的嵌入,以此能夠大幅度降低NIM,提高載密圖像的保真度。
1) 目標像素預測誤差值計算。為了能夠實現(xiàn)算法的可逆性,本文選擇像素菱形預測策略,首先將原始圖像分為灰色層和白色層,如圖3所示,其中一層在進行信息嵌入時,另一層則用于像素預測。這類像素預測策略不僅能夠保證秘密信息可以正確提取,而且由于充分利用了待預測像素的相鄰像素信息,因此可以達到較高的預測精度。由于灰色層與白色層在像素預測以及信息嵌入時所用到的方法基本一致,因此這里以灰色層為例來介紹像素的具體預測方法。
圖3 菱形預測策略
像素值Ii,j的預測過程如下:
p′i,j=w1·r1+w2·r2+w3·r3+w4·r4
(1)
式中:p′i,j為像素值Ii,j的預測值;w1、w2、w3、w4為其菱形塊各組間的權重,其中需滿足w1+w2+w3+w4=1;r1、r2、r3、r4為菱形塊各組間均值。
4個權重的計算步驟如下:
圖4 像素分組模式
(2)
式中,r1、r2、r3、r4代表4組像素的組間均值。
步驟2:為了評估組間相關性,利用組間像素最大值與最小值的差值,計算出了4個組間距離,依據(jù)此來判定該組的紋理程度,如下所示:
(3)
步驟3:根據(jù)所計算出的各組間的差值,利用式(3)計算出4組間的差值總和esum,然后通過式(4)求得各組權重w′1、w′2、w′3、w′4,并對其進行歸一化處理得到w1、w2、w3、w4,分別對應所劃分出的4組各權重值:
(4)
(5)
計算得到目標像素的預測值p′i,j后,通過式(6)可計算相應預測誤差值di,j:
di,j=Ii,j-p′i,j
(6)
這樣通過這種像素預測方法,較小的權重會分配給處于紋理區(qū)域的分組,因此能夠在一定程度上提高像素的預測精度,圖5給出了具體的像素預測過程。
圖5 目標像素值預測過程實例
2) 參考像素預測誤差值計算。當計算出目標像素的預測誤差值后di,j,可通過目標像素橫向與縱向位置處的4個參考像素的預測誤差值來進行誤差值預測。以Ii+1,j像素為例,該像素值的預測模式與Ii,j不同,原因在于其周圍處于同一層的4個相鄰像素位于該像素的兩條對角線方向,兩兩并不相鄰,因此單純利用Ii,j的像素值預測模式并不能得到較好的預測效果,基于此本文中利用Ii+1,j與相鄰的8個像素的梯度來求取預測值;
Ii+1,j預測值計算如下
首先求出相鄰8個像素與Ii+1,j像素的梯度:
(7)
其中:p′i,j為Ii,j的像素預測值,p1、p2、p3分別由其相鄰2個像素預測所計算得到的,由式(8)計算求得:
(8)
選取與Ii+1,j梯度最小的像素為其預測像素p″i+1,j,最終得到其預測誤差值di+1,j:
di+1,j=Ii+1,j-p″i+1,j
(9)
由于灰色層在嵌入水印信息時,并沒有對白色層的像素進行任何的修改,因此可以直接利用Ii+1,j,不會影響最后的圖像恢復。Ii+1,j的預測過程可用于Ii,j+1、Ii,j-1、Ii-1,j像素的預測,最后求得目標像素橫向與縱向相鄰參考像素的預測誤差值di,j+1、di,j-1、di-1,j。
(10)
(11)
(12)
(13)
同樣利用所生成的非對稱預測誤差直方圖進行單向平移嵌入第二部分水印信息,至此完成了灰色層所有的嵌入過程,最后采用相同的步驟對白色層進行操作。這里需要注意的是,灰、白兩層均嵌入了一半的有效載荷,即EC/2(EC/4則表示利用每個非對稱直方圖所嵌入的有效載荷)。
圖6給出了本文與Kim等[19]所提出的極值預測器的效果對比,從中可以看出本文中所提出的極值預測器在峰值點數(shù)量上略高于Kim等人,此外NIM也相對較少,其主要原因在于Kim等人所設計的極值預測器只是利用了目標像素十字鄰域上4個像素的最大或最小值,而本文則通過對目標像素進行分組權重賦值計算,得到差值較小的預測誤差值,然后通過對目標像素的4個參考像素進行二次預測,從而得到相應的預測誤差值。由于2個預測誤差值的二次差值要更小于目標像素的預測誤差值,基于參考像素的預測誤差值所生成的極值預測器往往在峰值點數(shù)量上以及NIM上具有更好的效果。
圖6 2種極值預測器效果對比
在利用預測誤差直方圖實現(xiàn)秘密信息嵌入過程中,無效修改像素越多,嵌入容量不會有著任何的增加,相反則會造成載密圖像較大的失真。因此,通過利用相鄰像素計算各像素點的復雜度,然后按照升序進行排列,將水印信息優(yōu)先嵌入到低復雜度的像素點中,這種方法能夠在一定程度上減少無效修改像素數(shù)量,提高載密圖像的視覺質量。為此,本文通過利用周圍像素間的相關性,采用局部方差構造像素局部復雜度近似度量函數(shù),由于本文是分平面進行水印嵌入的,因此其中一個平面像素的改變不會影響到另一個平面,因此復雜度在水印逆向提取時,其值依然不會發(fā)生改變,這也保證了算法的可逆性。像素分布如圖7所示,假設要計算P的局部復雜度值,可由式(14)進行計算
圖7 像素分布示意圖
(14)
由于灰色層與白色層具有相似性,這里將僅解釋灰色層的嵌入過程。對于灰色層的每個像素,需要利用兩類非對稱直方圖連續(xù)執(zhí)行兩次水印信息嵌入。
(15)
其中:d″min為修改后的預測誤差,b1∈{0,1}為第1部分二進制秘密信息,h1為其非對稱預測誤差直方圖峰值點。
設I′(i,j)為嵌入第1輪嵌入水印后的載密圖像,其計算公式為
(16)
(17)
其中:d″max為修改后的預測誤差,b2∈{0,1}為第2部分二進制秘密信息,h2為其非對稱預測誤差直方圖峰值點。
設I″(i,j)為嵌入第2輪嵌入水印后的載密圖像,其計算公式為
(18)
至此基于灰色層所嵌入的水印信息已經全部完成,由于白色層水印信息的嵌入過程與灰色層完全相同,這里就不再過多贅述。
根據(jù)層的優(yōu)先級,圖像恢復和提取是按嵌入的相反順序進行。如果嵌入從灰色層開始,那么提取則應從白色層開始,反之亦然。然而這里為了能夠與上述所描述的嵌入過程相協(xié)調,同樣以灰色層的提取過程為例來進行描述。
(19)
(20)
(21)
(22)
恢復原始圖像Ii,j的計算公式如下:
(23)
(24)
至此灰色平面所嵌入的水印信息已經全部被提取出,并且圖像也實現(xiàn)了無損恢復。
(25)
(26)
(27)
(28)
本文主要是采用基于單向極值預測誤差擴展的可逆信息隱藏算法,主要分為2部分,即水印嵌入及水印提取。
水印嵌入流程如圖8所示。
圖8 水印嵌入流程
具體嵌入流程如下:
步驟1:給定一個M×N8位灰度圖像I(i,j)(0≤I(i,j)≤255)并對其進行掃描,將宿主圖像劃分為如圖3中所示的灰白棋盤格結構。
步驟2:為了能夠解決圖像像素在移動中產生上溢或下溢問題,采用式(20)對圖像進行預處理,然后創(chuàng)建一個位置圖M,將對于灰度值在[1,254]范圍內的像素,我們在位置圖中賦值為0;否則,賦值為1,并記錄它們的坐標信息,最后將位置圖采用算術編碼算法進行無損壓縮,將壓縮后的位置圖附加到水印信息頭部,并一起嵌入到圖像中。位置圖Mi=(M1,….,Mi,…,Mn)被生成和從原始像素P0到預處理后像素P的實現(xiàn)方式如下:
(29)
(30)
步驟3:完成防溢出處理后,按照式(6)采用局部復雜度函數(shù)計算出灰色層各像素的局部復雜度值,并按照復雜度由低到高的順序進行排列。
步驟5:利用上述所求得的最小值二次預測誤差d′min,生成最小非對稱預測誤差直方圖,根據(jù)式(25)找到最佳峰值點hn,并按照式(16)將前半部分水印信息b1優(yōu)先嵌入到復雜度較低的像素中,至此完成第一輪水印信息(EC/4)嵌入,得到載密圖像I′(i,j)。
對于白色層的像素重復前面步驟3—步驟6,并生成最終的載密圖像,嵌入水印信息后的圖像如圖9(b)所示。
圖9 水印嵌入以及圖像恢復前后對比
為了能夠提取水印并從載密圖像中無損恢復原始圖像,采取如下的逆操作過程,水印提取流程如圖10所示。
圖10 水印提取流程
步驟1:掃描圖像并按照像素將含水印圖像劃分為如圖3中所示的灰白棋盤格結構,得到灰、白2層。
步驟2:采用式(6)局部復雜度函數(shù)計算白色層各像素的局部復雜度,并按升序進行排列;
對于灰色層同樣根據(jù)步驟2—步驟4進行水印信息的提取以及圖像的恢復,恢復后的圖像如圖8(c)所示。
為了能夠準確評估本文所提出的算法性能,本次實驗選取了紋理特征各異的4幅尺寸大小為512×512的8位標準灰度圖像作為測試圖像,即Lena、Baboon、Plane和Boat,這些圖像均來自于USC-SIPI數(shù)據(jù)庫,如圖11所示。本次仿真實驗是基于Windows 10系統(tǒng),采用Matlab 2016a所進行的。以PSNR(峰值信噪比)值以及嵌入容量為指標,將本文算法與文獻[20]以及文獻[21]算法進行了比較,從而客觀的衡量出本文所提算法的具體性能。
圖11 測試圖像
PSNR值通常能夠客觀的反映載密圖像的視覺質量,一般PSNR值越高則載密圖像視覺質量也會越高。這里利用Matlab偽隨機數(shù)生成不同長度的二進制序列,用作嵌入的水印信息。
表1和表2分別給出了各測試圖像在10 000 bit以及20 000 bit嵌入量下,本文算法與其他2種算法的PSNR值。通過表中可以得出,當嵌入10 000 bit水印信息時,采用本文算法所得到的圖像PSNR均值比其他2種方法分別高出3.4%和5.2%;當嵌入20 000 bit水印信息時,則比其他2種方法分別高出2.8%和4.8%,因此本文算法相較于文獻[20]和文獻[21]2種算法,其嵌入水印后的載密圖像視覺質量更高。
表2 算法的PSNR值比較(嵌入20 000 bit)
在本實驗中,為了能夠進一步衡量本算法所具有的性能優(yōu)勢,從1 000 bit開始,依次將不同大小的水印信息嵌入到4幅紋理各異的測試圖像中,然后對其PSNR值進行計算。實驗結果如圖12所示,該圖為嵌入容量不同時,本文算法與文獻[20]和文獻[21]2種算法的PSNR對比曲線圖。
圖12 3種算法在4幅測試圖像中PSNR值曲線
從圖12中可以看出當嵌入容量相同時,本文算法的PSNR值均高于其他2種算法。以紋理較為復雜的boat圖和紋理較為平滑的Plane圖為例,當boat圖嵌入容量為5 000 bit時,本算法的PSNR值為59.82 dB,比文獻[20]和文獻[21]的方法分別高出1.04、1.7 dB,將嵌入容量增加至25 000 bit時,本算法的PSNR值為52.19 dB,而其他2種方法的PSNR值則為51.65、50.37 dB,因此本文算法PSNR值均高于其他2種方法;對于plane圖,同樣當嵌入容量為5 000 bit時,本文算法PSNR值為65.87 dB,而文獻[20]和文獻[21]方法PSNR值雖然也較高,但均小于64 dB,隨著嵌入容量的增加,本文算法與其他2種方法的PSNR差值在不斷減小,但本文所提算法的PSNR值仍然最高,嵌入性能優(yōu)于其他2種方法。
本文中所提出的是基于單向極值預測誤差擴展的可逆信息隱藏算法,通過利用兩層四輪單向預測誤差擴展來使得本算法在保證一定的視覺質量下具有較大嵌入容量,圖12給出了本文算法與文獻[20]與文獻[21]的最高嵌入容量對比情況。
從圖13可以看出,本文算法具有較高的嵌入能力,其最高嵌入容量均大于其他2種算法。此外本算法與文獻[20]方法有著相似的嵌入容量,但仍舊具備一定的優(yōu)勢。對于紋理簡單的Plane圖,本算法與文獻[20]和文獻[21]的嵌入容量分別為79 485、74 695、58 052 bit,通過計算可得出本文算法與其他2種算法相比,分別提高5.9%和36.29%;對于紋理較為粗糙的圖像例如boat圖,文獻[20]和文獻[21]2種方法的嵌入容量分別為38 198 bit和27 190 bit,而本文所提算法的嵌入容量為40 173 bit,分別提高了8.6%和56.6%。
圖13 3種算法的嵌入容量對比
根據(jù)以上仿真實驗對比結果可知,本文算法無論在載密圖像視覺質量以及嵌入容量上均優(yōu)于其他2種算法,其主要原因在于文獻[20]是采用圖像分塊的方法來自適應嵌入水印,主要針對于平滑的塊采用預測誤差擴展進行水印信息的嵌入,這樣雖然能夠在一定程度上提高圖像視覺質量,但是在目標像素預測時只是采用普通的菱形預測,因此預測精度不高,特別對于紋理較為復雜的boat圖,嵌入容量會大大降低;文獻[21]通過利用3個相鄰像素之間的差值,即2個相鄰像素差值的差值所存在的冗余性,通過差值直方圖平移來提高了水印信息的嵌入容量,雖然增加了峰值,但并沒有考慮到如何提高載密圖像的視覺質量。而本文則給出了一種新的動態(tài)權重賦值預測計算方法,提高了目標像素的預測精度,并利用相鄰預測誤差值的強相關性,同時結合兩次非對稱直方圖平移時所發(fā)生的像素補償效應,因此載密圖像的失真度相對較小,而且由于采用兩層四輪的水印嵌入方法,在嵌入容量上也相對較高。
為提高算法的嵌入容量和視覺質量,提出了基于單向極值預測誤差擴展的可逆信息隱藏算法,通過利用相鄰像素具有高相關的預測誤差值思想,選擇極值預測器生成非對稱直方圖,同時給出了峰值最佳選擇函數(shù)來確定最佳峰值,提高了載密圖像的視覺質量。
仿真實驗結果表明,該算法能夠大幅度提高水印信息的嵌入容量,并且還能使得載密圖像保持較好的不可感知性。