張秋余 馮玉春
(蘭州理工大學計算機與通信學院 甘肅 蘭州 730050)
為了更好地實現隱秘通信以及提高保護傳輸圖像數據的安全性,通常需要對圖像進行加密,然后進行數據隱藏。因此,基于加密域圖像的可逆數據隱藏技術成為了近年來的研究熱點,被廣泛應用于軍事、醫學和法律等應用領域[1]。
現有加密圖像可逆數據隱藏算法主要分為:LSB算法[2-4],通過翻轉最低有效位進行秘密數據的嵌入;差值擴展算法[4-5],計算相鄰像素間的差值,并擴展差值后嵌入秘密信息;直方圖轉換算法[6-10],首先找到的峰值點和零值點像素對,然后通過平移進行秘密數據嵌入等。2011年,Zhang[2]提出了密文域可逆數據隱藏算法,在流密碼加密的圖像中反轉3個LSB嵌入秘密數據,該方法利用原始圖像的平滑度進行數據提取。為提高數據的嵌入量,王子馳等[3]提出了一種多比特嵌入的可逆信息隱藏算法,對分塊后的圖像根據嵌入密鑰在每塊中生成多個集合,通過修改集合中的數進行多比特位嵌入,從而很大程度上提高了容量。鄢舒等[4]采用異或-置亂的加密方法,來提高算法的安全性,秘密信息的嵌入式同過比特替換來執行,但是嵌入容量相對較低。后來,Jung等[5]提出了一種大容量的可逆數據隱藏算法,將圖像分成不重疊的3×1的子塊,進行升值排序計算最大和最小差值,然后將數據(兩位數)嵌入在差值中形成新的像素,具有較高的嵌入容量和圖像質量。Shiu等[6]在圖像加密之前預先計算相鄰像素對的差值,然后對差值進行加密再進行秘密數據的嵌入,嵌入容量相對較低。在此基礎上,Wu等[7]提出了一種預測差值的差值直方圖轉換的可逆數據隱藏算法,將信息嵌入到兩次預測差值直方圖中,該算法具有較高的嵌入容量和較低的失真率。為進一步提高嵌入的容量,錢華山等[8]利用雙層嵌入的方法,將原始圖像劃分為不同的類型,即水平分塊和垂直分塊,并找到不同類型的最大絕對差,由于像素的LSB 位對圖像質量的影響很小,因此信息嵌在第一個像素和第三個像素的LSB中,通過求絕對差和多層嵌入來提高嵌入容量。為增大嵌入容量,基于多維直方圖轉換[9-10]的方法被提出。Li等[9]提出一種基于二維差值直方圖轉換的方法,Xue等[10]提出一種自適應調整的差值對映射,相比文獻[9]更好地利用了圖像的冗余性,嵌入容量較高,圖像失真度較低。Yin等[11]提出了一種基于多層加密和塊直方圖轉換的可逆數據隱藏技術,用約瑟夫遍歷和流密碼相結合的加密方法,改善了原始圖像的安全性,但是嵌入容量較低。文獻[12]和文獻[13]采用公鑰對圖像進行加密,但嵌入容量非常低,并且在直接解密的情況下圖像失真也很嚴重。為解決這一問題,Nyuyen等[14]在圖像加密前先預留空間然后進行秘密數據嵌入,然而,該方法未利用相鄰性素間的相關性,并且定位圖在一定程度上影響嵌入容量。由以上文獻分析可知,現有方法存在著嵌入容量相對較低,或者在嵌入較大容量時圖像的感知質量相對降低等問題在實際應用中,彩色圖像比灰度圖像和二值圖像的應用更普遍。因此,研究密文彩色圖像可逆數據隱藏技術具有重要的理論意義和實用價值。
針對以上問題,本文結合混沌加密和塊直方圖轉換算法,提出了一種自適應的密文彩色圖像可逆數據隱藏算法。該方法首先用Logistics混沌置亂算法對原始圖像進行加密,再根據設定的波動閾值將加密后的圖像塊自適應地分成平滑塊和陡峭塊,選擇陡峭塊進行直方圖平移嵌入,平滑塊進行比特位替換嵌入。實驗表明,該算法在具有較大嵌入容量的同時感知質量也較好,并且進行噪聲和剪切攻擊時魯棒性較好,接收端也能夠提取秘密信息并無失真地恢復出原始圖像。
混沌系統[15]加密的序列是由系統迭代產生,混沌系統具有隨機性以及敏感性等。從混沌系統的方程中通常很難推斷出其初始值。其數學公式定義如下:
(1)
式中:控制參數μ∈(0,4],xi∈[0,1],i∈Z,并且該映射所產生的序列由μ和x的初始值x0控制。圖像置亂[16]的實質是破壞相鄰像素間的相關性,通過位置空間的變換來置亂像素,這樣只是打亂了像素的位置,然而像素的大小并沒有發生變化,因此加密后圖像的直方圖也不會變。如果將置亂算法看作是映射關系,那么原始圖像和加密后圖像就是一一對應的。假設原始圖像為Y0,并且映射關系用字母σ表示,并得到置亂后的圖像Y1,則圖像之間的映射關系可以表示為:
(2)
對直方圖峰值點較高、圖像陡峭的塊,不僅可以改動較少的像素點而且還能嵌入更多的秘密數據;對于峰值點低、圖像平滑的塊,不僅需要改動更多的像素點而且嵌入的容量也小。因此,對波動閾值[17]進行改進,根據改進后的波動閾值Tf將圖像分成陡峭塊和平滑塊,選擇不同的塊進行不同方法的秘密數據嵌入。閾值的計算公式如下:
(3)
式中:l表示塊的長度,gmax表示峰值點的個數,gi表示峰值點相鄰像素的像素數,通過對峰值點數和相鄰像素點數的平均值做差取平方,近而放大差距程度,更加直觀地反映出直方圖的波動情況。當波動閾值Tf越小時,直方圖越平滑,嵌入的秘密信息就越少;當波動閾值Tf越大時,直方圖越陡峭,嵌入的秘密數據容量就越大。
基于塊直方圖平移[18]的可逆數據隱藏算法主要通過峰值和零值點對的平移來嵌入秘密數據,假設每個圖像塊Q中的像素為qi,j,對每個圖像塊進行掃描,找出塊直方圖中的兩個峰值點qi,l、qi,r,根據下式,判斷出最大峰值點gi,r和次大峰值點gi,l:
gi,l=min(qi,l,qi,r)gi,r=max(qi,l,qi,r)
(4)
式中:qi,l和qi,r分別代表兩個峰值點像素,用gi,r代表最大峰值點像素,gi,l代表最小峰值點像素。
對小于峰值點gi,l的像素和大于峰值點gi,r的像素分別進行向左和向右平移,否則像素值保持不變。
(5)
式中:qi,j代表每個圖像塊中的像素,q′i,j代表像素平移之后的像素值。
將嵌入的秘密數據x(x=0,1,2,3)通過對峰值點像素的平移進而實現秘密信息的嵌入,具體嵌入過程如下式所示:
(6)
算法原理如圖1所示。

