梁 欣
(西安衛(wèi)星測控中心 西安 710043)
數(shù)字水印是保護(hù)信息安全、實(shí)現(xiàn)防偽溯源、版權(quán)保護(hù)的有效辦法,是信息隱藏技術(shù)研究領(lǐng)域的重要分支和研究方向[1]。如何解決算法的嵌入容量、不可見性和魯棒性之間的矛盾一直是該項(xiàng)研究的熱點(diǎn)和難點(diǎn)[2]。水印算法根據(jù)水印嵌入的區(qū)域不同,主要分為空間域算法和變換域算法[3],典型的時(shí)/空域數(shù)字水印方法是最低有效位方法。LSB方法即利用秘密信息比特替換掉原始載體中不重要的部分,以達(dá)到對秘密信息進(jìn)行編碼的目的[4],算法盡管具有嵌入容量大的優(yōu)勢,但缺乏抗幾何攻擊能力[5],而變換域算法卻以其健壯性強(qiáng)等優(yōu)點(diǎn)越來越得到廣泛應(yīng)用。在目前主要使用的變換域方法中,小波變換由于其良好的時(shí)頻分解特性,以及和新一代的國際壓縮標(biāo)準(zhǔn)JPEG2000、MPEG4-7相兼容,從而具有廣闊的發(fā)展前景[6]。
離散小波變換(簡稱DWT)是進(jìn)行信號分析與圖像處理領(lǐng)域十分有用的工具[7],奇異值分解(簡稱SVD)是數(shù)值分析中的最基本、最重要的工具之一[8],數(shù)值分析中的矩陣奇異值分解是一種將矩陣對角化的數(shù)值算法[9]。一幅圖像的奇異值表征的是圖像的內(nèi)在性質(zhì),具有極強(qiáng)的穩(wěn)定性,因此在圖像被施加小的擾動(dòng)時(shí)圖像的奇異值不會(huì)有大的改變[10]。目前圖像水印技術(shù)大多考慮在灰度圖像中嵌入水印,現(xiàn)實(shí)情況中,彩色圖像比較常見且比灰度圖像信息含量也大,將其嵌入水印進(jìn)行版權(quán)保護(hù)顯得更為重要。在數(shù)字水印技術(shù)中,提高水印算法的抗攻擊能力是一個(gè)重要研究方向和分支[11]。綜合考慮DWT和SVD的優(yōu)點(diǎn),將DWT和SVD結(jié)合起來進(jìn)行彩色圖像水印方案的實(shí)現(xiàn),并用Matlab進(jìn)行仿真實(shí)驗(yàn)。
選用原始圖像和水印均為RGB彩色圖像,其中原始圖像尺寸為256×256,水印尺寸為64×64。首先了解一下顏色模型轉(zhuǎn)換:YCbCr模型稱為YUV模型,是視頻圖像和數(shù)字圖像中常見的色彩模型。在YCbCr模型中,Y為亮度,Cb和Cr共同描述圖像的色調(diào)(色差),其中Cb、Cr分別為藍(lán)色分量和紅色分量相對于參考值的坐標(biāo)[12]。首先將彩色載體圖像從RGB彩色空間轉(zhuǎn)換到Y(jié)CrCb彩色空間,然后再對YCrCb彩色空間內(nèi)圖像信息實(shí)施水印嵌入。在Matlab中,可使用rgb2ycbcr函數(shù)來實(shí)現(xiàn)RGB模型和YCbCr模型間的轉(zhuǎn)換。反之,用函數(shù)Ycbcr2rgb實(shí)現(xiàn)YCbCr空間到RGB空間逆轉(zhuǎn)換。從線性代數(shù)的角度看,一幅灰度圖像可以被看成是一個(gè)非負(fù)矩陣[13],彩色圖像則表示為三個(gè)非負(fù)矩陣,我們就用Matlab對這三個(gè)非負(fù)矩陣進(jìn)行處理。具體算法描述如下。
1)將原始圖像和水印圖像分別從RGB顏色模型轉(zhuǎn)換為YCbCr顏色模型。
2)對原始圖像的Y分量進(jìn)行二級離散小波變換 ,得 到 LL2、HL2、LH2、HH2、HL1、LH1、HH1七個(gè)子帶。我們選擇在HL2、LH2、HH2三個(gè)二級子帶系數(shù)中進(jìn)行水印嵌入。
3)分別對HL2、LH2、HH2三個(gè)子帶進(jìn)行矩陣奇異值分解,得到六個(gè)正交矩陣U和V,以及三個(gè)對角矩陣S。
4)將水印圖像的Y、Cb和Cr分量分別采用加性水印公式WM=S+a×W(a為水印的疊加強(qiáng)度系數(shù),針對不同子帶采用不同的系數(shù)。W代表水?。┋B加到上步得到的三個(gè)對角矩陣S上,再對新產(chǎn)生的WM 進(jìn)行奇異值分解,得到U1、S1、V1。
5)將U、S1和VT相乘,得到處理后的嵌入水印的小波系數(shù)。對修改后的小波系數(shù)進(jìn)行小波反變換后得到Y(jié)分量,再結(jié)合原始彩色圖像的色度信息,即Cb分量和Cr分量轉(zhuǎn)換到RGB顏色模型就可得到含水印圖像。
1)對含水印圖像進(jìn)行顏色模型轉(zhuǎn)換,由RGB轉(zhuǎn)換為YCbCr,再利用DWT對轉(zhuǎn)換后的含水印圖像的Y分量進(jìn)行二級小波變換,得到 LL2、HL2、LH2、HH2、HL1、LH1、HH1七個(gè)子帶。
2)對HL2、LH2、HH2三個(gè)子帶進(jìn)行奇異值分解,利用加性水印公式WM=S+a×W分別求出水印的Y、Cb、Cr分量。
3)根據(jù)得到的Y、Cb、Cr分量轉(zhuǎn)換到RGB色彩空間即得到原水印彩色圖像。
本文采用haar正交小波對原始圖像進(jìn)行二級小波分解與重構(gòu)。嵌入因子為a1=0.05;a2=0.005。a1為水印Y分量嵌入時(shí)的強(qiáng)度因子,a2為水印Cb和Cr分量嵌入時(shí)的強(qiáng)度因子。透明性作為衡量彩色圖像不可見水印的基本要求之一[14],為衡量算法性能,對水印圖像的失真程度評價(jià)采用峰值信噪比PSNR,原始水印和提取出的水印之間的相似度可通過相關(guān)系數(shù)NC來評價(jià)。
將水印嵌入載體圖像的Y分量時(shí),含水印圖像和原始圖像從外觀上看幾乎沒有差異,并且PSNR值為56.7686dB,從客觀指標(biāo)上也說明不可見性很好,沒有遭受任何攻擊時(shí)能完全提取出水印且無任何失真。針對常見攻擊進(jìn)行試驗(yàn)。詳細(xì)攻擊測試結(jié)果如圖1所示。當(dāng)遭受所施加的四種攻擊時(shí),由圖1看出提取的水印清晰可辨,通過NC值也說明該算法魯棒性較強(qiáng)。
圖1 攻擊測試的實(shí)驗(yàn)結(jié)果
由于水印在嵌入過程中是被疊加到對角矩陣S上,通過實(shí)驗(yàn)發(fā)現(xiàn)提取的水印在對角線方向出現(xiàn)失真,可用鄰域灰度均衡來減弱對角線失真,即對提取的水印W*沿其對角線方向3×3的鄰域內(nèi)進(jìn)行灰度均衡[15]:
彩色圖像由R、G、B三個(gè)分量矩陣構(gòu)成,具體步驟為
1)在Matlab中將水印圖像的R、G、B三個(gè)分量矩陣提取出來,先對R層分量矩陣進(jìn)行處理。
2)利用for循環(huán),對i取值從1到64,并用if語句作如下判斷和處理:若像素值大于128,置為0;小于128值不變。
3)用if語句確定水印圖像矩陣邊界兩點(diǎn)值。
4)對角線上其余各點(diǎn)的確定利用式(1)計(jì)算,可用for語句實(shí)現(xiàn)。
5)對G、B層矩陣同樣處理。
6)將處理后的R、G、B層矩陣合成一個(gè)矩陣。
由圖2看出采用灰度均衡處理,可以提高水印的NC值,也能在視覺上改善水印質(zhì)量。
圖2 改善后的水印圖像及NC值
我們還可以考慮在色差分量Cb和Cr上進(jìn)行水印信息的嵌入。表1為分別嵌入各分量時(shí)的指標(biāo)值。由表1可以看出,當(dāng)嵌入強(qiáng)度因子相同時(shí),將水印嵌入Cb分量時(shí)的不可見性最好,說明嵌入Cb分量時(shí)的嵌入強(qiáng)度的冗余度較大。其次是Cr分量的冗余度較大,嵌入Y分量的冗余度則最小。這也正好驗(yàn)證了人類具有對色差的細(xì)微變化的感覺比對亮度變化的感覺遲鈍的視覺特性。由于嵌入到Cb分量時(shí)的PSNR值大于Cr分量大于Y分量大于56.7686dB,所以說明它們都極好地滿足不可見性的要求,還可以有余地地增加嵌入因子的值,來提高嵌入強(qiáng)度。
在嵌入到Cb、Cr分量時(shí)并遭受相同攻擊的水印提取效果以及進(jìn)行灰度均衡改善的水印效果見表2。由表2可以知道,將水印分別嵌入到Cb、Cr分量時(shí),PSNR值不同(嵌入因子相同時(shí)),提取出來的水印NC值也有所不同。
表1 分別嵌入不同分量時(shí)的測試結(jié)果
表2 改善后的水印效果及NC值
本文使用離散小波變換與矩陣奇異值分解相結(jié)合的方法,算法數(shù)學(xué)背景清晰,試驗(yàn)證明算法對常見攻擊具有較強(qiáng)的魯棒性。對水印對角線方向失真現(xiàn)象也作了修正,在一定程度上改善了水印視覺效果,同時(shí)NC值也得到提高。還考慮了分別在Cb、Cr分量嵌入水印信息的情況,并進(jìn)行仿真實(shí)現(xiàn)與分析。另外,可以把圖像置亂技術(shù)結(jié)合進(jìn)去,即水印嵌入之前先對其進(jìn)行置亂預(yù)處理,然后再嵌入到分解的對角矩陣中,這樣可以提高水印安全性和不可見性,增加水印破譯難度。