梁 欣
(西安衛星測控中心 西安 710043)
數字水印是保護信息安全、實現防偽溯源、版權保護的有效辦法,是信息隱藏技術研究領域的重要分支和研究方向[1]。如何解決算法的嵌入容量、不可見性和魯棒性之間的矛盾一直是該項研究的熱點和難點[2]。水印算法根據水印嵌入的區域不同,主要分為空間域算法和變換域算法[3],典型的時/空域數字水印方法是最低有效位方法。LSB方法即利用秘密信息比特替換掉原始載體中不重要的部分,以達到對秘密信息進行編碼的目的[4],算法盡管具有嵌入容量大的優勢,但缺乏抗幾何攻擊能力[5],而變換域算法卻以其健壯性強等優點越來越得到廣泛應用。在目前主要使用的變換域方法中,小波變換由于其良好的時頻分解特性,以及和新一代的國際壓縮標準JPEG2000、MPEG4-7相兼容,從而具有廣闊的發展前景[6]。
離散小波變換(簡稱DWT)是進行信號分析與圖像處理領域十分有用的工具[7],奇異值分解(簡稱SVD)是數值分析中的最基本、最重要的工具之一[8],數值分析中的矩陣奇異值分解是一種將矩陣對角化的數值算法[9]。一幅圖像的奇異值表征的是圖像的內在性質,具有極強的穩定性,因此在圖像被施加小的擾動時圖像的奇異值不會有大的改變[10]。目前圖像水印技術大多考慮在灰度圖像中嵌入水印,現實情況中,彩色圖像比較常見且比灰度圖像信息含量也大,將其嵌入水印進行版權保護顯得更為重要。在數字水印技術中,提高水印算法的抗攻擊能力是一個重要研究方向和分支[11]。綜合考慮DWT和SVD的優點,將DWT和SVD結合起來進行彩色圖像水印方案的實現,并用Matlab進行仿真實驗。
選用原始圖像和水印均為RGB彩色圖像,其中原始圖像尺寸為256×256,水印尺寸為64×64。首先了解一下顏色模型轉換:YCbCr模型稱為YUV模型,是視頻圖像和數字圖像中常見的色彩模型。在YCbCr模型中,Y為亮度,Cb和Cr共同描述圖像的色調(色差),其中Cb、Cr分別為藍色分量和紅色分量相對于參考值的坐標[12]。首先將彩色載體圖像從RGB彩色空間轉換到YCrCb彩色空間,然后再對YCrCb彩色空間內圖像信息實施水印嵌入。在Matlab中,可使用rgb2ycbcr函數來實現RGB模型和YCbCr模型間的轉換。反之,用函數Ycbcr2rgb實現YCbCr空間到RGB空間逆轉換。從線性代數的角度看,一幅灰度圖像可以被看成是一個非負矩陣[13],彩色圖像則表示為三個非負矩陣,我們就用Matlab對這三個非負矩陣進行處理。具體算法描述如下。
1)將原始圖像和水印圖像分別從RGB顏色模型轉換為YCbCr顏色模型。
2)對原始圖像的Y分量進行二級離散小波變換 ,得 到 LL2、HL2、LH2、HH2、HL1、LH1、HH1七個子帶。我們選擇在HL2、LH2、HH2三個二級子帶系數中進行水印嵌入。
3)分別對HL2、LH2、HH2三個子帶進行矩陣奇異值分解,得到六個正交矩陣U和V,以及三個對角矩陣S。
4)將水印圖像的Y、Cb和Cr分量分別采用加性水印公式WM=S+a×W(a為水印的疊加強度系數,針對不同子帶采用不同的系數。W代表水印)疊加到上步得到的三個對角矩陣S上,再對新產生的WM 進行奇異值分解,得到U1、S1、V1。
5)將U、S1和VT相乘,得到處理后的嵌入水印的小波系數。對修改后的小波系數進行小波反變換后得到Y分量,再結合原始彩色圖像的色度信息,即Cb分量和Cr分量轉換到RGB顏色模型就可得到含水印圖像。
1)對含水印圖像進行顏色模型轉換,由RGB轉換為YCbCr,再利用DWT對轉換后的含水印圖像的Y分量進行二級小波變換,得到 LL2、HL2、LH2、HH2、HL1、LH1、HH1七個子帶。
2)對HL2、LH2、HH2三個子帶進行奇異值分解,利用加性水印公式WM=S+a×W分別求出水印的Y、Cb、Cr分量。
3)根據得到的Y、Cb、Cr分量轉換到RGB色彩空間即得到原水印彩色圖像。
本文采用haar正交小波對原始圖像進行二級小波分解與重構。嵌入因子為a1=0.05;a2=0.005。a1為水印Y分量嵌入時的強度因子,a2為水印Cb和Cr分量嵌入時的強度因子。透明性作為衡量彩色圖像不可見水印的基本要求之一[14],為衡量算法性能,對水印圖像的失真程度評價采用峰值信噪比PSNR,原始水印和提取出的水印之間的相似度可通過相關系數NC來評價。
將水印嵌入載體圖像的Y分量時,含水印圖像和原始圖像從外觀上看幾乎沒有差異,并且PSNR值為56.7686dB,從客觀指標上也說明不可見性很好,沒有遭受任何攻擊時能完全提取出水印且無任何失真。針對常見攻擊進行試驗。詳細攻擊測試結果如圖1所示。當遭受所施加的四種攻擊時,由圖1看出提取的水印清晰可辨,通過NC值也說明該算法魯棒性較強。