圖1 直方圖平移原理
按照上述方法處理完成圖像塊的直方圖平移嵌入。
在直方圖平移前,采用直方圖收縮的方法來防止像素值的上溢和下溢,也就是對圖像要先進行預處理,通過對飽和像素進行平移并做標記,來防止嵌入過程中像素的上下溢出[11]。本文首先對每個圖像塊Q中的像素q進行掃描,對于l比特的灰度圖像,它的像素取值范圍應是0~2l-1。當像素值qi,j∈{3,2l-1-3}時,像素值的大小不變;當像素值qi,j∈{0,2l-1}時,如果像素是飽和像素,對其改變的值在位置映射圖H中標記為0,對未改變的像素值標記為1,否則不標記。
(7)
首先,將原始彩色圖像分成R、G、B三個色彩分量,并在分離的基礎上分別對三個分量進行混沌置亂加密;然后對加密后的圖像塊根據塊直方圖的波動情況,自適應地將圖像分成陡峭塊和平滑塊,分別對平滑塊和陡峭塊進行秘密數據的嵌入;最后通過算法的逆運算提取出秘密數據,并且得到解密圖像,同時恢復出原始彩色圖像,即載體圖像。本文提出的自適應的密文彩色圖像可逆數據隱藏算法的原理框圖如圖2所示。

