陳鑫,石東,張穎
(南京航空航天大學電子信息工程學院,南京 211106)
數(shù)字水印的概念最初由Van Schyndel等在1994年提出,并自此迅速成為研究熱點[1]。而圖像水印是數(shù)字水印技術(shù)應(yīng)用最為廣泛的水印類型,在多媒體水印技術(shù)中占有極其重要的地位[2]。
傳統(tǒng)的圖像水印算法是基于空域?qū)崿F(xiàn),通過直接修改原始圖像的像素值來實現(xiàn)水印信息嵌入。Van Schyndel等[3]提出了利用m序列修改圖像數(shù)據(jù)最低位的水印嵌入方法,這種LSB(Least significant bits)算法利用了m序列良好的自相關(guān)性,便于水印的檢測與提取,但抗攻擊能力弱、穩(wěn)健性差。隨后Bender等[4]提出一種Patchwork算法。其基本思想是隨機選取像素點,增加一個點的亮度值,然后相應(yīng)降低另一個點的亮度值,借以隱藏水印信息。但是總體來說這類算法都比較脆弱,通過一些常規(guī)的信號處理操作,就能輕易抹掉隱藏的水印信息。
因此,研究者開始通過修改圖像變換域中的變換系數(shù)來嵌入水印信息,包括離散傅氏變換、離散余弦變換、離散小波變換和奇異值分解等[5]。為了實現(xiàn)水印的隱蔽性與魯棒性之間的平衡,很多研究工作基于這幾種圖像變換自身的特點,對水印嵌入算法提出了不同程度的改進。曾琳玲[6]就提出了一種同時結(jié)合Arnold變換、離散小波變換和奇異值分解的雙彩色圖像水印算法。
但是,JPEG壓縮是一種不可恢復(fù)的有損圖像壓縮方式,針對這種圖像的可逆水印比較困難,水印嵌入需要和具體的圖像壓縮算法進行結(jié)合。Akira等[7]通過修改每個8×8塊DCT系數(shù)的最后一個非零數(shù)后的零系數(shù),即用新的非零數(shù)值替換原位置的“0”,一次可以嵌入若干比特水印信息。劉磊等[8]利用JPEG圖像DCT系數(shù)的零系數(shù)間隔確定修改的位置,利用間隔中零系數(shù)的個數(shù)確定水印嵌入量,進而嵌入水印信息。何順等[9]隨后提出一種改進的水印算法。每一個帶有零間隔的DCT塊分別嵌入2位水印信息,并且將這2位水印信息嵌入到DCT塊最后一個非零系數(shù)之后的第1或者第2位零系數(shù)中,提升了水印圖像的不可見性。
本文在上述研究基礎(chǔ)上,給出了一種基于JPEG壓縮域的改進LSB嵌入算法,該算法利用DCT系數(shù)的符號位與最低位進行水印信息的嵌入,不僅具有嵌入容量大的優(yōu)點,還具有良好的隱蔽性。最終,為了驗證本系統(tǒng)的實用性,還設(shè)計了一套完整的JPEG水印編碼軟硬件系統(tǒng)解決方案,實現(xiàn)了在JPEG圖像中水印信息的實時嵌入以及上位機對水印編碼的控制和回顯預(yù)覽。
傳統(tǒng)JPEG編碼流程包含5個部分:YCbCr色彩空間轉(zhuǎn)換(RGBtoYCbCr)、二維離散余弦變換(2D?DCT)、之字形掃描、量化編碼和熵編碼。
如圖1所示,本文選擇在量化編碼和熵編碼之間嵌入水印,主要有兩點原因:(1)根據(jù)人類對低頻分量敏感、對高頻分量不敏感的視覺特性,在圖像的DCT頻域內(nèi)進行針對性地水印嵌入,提高算法不可見性與魯棒性;(2)防止量化編碼破壞水印信息。
因此,本文含有水印嵌入的JPEG編碼過程有4個步驟,具體如下:
(1)對原始載體圖像I進行YCbCr色度空間轉(zhuǎn)換與重采樣,再進行DCT變換、之字形掃描與量化編碼。
(2)對原始水印圖像W進行預(yù)處理,包括二值化處理與K次的Arnold變換,得到待嵌入二值水印序列W′,具體內(nèi)容如第2節(jié)所示。
(3)水印嵌入模塊從水印信息預(yù)處理模塊讀取二值水印序列,根據(jù)第3節(jié)中的嵌入算法對量化后的DCT系數(shù)矩陣進行水印嵌入,并將嵌入了水印的DCT系數(shù)矩陣送入后面的熵編碼模塊。
(4)繼續(xù)進行JPEG壓縮編碼流程中的熵編碼,得到含水印的JPEG圖像。
水印提取的過程實質(zhì)上是水印嵌入的逆過程,在下文不再贅述。過程如下:
(1)對嵌入水印后的JPEG圖像I′進行熵解碼的解壓縮操作。
(2)在JPEG熵解碼后的系數(shù)矩陣中,選出對應(yīng)的DCT系數(shù)矩陣,根據(jù)第3節(jié)中的嵌入算法,進行逆運算,最終得到加密的水印序列W′。
(3)根據(jù)嵌入密鑰K,對提取出的水印序列W′作(T-K)次Arnold變換,恢復(fù)其相關(guān)性,最終得到有意義的水印信息。
RGB彩色圖像二值化處理用于將彩色水印圖像或者二值水印圖像轉(zhuǎn)換為一維二值水印信息序列,以壓縮水印信息量。其過程是首先將圖像轉(zhuǎn)為灰度圖,然后設(shè)置閾值,將灰度圖轉(zhuǎn)為黑白圖。
圖像灰度值計算為
黑白圖轉(zhuǎn)換公式為
式中:Gray為圖像灰度值,Tg為參考閾值。為了方便計算與提高運算速度,采用圖像灰度值的中值127作為參考閾值。從而,生成了一個數(shù)據(jù)位寬為1的二維二值水印序列。若原始彩色水印圖像是24位色,則信息量壓縮到原來的1/24。
Arnold置亂變換用于水印信息的加密以及增強水印的魯棒性。
對于一個N×N的數(shù)值矩陣,其二維Arnold置亂變換為
式中:0≤xi,yi,xi+1,yi+1≤N-1,N為數(shù)值矩陣階數(shù),mod為模N運算。
通過上述變換公式,Arnold置亂變換將(xi,yi)處的矩陣值移動到(xi+1,yi+1)處。通過多次Arnold置亂變換,最終能得到雜亂無序的二值水印序列。但是Arnold置亂變換具有周期性,對其再經(jīng)過若干次Arnold變換后,一定會恢復(fù)到Arnold置亂變換之前的原始二值序列。因此,Arnold置亂變換的周期特性非常有利于數(shù)字水印的提取。
由表1可知,隨著矩陣階數(shù)的增加,Arnold變換周期也隨之增加。綜合考慮置亂變換的計算量大小以及水印算法的隱蔽性,本文采用階數(shù)32、周期24的置亂變換,即將二值水印序列分割為多個32×32的小塊,各個小塊獨立進行Arnold置亂,減少計算工作量。
表1 常用階數(shù)的最小Arnold置亂周期(T)Table 1 Minimum Arnold scrambling period of common order
圖2為水印序列Arnold變換實現(xiàn)的結(jié)構(gòu)框圖。讀地址的高5位Raddr[14:10]用于選擇不同的塊,Raddr[9:0]則送入Arnold讀地址映射單元。
圖2 Arnold變換實現(xiàn)結(jié)構(gòu)框圖Fig.2 Block diagram of Arnold transform
Arnold讀地址映射器實際上是一個1 024×10 b的數(shù)據(jù)RAM,存放對0~1 023連續(xù)計數(shù)值進行Ar?nold變換后的結(jié)果,指示了當前外部讀地址的提取數(shù)據(jù)在原始RAM中水印序列的存儲位置??梢杂糜诩铀貯rnold置亂變換的運算過程。例如,若Arnold讀地址映射器地址0存放的數(shù)值為28,則外部模塊提取的Arnold變換置換的第0個數(shù)據(jù)存放在二值水印ROM地址為28的位置中。
本文將傳統(tǒng)時域(空域)中的LSB算法應(yīng)用到DCT變換域,并對其作了適當?shù)母倪M,設(shè)計實現(xiàn)了一種嵌入容量可調(diào)的LSB嵌入算法,通過修改量化后的DCT系數(shù)值來實現(xiàn)水印的嵌入。
算法的實現(xiàn)過程描述如下,對量化后的8×8 DCT系數(shù)矩陣進行之字形掃描,然后選定一個嵌入起始地址AddrL(取值0~63)和欲嵌入信息位的長度BitLen,對起始地址往后的BitLen長度內(nèi)的DCT系數(shù)Qi作運算后得到Q′i,具體運算過程如下:
(1)如式(4)所示,DCT系數(shù)Qi的高11位保持不變。
(2)若DCT系數(shù)Qi嵌入的二值水印為1,Qi[0]運算公式則為
(3)若嵌入的二值水印為0,Qi[0]運算公式則為
式中:i為當前DCT系數(shù)塊的Z字形掃描序列,且0≤i≤63,Qi為量化后的DCT系數(shù),數(shù)據(jù)位寬為12,Q′i為嵌入水印后的DCT系數(shù)值。
由上述內(nèi)容可知,改進的LSB算法的本質(zhì)是利用DCT系數(shù)值的最高位與最低位的關(guān)系,修改最低位的值來實現(xiàn)水印嵌入。并且通過AddrL與BitLen的設(shè)置,實現(xiàn)了0~64嵌入容量的自由調(diào)節(jié)。
當嵌入二值水印為1時,若原載體圖像的DCT系數(shù)為正偶數(shù)、0或者負奇數(shù)時,嵌入過程不會改變原DCT系數(shù)值。由于量化后的DCT系數(shù)中存在大量的0值系數(shù),故當二值水印序列中1的占比較大時,對DCT系數(shù)矩陣的改動也會相應(yīng)減少,適用于白色分量居多的二值水印圖像。相較于傳統(tǒng)LSB算法的直接暴力地用水印信息替換最低位,該算法對原圖的影響更小,不可見性更好。
此外,綜合考慮人類視覺對頻域系數(shù)的敏感特性和水印的魯棒性與不可見性,本文選擇起始地址AddrL為6的中頻系數(shù)區(qū)域進行水印嵌入,并且設(shè)定水印信息嵌入長度BitLen=16,每個8×8的圖像塊嵌入16 b的水印信息序列。分別采用本文設(shè)計的LSB嵌入算法和傳統(tǒng)LSB算法對圖3(a)中量化后的DCT系數(shù)矩陣進行水印嵌入,嵌入16 b的全1水印序列(16’hFFFF),最后結(jié)果如圖3(b)和圖3(c)所示。斜線小方塊表示嵌入前后變化了的DCT系數(shù)值??梢园l(fā)現(xiàn)對于全1序列前者僅修改了4個DCT系數(shù)實現(xiàn)了16 b水印信息的嵌入,改動量為傳統(tǒng)LSB算法的二分之一。
圖3 嵌入結(jié)果對比Fig.3 Embedding results comparison
本文采用Xilinx的Virtex?7 VC707評估套件作為硬件開發(fā)測試平臺,內(nèi)部系統(tǒng)時鐘頻率為250 MHz,分辨率1 920像素×1 440像素、數(shù)據(jù)量7.9 MB的BMP圖像作為測試圖像,對本文設(shè)計內(nèi)容進行實測驗證。
為了方便控制硬件模塊,本文還設(shè)計一個上位機軟件,實現(xiàn)對圖像的傳輸及水印嵌入過程的控制。上位機的GUI界面由圖像加載界面、圖像預(yù)覽界面、命令控制寄存器配置界面、DMA參數(shù)配置界面和Log信息預(yù)覽界面5部分組成。
圖4為原始載體圖像、原始水印圖像、嵌入水印的JPEG水印載體圖像以及無水印的原始JPEG圖像對比示意圖。圖4(c)與圖4(d)的峰值信噪比(PSNR)為41.10 dB。但是,相比于原始JPEG圖像,水印信息的嵌入并未引起JPEG水印載體圖像的失真,因此該水印算法具有主觀上良好的不可見性。
圖4 二維碼水印嵌入結(jié)果Fig.4 Watermark embedding result of QR code
表2以PSNR作為不可見性指標,將本文改進的LSB算法與復(fù)現(xiàn)的傳統(tǒng)LSB算法,以及和已經(jīng)發(fā)表的論文進行了對比。文獻[6]嵌入的數(shù)據(jù)量更多,但是PSNR指標低于本文結(jié)果的14.26%。在嵌入數(shù)據(jù)的比特數(shù)相同及更少的情況下,其他設(shè)計的PSNR是本文結(jié)果的70.39%~83.99%,由此可見本文實現(xiàn)的水印嵌入算法具有更好的不可見性。
表2 PSNR性能對比Table 2 PSNR performance comparison
為了驗證本文改進LSB算法的魯棒性,本文對嵌入了水印信息的圖像進行各種攻擊實驗,然后從被攻擊后的圖像中再提取水印圖像,并以相似系數(shù)(NC)為指標與原水印進行比較分析。
圖5所示的是裁剪32×32的小塊后,攻擊后的圖像和提取出的水印圖像。圖6為均值0,方差0.005的高斯噪聲和椒鹽噪聲攻擊實驗的結(jié)果。圖7為壓縮質(zhì)量Q為50的JPEG壓縮攻擊實驗結(jié)果。
如圖5~7所示,水印載體圖像在受到各種噪聲攻擊后,仍能提取出水印信息,顯示改進LSB方法具有一定的抗攻擊能力。同時,表3將本文改進的LSB算法與傳統(tǒng)LSB算法進行魯棒性的性能對比。由表3可知改進LSB的NC值更大,有更好的還原性能。
圖5 裁剪32×32攻擊實驗結(jié)果Fig.5 Experimental results of 32×32 clip?ping attack
圖6 噪聲攻擊實驗(噪聲密度0.005)Fig.6 Experimental results of noise attack(noise density is 0.005)
圖7 JPEG壓縮攻擊實驗(Q=50)Fig.7 Experimental results of JPEG compress attack(Q=50)
表3 NC性能對比Table 3 NC performance comparison
本文最后還進行了處理速度測試。由于本文提出的改進LSB方法易于采用流水線設(shè)計,所以處理速度主要取決于搭載硬件的電路性能。在輸入接口數(shù)據(jù)寬度為128 b時,處理數(shù)據(jù)帶寬最高可達128 b×250 MHz=32 Gb/s,體現(xiàn)了基于FPGA實現(xiàn)水印嵌入功能的優(yōu)越性。
本文對JPEG圖像數(shù)字水印進行了深入的研究與設(shè)計,提出了一種結(jié)合圖像壓縮算法的改進LSB嵌入方法。該方法不僅嵌入容量大,隱蔽性好,還利于硬件實現(xiàn)。在Xilinx Virtex?7 VC707評估套件上輸入接口數(shù)據(jù)寬度為128 b時,處理數(shù)據(jù)帶寬最高可達32 Gb/s?;贔PGA設(shè)計完成了JPEG數(shù)字水印系統(tǒng),最后通過測試平臺對水印編碼系統(tǒng)的水印嵌入功能進行了測試與驗證,驗證了本系統(tǒng)的實用性。但是,在圖像中增加嵌入的水印數(shù)據(jù)量,將會惡化PSNR指標和魯棒性。如何在嵌入數(shù)據(jù)量、PSNR指標和魯棒性上取得較好的平衡,目前還未得以解決,這也是今后本文進一步的研究方向。