圖1 攻擊測試的實驗結果
由于水印在嵌入過程中是被疊加到對角矩陣S上,通過實驗發現提取的水印在對角線方向出現失真,可用鄰域灰度均衡來減弱對角線失真,即對提取的水印W*沿其對角線方向3×3的鄰域內進行灰度均衡[15]:

彩色圖像由R、G、B三個分量矩陣構成,具體步驟為
1)在Matlab中將水印圖像的R、G、B三個分量矩陣提取出來,先對R層分量矩陣進行處理。
2)利用for循環,對i取值從1到64,并用if語句作如下判斷和處理:若像素值大于128,置為0;小于128值不變。
3)用if語句確定水印圖像矩陣邊界兩點值。
4)對角線上其余各點的確定利用式(1)計算,可用for語句實現。
5)對G、B層矩陣同樣處理。
6)將處理后的R、G、B層矩陣合成一個矩陣。
由圖2看出采用灰度均衡處理,可以提高水印的NC值,也能在視覺上改善水印質量。

圖2 改善后的水印圖像及NC值
我們還可以考慮在色差分量Cb和Cr上進行水印信息的嵌入。表1為分別嵌入各分量時的指標值。由表1可以看出,當嵌入強度因子相同時,將水印嵌入Cb分量時的不可見性最好,說明嵌入Cb分量時的嵌入強度的冗余度較大。其次是Cr分量的冗余度較大,嵌入Y分量的冗余度則最小。這也正好驗證了人類具有對色差的細微變化的感覺比對亮度變化的感覺遲鈍的視覺特性。由于嵌入到Cb分量時的PSNR值大于Cr分量大于Y分量大于56.7686dB,所以說明它們都極好地滿足不可見性的要求,還可以有余地地增加嵌入因子的值,來提高嵌入強度。
在嵌入到Cb、Cr分量時并遭受相同攻擊的水印提取效果以及進行灰度均衡改善的水印效果見表2。由表2可以知道,將水印分別嵌入到Cb、Cr分量時,PSNR值不同(嵌入因子相同時),提取出來的水印NC值也有所不同。

表1 分別嵌入不同分量時的測試結果

表2 改善后的水印效果及NC值
本文使用離散小波變換與矩陣奇異值分解相結合的方法,算法數學背景清晰,試驗證明算法對常見攻擊具有較強的魯棒性。對水印對角線方向失真現象也作了修正,在一定程度上改善了水印視覺效果,同時NC值也得到提高。還考慮了分別在Cb、Cr分量嵌入水印信息的情況,并進行仿真實現與分析。另外,可以把圖像置亂技術結合進去,即水印嵌入之前先對其進行置亂預處理,然后再嵌入到分解的對角矩陣中,這樣可以提高水印安全性和不可見性,增加水印破譯難度。