圖2 自適應的密文彩色圖像可逆數據隱藏算法
首先我們采用Logistics混沌置亂加密算法對N×N的原始彩色圖像C進行加密,具體加密步驟如下:
步驟1將明文圖像C分成R、G、B三個色彩分量,并將N×N的數字圖像轉化為N×N的參數矩陣。即:紅色分量:R=C(:,:,1),綠色分量:G=C(:,:,2),藍色分量:B=C(:,:,3)。
步驟2用加密密鑰μ和m0作為初始值,通過Logistics混沌映射生成N×N的混沌序列A。然后將序列A中的每個元素擴大N×N倍以獲得新的整數序列W。
步驟3用整數序列W產生隨機坐標,將W中每個像素對N取整,隨機產生行坐標x,對N取余,隨機產生列坐標y,然后將R(i,j)像素值賦給R′(x,y),最后得到新的加密后的圖像R′。
步驟4然后對G′、B′分別按照步驟2和步驟3 進行像素位置的置亂,最后將R′、G′、B′合并得到最終加密的彩色圖像C′。
在獲得加密圖像C′后,對加密圖像C′嵌入秘密數據。具體嵌入步驟如下:
步驟1將加密圖像C′分成R′、G′、B′三個通道。基本原則是在通道分離過程中,將剩余的兩個置零,然后依次進行處理。
步驟2首先對紅色通道R′進行分塊,分成互不重疊的圖像塊,假設每塊圖像的大小為u×u,本文每塊圖像的大小為4×4,即u=4。
步驟3根據式(3)計算圖像中每塊的波動值,然后將其和設定的閾值Tf進行比較,當計算的波動值小于閾值Tf時,圖像被分為平滑塊;當計算的波動值大于閾值Tf時,圖像被分為陡峭塊,然后對不同的塊自適應地采取不同的嵌入方法。
步驟4對平滑塊,先將塊中的像素轉化成八個平面位,再從最高平面位找非零的比特位平面,然后該平面位與設定的閾值t=4進行差運算,即得到嵌入比特位數,進而自適應地逐個進行秘密數據的比特位替換,然后將嵌入后的數值轉化成十進制的數。
步驟5對陡峭塊,首先進行像素值上下溢出的預處理,對可能溢出的像素按照式(7)進行平移并做標記,得到定位圖H。
步驟6在直方圖中找到最大峰值點gi,r和第二峰值點gi,l,以第二峰值點在最大峰值點左邊為例,然后找出兩對零值點。
步驟7根據直方圖的分布,將小于gi,l的像素值像左平移三位,將大于gi,r的像素值向右平移三位,其他像素值保持不變。
步驟8按順序掃描載體圖像,當掃描到的像素值是gi,r時,如果嵌入的秘密數據是00,則像素值不變;秘密數據是01,則像素值加1;秘密數據是10,則像素值加2;秘密數據是11,則像素值加3。當掃描到的像素值是gi,l時,如果嵌入的秘密數據是00,則像素值不變;秘密數據是01,則像素值減1;秘密數據是10,則像素值減2;秘密數據是11,則像素值減3。如果最大峰值點在第二峰值點左邊時,只需調整平移方向即可,將嵌入秘密數據的位置標記為1,生成定位圖map,再將定位圖H和map進行異或加密,然后嵌入到載體中。
步驟9按上述方法分別對G′、B′進行秘密數據的嵌入,得到嵌入有效數據的單通道密文圖像,然后合并三個色彩通道,得到隱秘載體圖像S。
當接收端對接收到的圖像先進行解密,解密過程是加密的逆過程,具體過程如下:
步驟1將提取秘密信息后的圖像S分成三個色彩分量,然后再將每個分量轉化成參數矩陣。
步驟2接收端根據解密密鑰,利用Logistics混沌映射原理產生混沌序列A′。
步驟3將得到的新混沌序列A′中的每個元素乘以N×N得到新的整數序列W′。
步驟4由整數序列W′隨機生成橫坐標x和縱坐標y,然后將像素值賦給R″(x,y),最后得到解密后的圖像R″。
步驟5然后對G″、B″分別按照步驟3和步驟4 進行像素位置的還原,最后將R″、G″、B″合并得到,得到圖像S″。
步驟1按照與數據嵌入方法相同的方式,將含有秘密數據的解密圖像分成三個色彩分量,然后再對每個分量進行分塊。
步驟2根據輔助信息和嵌入算法的逆過程,先將平滑塊中的像素轉化成八個平面位,然后找非零的比特位平面,再根據設定的閾值計算出嵌入的比特位數,進而自適應地逐個提取出秘密數據。
步驟3將陡峭塊按嵌入數據的順序對圖像進行掃描,仍以最大峰值點在第二峰值點右邊為例,當發現像素值是gi,l時,提取出的數據為00;當發現像素值是gi,l-1時,提取的數據為01;當發現像素值是gi,l-2時,提取的數據為10;當發現像素值是gi,l-3時,提取的數據為11;當發現像素值是gi,r時,提取的數據為00;當發現像素值是gi,r+1時,提取的數據為01;當發現像素值是gi,r+2時,提取的數據為10;當發現像素值是gi,r+3時,提取的數據為11。如果最大峰值點在第二峰值點左邊,只需調整平移方向即可。掃描完成后,秘密數據提取完畢。
步驟4恢復原始載體圖像,按嵌入數據的順序掃描,像素點為gi,l-1、gi,l-2、gi,l-3的像素值都變為gi,l,像素點為gi,r+1、gi,r+2、gi,r+3的像素值都變為gi,r,將大于gi,r的像素值都減3,將小于gi,l的像素值都加3,掃描完成后合并三個通道,得到恢復后的載體圖像。
本文采用的實驗硬件平臺為:AMD phenom II X4 CPU, 8GB,3.01 GHz,實驗環境是Windows 7操作系統下的MATLAB R2013a。從USC-SIPI標準彩色圖像庫中選擇具有不同紋理特征的4幅24位彩色圖像(512×512)Lena、Airplane、Baboon、Peppers圖像作為測試載體圖像,如圖3所示。秘密數據選擇隨機的二進制數。

