王若飛,劉 鋒
(安徽大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230601)
通過修改圖像的選定元素,信息隱藏技術(shù)可以將需要隱藏的數(shù)據(jù)嵌入到圖像媒體中。傳統(tǒng)的信息隱藏技術(shù)經(jīng)常出現(xiàn)載體信息缺失的情況,并且是不可逆的,這表明在提取出隱藏數(shù)據(jù)之后,載體媒體將無法恢復(fù)。作為一種重要的數(shù)據(jù)嵌入方案,可逆信息隱藏不僅可以準(zhǔn)確地提取秘密信息,而且還可以完美地重建原始圖像而不會出現(xiàn)任何失真[1]。JPEG圖像是最流行的壓縮圖像格式之一,在可逆信息隱藏領(lǐng)域具有重要應(yīng)用,例如將地理位置信息嵌入到遙感衛(wèi)星圖像中,將患者信息嵌入到醫(yī)學(xué)圖像中[2]等。
隨著數(shù)據(jù)的數(shù)字化和通信的網(wǎng)絡(luò)化,互聯(lián)網(wǎng)安全問題變得越來越重要。為了保護(hù)網(wǎng)絡(luò)使用安全和秘密信息的傳遞而出現(xiàn)了加密方法,通過將秘密信息加密到載體中,可避免載體的失真以及完美地重建原始圖像??赡嫘畔㈦[藏是一種特殊類型的信息隱藏。通過可逆信息隱藏,原始圖像和秘密信息都可以從標(biāo)記的載體圖像中恢復(fù)而不會丟失。
當(dāng)前的信息隱藏方法大多將研究路程集中在空間域和變換域上。然而,作為壓縮圖像格式,JPEG圖像數(shù)據(jù)的冗余度低于未壓縮圖像的冗余度。JPEG圖像的可逆數(shù)據(jù)隱藏算法在逆量化處理期間會使圖像失真,即修改DCT系數(shù)會使圖像的空間域產(chǎn)生變化,從而造成圖像的失真。同時,基于JPEG圖像的可逆信息隱藏方法,壓縮域的修改可能導(dǎo)致圖像文件大小的顯著增加。
為了解決上述問題,本文提出了一種有效的面向JPEG圖像的可逆信息隱藏算法。在保證圖像原本質(zhì)量的前提下,該算法選擇對圖像影響小的系數(shù)進(jìn)行嵌入,并在嵌入秘密信息后降低對圖像文件的比特流擴(kuò)展。一般來說,本文通過對同一頻率下量化的DCT系數(shù)嵌入比特位來模擬測試圖像的失真。為了確保圖像成像質(zhì)量和圖像文件大小增加的幅度,優(yōu)先選擇對圖像質(zhì)量產(chǎn)生較小影響的量化DCT系數(shù)進(jìn)行嵌入信息,直到嵌入全部的秘密信息。在嵌入秘密信息過程中產(chǎn)生的嵌入順序策略,可以不必對未選擇的系數(shù)進(jìn)行移位,進(jìn)而降低了圖像文件大小的比特流擴(kuò)展。
本文的其余章節(jié)內(nèi)容安排如下:第2節(jié)討論相關(guān)工作;第3節(jié)介紹初步知識和擬議的算法,在本文算法中,JPEG圖像中所有的8×8塊中量化的DCT系數(shù)重新排列成新的矩陣。對在相同頻率下的系數(shù)進(jìn)行模擬嵌入比特位,優(yōu)先選擇失真小的頻率下的系數(shù)嵌入信息,直到嵌入完秘密比特流信息;第4節(jié)評估實驗結(jié)果;最后,第5節(jié)簡要總結(jié)了論文,并提出了未來研究方向。
本領(lǐng)域已經(jīng)出現(xiàn)了許多可逆信息隱藏技術(shù)。通常,基于圖像的可逆信息隱藏方法可以分為空間域方法、頻域方法和壓縮域方法。
空間域方法直接將秘密信息嵌入到封面圖像的像素中,這種方法可以分為差異擴(kuò)展DE(Differential Expansion)[3]和直方圖移位HS(Histogram Shift)[4,5]2類。Tian等人[6]提出的DE算法是計算2個相鄰像素之間的差異,然后擴(kuò)展該值以騰出其圖像像素的最低有效位LSB(Least Significant Bit)來隱藏1位秘密數(shù)據(jù)。Thodi等人[7]提出了一種PEE(Prediction Error Expansion)技術(shù),通過使用單個像素及其預(yù)測值來攜帶秘密信息以增加DE中嵌入的秘密位的數(shù)量。 Hu等人[8]對Thodi等人的算法進(jìn)行改進(jìn),設(shè)計出的算法不僅減少了對圖像的不必要更改,而且在相同的圖像質(zhì)量下,往往具有更大的嵌入容量。 Xiao等人[9]通過對生成的二維預(yù)測誤差直方圖2D-PEH(2D Prediction Error Histogram)進(jìn)行修正,充分利用了預(yù)測誤差之間的相關(guān)性,在基于2D-PEH的特定劃分,擴(kuò)展區(qū)間選擇被歸結(jié)為選擇一條最優(yōu)路徑問題,并且通過采用最優(yōu)擴(kuò)展區(qū)間來自適應(yīng)地確定直方圖修改映射,然后根據(jù)獲得的修改映射進(jìn)行可逆嵌入。
壓縮圖像的信息冗余要比未壓縮圖像的少,因此壓縮圖像的信息隱藏要更加困難。頻域和壓縮域方法首先使用合適的壓縮機(jī)制對載體圖像進(jìn)行變換,例如離散余弦變換DCT(Discrete Cosine Transform)、離散小波變換DWT(Discrete Wavelet Transform)或相似的方法;然后在信息變換的基礎(chǔ)上,將載體信息與壓縮圖像中的部分系數(shù)進(jìn)行組合,進(jìn)而達(dá)到嵌入秘密信息的目的。作為壓縮圖像的代表,基于JPEG圖像的可逆信息隱藏是壓縮域中最常用的方法之一。通常將秘密數(shù)據(jù)嵌入JPEG圖像中的可逆信息隱藏算法主要有基于修改量化的DCT系數(shù)對JPEG圖像的可逆數(shù)據(jù)隱藏算法、基于量化表的修改的可逆數(shù)據(jù)隱藏算法和基于哈夫曼表的修改的可逆數(shù)據(jù)隱藏算法等。
通過修改哈夫曼表和利用可變長度編碼VLC(Variable Length Code)嵌入消息[10 - 12]的方法可以無損地維持JPEG圖像的成像質(zhì)量,但這種方法只有有限的嵌入秘密信息的能力,不能滿足更高的嵌入標(biāo)準(zhǔn)。Chang等人[13]利用每個8×8塊中的2個連續(xù)的中頻分量的零系數(shù)來隱藏秘密數(shù)據(jù),此外通過修改量化表來保持偽裝圖像的質(zhì)量。Xuan等人[14]使用優(yōu)化的查找方法來轉(zhuǎn)換量化的DCT系數(shù)直方圖,以提高JPEG圖像信息隱藏的性能。該方法將秘密數(shù)據(jù)嵌入到JPEG量化后的8×8塊DCT系數(shù)中。通過對每個8×8塊的所有AC系數(shù)的平方求和獲得空間域中的塊熵,并以此為基礎(chǔ)提出了用于JPEG圖像的可逆數(shù)據(jù)隱藏方案。Chang等人[15]提出了一種無損和可逆的隱寫方案。在該方案中,每個塊中中頻分量的2個連續(xù)零系數(shù)用于隱藏秘密數(shù)據(jù)。為了達(dá)到更好的圖像保真度,提高嵌入秘密信息容量的目的,Wang等人[16]提出將量化表的條目除以整數(shù),然后將相應(yīng)的量化DCT系數(shù)乘以相同的整數(shù),來構(gòu)成數(shù)據(jù)嵌入的空間。但是,這種隱藏信息的方法也會產(chǎn)生大的比特流擴(kuò)展。Huang等人[17]提出了一種優(yōu)秀的基于HS的JPEG圖像信息隱藏算法,雖然該算法在維持視覺質(zhì)量和降低JPEG文件的比特流擴(kuò)展方面有優(yōu)勢,但它嵌入的秘密信息容量和隱藏信息后的文件大小仍然有改進(jìn)的空間。因此,Liu等人[18]提出了一種新的JPEG圖像信息隱藏方案。在該方案中,非零量化的AC系數(shù)被巧妙地修改以嵌入秘密信息,比基于HS的JPEG圖像信息隱藏方案有更高的嵌入容量。Hou等人[19]采用塊選擇策略,通過模擬每個DCT塊的相應(yīng)嵌入失真,并且優(yōu)先選擇模擬失真較小的像素塊進(jìn)行嵌入,直到給定的秘密信息被完全嵌入為止。
JPEG圖像壓縮過程如圖1所示。
Figure 1 JPEG image compression process圖1 JPEG圖像壓縮的過程
JPEG編碼器主要由3部分組成,即DCT、量化和熵編碼。對非重疊8×8塊的系數(shù)值進(jìn)行DCT變換,原始圖像數(shù)據(jù)從空間域變換到頻率域。然后將所獲得的DCT系數(shù)通過使用預(yù)定量化表進(jìn)行量化。量化后的DCT系數(shù)被設(shè)置好的掃描順序進(jìn)行掃描,使用壓縮差分脈沖編碼調(diào)制DPCM(Differential Pulse Code Modulation)編碼直流(DC)系數(shù)以及游程長度編碼AC系數(shù)。最后,對符號字符串進(jìn)行哈夫曼編碼,以獲得最終壓縮的比特流。在預(yù)處理標(biāo)頭之后,獲得最終的JPEG圖像。對于量化后的8×8塊正向DCT和8×8逆DCT(IDCT)的數(shù)學(xué)定義分別如式(1)和式(2)所示:
(1)
(2)
其中,
(3)
其中,0≤u,v<8;f(x,y)是圖像原始的灰度值;式(3)為c(u)的取值范圍。F(u,v)是經(jīng)過DCT變換的DCT系數(shù)。為了壓縮圖像數(shù)據(jù),使用具有64個條目的量化表對這些DCT系數(shù)進(jìn)行量化。 量化后的DCT系數(shù)都是整數(shù),它們是通過將每個DCT系數(shù)除以相應(yīng)位置處量化表中的系數(shù),并將其舍入到最接近的整數(shù)得到的,計算方法如式(4)所示:
d(u,v)=Round(F(u,v)/q(u,v))
(4)
其中,F(xiàn)(u,v)是原始DCT系數(shù);q(u,v)是量化表Q中的對應(yīng)系數(shù);d(u,v)是8×8塊的量化的DCT系數(shù)。
對JPEG圖像的可逆數(shù)據(jù)隱藏算法通常通過對量化的DCT系數(shù)進(jìn)行修改(將秘密信息嵌入到量化的DCT系數(shù)中),然后計算測試圖像的失真,設(shè)計產(chǎn)生更好效果的算法來進(jìn)行嵌入。
如圖2所示,本文采用不同質(zhì)量(因子QF=70,80,90,100)的512×512 的Lena圖像和Barbara圖像進(jìn)行實驗。這些灰度圖像常用于測試不同RDH(Reversible Data Hiding)方案的效率。測試圖像的灰度值f(x,y)使用式(1)進(jìn)行DCT變換,并選擇不重疊的8×8塊系數(shù)進(jìn)行DCT變換,之后再用式(4)對DCT變換后的系數(shù)進(jìn)行量化,得到需要的DCT系數(shù),其中DCT系數(shù)包括DC系數(shù)和AC系數(shù)。
Figure 2 Test image圖2 測試圖像
DC系數(shù):在嵌入過程中,量化的DCT系數(shù)的任何修改都可能在空間域中引入相當(dāng)大的失真,并且也會顯著增加JPEG文件的大小。由于修改量化的DCT系數(shù)中的DC系數(shù)來嵌入比特流容易導(dǎo)致小的嵌入容量和比較大的圖像失真,因此本文提出的算法不會對DC系數(shù)嵌入秘密數(shù)據(jù)。
Figure 3 Histogram of absolute values of all non-zero AC coefficients in Lena image圖3 Lena圖像的所有非零AC系數(shù)絕對值的直方圖
AC系數(shù):因為AC系數(shù)編碼的關(guān)系,對0系數(shù)嵌入秘密信息會產(chǎn)生較大的圖像失真,對圖像文件的大小也有影響,所以本文不選擇0系數(shù)進(jìn)行秘密信息的嵌入。DCT 系數(shù)通過之字型排列,AC系數(shù)是通過行程長度編碼,以此使圖像文件的比特流擴(kuò)展減少。對量化的DCT系數(shù)中值為0的AC系數(shù)嵌入秘密信息后,再對圖像文件進(jìn)行壓縮時,AC系數(shù)的中間格式和原始圖像編碼時的AC系數(shù)的中間格式有較大出入,壓縮后得出的圖像文件比特流會有較大增加。這和希望減少圖像文件大小的初衷背道而馳。峰值信噪比PSNR(Peak Signal to Noise Ratio)常用作圖像壓縮等領(lǐng)域中信號重建的評估指標(biāo),PSNR單位為db,它通過均方差進(jìn)行定義。比如2幅m×n的圖像f1和f2的均方差定義為:
(5)
峰值信噪比定義為:
(6)
其中,MAXf1為圖像灰度值的最大值255。
對于量化的DCT系數(shù)的優(yōu)先選擇:通過將量化的DCT系數(shù)重新并列成64×4096的矩陣D,其每一行表示同一頻率下的量化DCT系數(shù),每一列表示一個非重疊的8×8塊的DCT系數(shù):
D(x,y)=d(uk+8(i-1),vm+8(j-1))
(7)
其中,1≤i,j≤512/8,1≤k,m≤8。
對在量化表相同位置處的系數(shù)即同一頻率下的所有的AC系數(shù)模擬嵌入比特位,通過對比(通常用PSNR進(jìn)行對比)嵌入前后的圖像文件,優(yōu)先選擇PSNR值大(即失真小)的量化DCT系數(shù)的頻率進(jìn)行信息嵌入,直到嵌入所有秘密比特流信息。模擬失真AD公式如下所示:
(8)
F=(D(index,y)+1)*q(u,v)
(9)
其中,index表示8×8圖像塊的頻率,F是模擬失真時嵌入模擬比特位后的未量化的DCT系數(shù)。
圖4所示為不同頻率下量化的DCT系數(shù)對圖像的影響。
Figure 4 Analog distortion experiment results on Lena image圖4 Lena圖像模擬失真實驗結(jié)果
AD的PSNR值越大,說明對此頻率下的量化的DCT系數(shù)進(jìn)行修改(即嵌入秘密信息),使圖像失真幅度較小, 表明對原始圖像的影響越小,說明此頻率下的系數(shù)是本算法優(yōu)先選擇的系數(shù)。
在編碼原始JPEG圖像的過程中獲得了不重疊的8×8塊量化的DCT系數(shù)。對量化的DCT系數(shù)重新排列,對在量化表相同位置處的系數(shù)即同一頻率下的AC系數(shù)進(jìn)行模擬嵌入比特位時,根據(jù)選擇AD值相對大的位置優(yōu)先嵌入秘密信息。
(10)
其中,k是圖3非零AC系數(shù)絕對值的直方圖中值大于1 000的最大的AC系數(shù)絕對值,sign是要嵌入的隱藏位。
重復(fù)上面的選擇方法,直到秘密信息全部嵌入完成。在此步驟產(chǎn)生的嵌入順序為提取秘密信息提供了解碼矩陣,這樣不必對其他系數(shù)進(jìn)行移位。
最終將所有修改后的系數(shù)重新排列到原始圖像的位置,并對新的DCT系數(shù)進(jìn)行熵編碼得出標(biāo)記的JPEG圖像。
秘密信息提取和原始圖像的恢復(fù)過程主要有3個步驟:
(1)解碼標(biāo)記的JPEG圖像以獲得量化的DCT系數(shù);
(2)根據(jù)嵌入過程中使用的方法和解碼矩陣提取秘密信息;
(3)提取完秘密信息后,復(fù)原成原始圖像的DCT系數(shù),再對系數(shù)進(jìn)行編碼以獲得原始載體圖像。
為了評估本文所提算法的性能,本節(jié)使用圖2所示的灰度圖像進(jìn)行對比實驗。對比算法為Liu等人[18]的算法,評價指標(biāo)為峰值信噪比(PSNR)和圖像文件的比特流擴(kuò)展。
表1列出了本文算法和Liu算法在不同質(zhì)量因子(即QF= 70,80,90和100)下的測試圖像的實驗結(jié)果對比。
Table 1 Comparison of two algorithms on test images
實驗結(jié)果顯示,在不同的質(zhì)量因子下,嵌入相同位數(shù)的比特數(shù)據(jù),本文算法的PSNR值比Liu算法的大,即在隱藏信息后擁有更好的圖像質(zhì)量。
圖5所示為Lena圖像和Barbara圖像嵌入不同信息后的PSNR值和文件大小,從中可以看出,與Liu算法相比,在相同的質(zhì)量因子和嵌入比特流下,本文算法得出的載體文件大小總是比Liu算法得出的載體文件要小。
Figure 5 PSNR value and file size of Lena and Barbara images after embedding different information圖5 Lena圖像和Barbara圖像嵌入不同信息后的PSNR值和文件大小
例如,在QF=70時嵌入6 000 bit 的秘密信息,Liu算法得出的隱藏圖像文件大小約為30 512 B,而本文算法得出的隱藏圖像文件大小為30 249 B;嵌入14 000 bit 的秘密信息后,Liu算法得出的隱藏圖像文件大小約為32 267 B,而本文算法得出的隱藏圖像文件大小約為31 989 B。即本文算法在嵌入同樣大小的秘密信息時,測試載體文件膨脹的規(guī)模要比Liu算法的小,該結(jié)論在QF=90時也成立。綜合而言,本文算法的優(yōu)勢有:根據(jù)頻率選擇對圖像文件影響小的DCT系數(shù),減少在嵌入秘密信息時的無效移位,以此降低隱藏圖像文件大小的擴(kuò)展,并得到更好的圖像質(zhì)量。
本文提出了一種基于量化的DCT系數(shù)頻率優(yōu)先級的JPEG圖像有效可逆信息隱藏算法。與現(xiàn)有的基于HS的算法相比,本文提出的算法提高了嵌入秘密信息后載體圖像的視覺質(zhì)量,而且還能夠降低由秘密信息嵌入造成的JPEG圖像的比特流擴(kuò)展。將來,可以通過對其他AC系數(shù)進(jìn)行嵌入以及量化表來對JPEG圖像的可逆隱藏算法進(jìn)行研究。