圖3 實驗采用的載體圖像
該實驗通過峰值信噪比(PSNR)和嵌入率來評估恢復質量和嵌入容量,分析算法性能。
1) 峰值信噪比。PSNR定量地評價了明文圖像和嵌入秘密數據后圖像的相似度,PSNR值越大圖像保真度越好,其計算公式如下:
(8)
式中:MSE是明文圖像C和隱密載體S之間的均方誤差,其被定義為:
(9)
2) 嵌入容量。嵌入容量用來評價嵌入數據的多少,使用嵌入率(ER)代表嵌入容量,其定義為:
(10)
式中:capacity為嵌入的總數據位的個數,M、N是圖像長和寬。
3) 結構相似度(SSIM)。結構相似度[19]將亮度和對比度從圖像的結構信息中分離,并結合結構信息對圖像質量進行評價。該方法是目前最常用的評價圖像質量的方法,通常與PSNR結合起來全面地評價圖像質量。其定義為:
SSIM(x,y)=l(x,y)C(x,y)S(x,y)
(11)
式中:l(x,y)、C(x,y)、S(x,y)分別為x與y的亮度函數、對比度函數和結構函數。
首先,選擇512×512的Lena測試圖像進行實驗,原始圖像如圖4(a)所示,經過加密后得到圖像4(b),可以看出,加密后的圖像變得雜亂無章,并且在視覺上是不可見的。再將加密后的圖像分成4×4的不重疊塊,同時隨機的生成2 413比特,即將嵌入率為0.009 2 bpp的秘密數據嵌入到加密圖像中,如圖(c)所示。圖4(d)是根據解密密鑰將含秘密信息的圖像解密后得到的圖像,峰值信噪比為56.41 dB,可以看出,解密后含有秘密數據的圖像已經幾乎接近明文圖像。圖4(e)是提取秘密數據后恢復的載體圖像,為了更進一步說明加密算法的恢復效果,將恢復出來的圖像與原圖像做差運算,得到的差值如圖4(f)所示,可以看出:差值接近于0,即恢復出的圖像幾乎接近于明文圖像,因此該算法實現了加密域數據的可逆嵌入和提取以及圖像的恢復。



圖4 加密圖像的嵌入和提取以及圖像的恢復
表1為本文方法在不同嵌入容量時分別選擇Lena、Baboon、Airplane、Peppers圖像作為測試載體圖像的PSNR值和SSIM值。

表1 不同嵌入容量下的PSNR和SSIM值
由表1可知,隨著嵌入率的逐漸增大,峰值信噪比和結構相似度也隨之逐漸減小。當嵌入率達到0.687 bpp時,4幅圖像的峰值信噪比都在35 dB以上,這表明加密后的含秘圖像的不可感知性較好。
為了更進一步說明本文方法的圖像質量、嵌入容量和結構相似度等性能,通過與文獻[14]、文獻[6]、文獻[12]、文獻[13]和文獻[14]的算法進行比較,結果如圖5所示。




圖5 不同算法的性能比較
圖5的4幅圖分別為圖像Lena、、Peppers、Baboon、Airplane利用本文算法和現有算法在不同嵌入數據的情況下峰值信噪比的對比圖。可以看出,本文提出的方法有效提高了嵌入率,并且峰值信噪比均在33 dB以上,具有較好的圖像質量。本文根據設定的閾值對圖像塊進行分類,對陡峭塊采用直方圖平移的多比特嵌入,對平滑塊的高平面位像素進行替換嵌入。在嵌入容量相同的情況下,本文算法的圖像恢復質量相比于文獻[6]、文獻[13]和文獻[4]方法有一定的提高;在峰值信噪比一定的情況下,本文算法比文獻[14]和文獻[12]方法更適合嵌入大容量秘密數據。這是因為本文算法在秘密數據嵌入的過程中,只對像素點集中的塊,即陡峭塊,進行直方圖平移嵌入,因為平滑塊像素點相對較分散,嵌入的秘密數據不僅少而且對圖像質量影響也很大,因此,相比于文獻[6]和文獻[4]的方法,當嵌入容量相同時,本文算法具有較好的峰值信噪比;又因為本文算法在直方圖嵌入中進行多比特嵌入,對平滑塊也進行高平面位秘密數據嵌入,并且對定位圖進行了縮減,減少了輔助信息的嵌入,因此,與文獻[14]和文獻[12]的方法相比,能嵌入更多的嵌入容量,更適用于大容量秘密數據的嵌入。
以Lena圖像作為測試載體,取不同的波動閾值T,分析隨著波動閾值的變化峰值信噪比和最大嵌入率隨之變化的情況,結果如圖6所示。

(a) 與峰值信比的關系

(b) 與嵌入率的關系圖6 波動閾值與峰值信噪比和 嵌入率之間的變化關系
從圖6中可以看出,當波動閾值增大時,峰值信噪比隨之增大,但嵌入率隨之降低,也就是說,可以通過改變波動閾值的大小來調整嵌入率和峰值信噪比。因而根據嵌入者的需求,可以靈活調整嵌入率和圖像質量之間的關系。本算法為了使嵌入率和峰值信噪比相對達到平衡,在實驗過程中取波動閾值T=3。
為了驗證算法的魯棒性,對嵌有秘密信息的圖像進行噪聲、剪切和旋轉攻擊,對抗攻擊性能進行分析。以Lena圖像為載體,圖7(a)分別是受到均值M=0,方差V=0.0001的噪聲攻擊、1/16的剪切攻擊和逆時針旋轉45度的攻擊圖片,圖7(b)分別是恢復后的圖片。

(a) 攻攻后的隱密載體

(b) 攻擊恢復后的載體圖7 攻擊前后的圖像載體
表2為圖像Airplane、Lena、Baboon、Peppers四種不同彩色圖像在相同嵌入率下受到噪聲、剪切和旋轉攻擊之后的峰值信噪比變化情況。

表2 相同嵌入容量下不同攻擊的PSNR值
從表2中可看出,噪聲和剪切攻擊的平均PSNR值在32 dB以上,抗噪聲和剪切功能相對較好,但是抗旋轉攻擊相對抗噪聲和剪切攻擊能力較弱。
3.6.1加密算法的安全性分析
(1) 敏感度分析。為說明加密算法的安全性,分析了加密密鑰的靈敏度。假設攻擊者已經知道加密圖像,我們對解密圖像的安全性進行分析。文獻[16]證明圖像在加密和信息嵌入的過程中對密鑰的變化特別靈敏,只要密鑰稍微改變,就會改變混沌映射的初始狀態,最后得到錯誤的解密圖像,從而導致圖像最終不能被恢復。如當加密密鑰0.700被錯誤輸成0.699時,接收端就會出現解密錯誤。如圖8所示,(a)、(b)分別為正確密鑰和錯誤密鑰的解密效果示意圖。因此,攻擊者在已知加密圖像的情況下,提供的加密算法相對是安全的。

圖8 正確密鑰和錯誤密鑰的解密效果圖
(2) 相關性分析。相關性[20]用于表示圖像中兩個相鄰像素點之間的密切程度,可以非常直觀地反映出圖像中的像素點被打亂的情況。如果相關性越低,那么表示像素點被打亂的越完全,反之則說明像素點的混亂程度還不夠。通過相關系數來驗證相關性,并且相鄰像素的相關系數可以反映出圖像像素的擴散程度。相關系數越接近于0,說明圖像的像素點間越不具備相關性,越接近于1,則像素之間越具有相關性。相關系數的計算公式如下:
(12)
(13)
(14)
式中:x和y分別是兩個鄰近像素點的灰度值,rxy表示相關系數。
從明文圖像和加密圖像中分別隨機抽取5 000對相鄰像素,并分別從水平方向、垂直方向和對角線方向測試相鄰像素間的相關性。按照式(12)-式(14)計算每對的相關系數,結果列于表3中。

表3 Peppers圖像相關性分析
可以看出,明文圖像的相關系數均超過了0.9,說明明文圖像相鄰像素的相關性很強,而加密圖像相鄰像素的相關系數均小于0.01,說明加密圖像相鄰像素的相關性很弱。為了更清楚地顯示結果,以Peppers圖像為例,圖9給出了明文圖像與加密圖像的相關性分布圖。

(a)

(b)

(c)

(d)

(e)

(f)圖9 Peppers圖像水平、垂直和對角線相關性分布圖
圖9(a)-(c)是明文圖像分別在水平、垂直和對角線方向上的相關性分布圖,可以看出,像素點聚集在一條對角線附近,說明像素間的相關性很明顯。圖9(d)-(f)是加密圖像的水平方向、垂直方向和對角線方向的相關性分布圖,像素點零散的分布在整個平面上,表明加密圖像各個方向上像素間的相關性很弱。
3.6.2嵌入算法的安全性分析
假設攻擊者已經知道圖像的恢復和秘密數據的提取過程,我們分兩種情況討論:不知道解密圖像、知道解密圖像。
首先,在提取秘密數據和恢復圖像之前要獲得解密圖像,但是根據上述加密安全性分析可知,直接獲得解密圖像是不容易的。因此,攻擊者在不知道解密圖像的情況下,是很難提取出秘密數據并恢復出原始圖像。
其次,如果攻擊者已經知道解密圖像,但是在數據提取和圖像的恢復過程中是要知道輔助信息,比如位置圖和秘密數據的比特位,然而在嵌入的過程中對輔助信息已經進行了異或加密,假設輔助信息的長度為n,那么攻擊者獲得輔助信息的概率為1/2n。因此,攻擊者難以準確地提取秘密數據并恢復原始圖像。
為解決現有算法嵌入容量低以及在嵌入容量較大時圖像感知質量較低等問題,本文提出了一種自適應的密文彩色圖像可逆數據隱藏算法,根據設定的閾值自適應地對陡峭塊進行直方圖多比特位嵌入來提高嵌入容量;對平滑塊進行平面位的替換進行秘密數據嵌入,進而提高圖像的不可感知性。實驗結果表明,當嵌入率為1.142 bpp時,峰值信噪比可達35 dB以上,且進行噪聲、剪切攻擊時魯棒性較好,與現有方法相比在增大嵌入率的同時提高了圖像感知質量,并且圖像能得到很好的恢復。本文算法的不足之處在于抵抗外界的旋轉攻擊能力較差。
下一步的研究計劃是將該方法應用到頻域中,從而提高算法的魯棒性。