引言,圖像水印特徵,圖像水印關鍵技術,(1)水印生成,(2)水印嵌入,(3)水印檢測,常見圖像不可逆水印算法,(1)基於LSB的圖像水印算法,(2)基於DCT的圖像水印算法,常見圖像可逆水印算法,(1)基於差值擴展的圖像可逆水印算法,(2)基於直方圖平移的圖像可逆水印算法,評價指標,(1)透明性,(2)魯棒性,(3)安全性,(4)嵌入容量,
引言 數字圖像已廣泛套用到軍事、醫療、商業和日常生活等諸多領域。隨著網際網路和圖像處理技術的快速發展,數字圖像的產生和散布變得十分容易。數字圖像的廣泛套用和共享,也更容易受到各種威脅和挑戰。其中,主要威脅包括:
(1)惡意篡改:不法分子可對圖像進行篡改,以傳播虛假信息,誤導人或破環圖像的真實性,這種行為容易對社會造成不良影響,如引發不實信息、引起社會動盪等。
(2)盜竊和侵權:圖像的盜竊和未經授權的使用已成為一個嚴重的問題,盜竊他人創作的圖像不僅侵犯了智慧財產權,還損害了原創作者的權益。
因此,如何保護圖像作品的智慧財產權和完整性是成為一個迫切需要解決的問題。
圖像水印特徵 圖像數字水印算法必須具有以下基本特性:
(1)透明性:圖像水印的嵌入不能引起人類視覺系統的察覺,即不能使得被保護圖像作品在質量上發生可感覺到的失真;
(2)魯棒性:當被保護的圖像作品經過某種改動或者攻擊(如添加高斯噪聲、JPEG壓縮和添加椒鹽噪聲等)之後,嵌入的水印信息應保持一定的完整性,並能以一定的正確機率被檢測到;
(3)安全性:圖像水印應該難以被偽造或者加工。同時,未經授權的個體不得閱讀和修改水印。理想情況是未經授權的客戶將不能檢測到產品中是否有水印存在;
(4)可證明性:水印必須能為圖像作品的歸屬提供完全和可靠的證據。
圖像水印關鍵技術 圖像水印系統一般架構包括水印生成、水印嵌入和水印檢測三個模組。以標準測試圖像集中的飛機場為宿主圖像(或稱載體圖像),以中國礦業大學校徽為水印圖像,以及含水印圖像,如圖1-3所示。
圖1 宿主圖像飛機場
圖2 水印圖像中國礦業大學校徽
圖3 含水印圖像
(1)水印生成 由於人類視覺系統對紋理具有極高的敏感性,所以水印構成紋理是不允許的,構成水印的序列應具有不可預測的隨機性。目前,水印生成主要算法如下:
①高斯白噪聲序列
一種滿足均值為µ、方差為σ的常態分配的隨機序列。
②偽隨機序列
具有類似白噪聲的性質,可人為地產生,如混沌序列,二維條形碼。
③有特定含義的水印信息
選取具有特定含義的字元串或圖像作為水印信息。由於其不是隨機信號,所以水印信息在嵌入載體前需要要進行預處理(如加密、隨機化等),使其成為具有良好隨機性的偽隨機信號。
(2)水印嵌入 水印在嵌入前,一般需要加密處理來提高算法安全性。頻域水印算法是圖像水印技術的主流。因此,在水印嵌入前,宿主圖像需要通過離散餘弦變換(DiscreteCosine Transform,DCT)、離散傅立葉變換(DiscreteFourier Transform,DFT)和離散小波變換(DiscreteWavelet Transform,DWT)等變換,從空域變換到頻域。水印嵌入後,需要通過對應的逆變換實現從頻域到空域的變換。水印嵌入算法的流程,如圖4所示。
圖4 水印嵌入流程
(3)水印檢測 水印檢測是水印嵌入的逆過程。水印提取的輸出結果可是水印本身,也可是判斷水印是否存在的判決結果。水印檢測算法的流程,如圖5所示。在水印的提取過程中,宿主圖像是可選的,它取決於水印的嵌入算法。當水印算法為盲檢測時,檢測過程不需要宿主圖像。反之,則需要宿主圖像。如果在水印的提取過程中,不需要聽過宿主圖像,那么稱該算法為盲檢測水印算法。盲檢測水印算法使用方便,實用性更強。
圖5 水印檢測流程
常見圖像不可逆水印算法 1994年,RG van Schyndel等發表的題目為“A digital watermark”的論文,是第一篇關於數字水印的重要文獻。該文闡明了一些關於水印的重要概念和魯棒水印檢測的通用方法——相關性檢測,提出了空域的最低有效位(Least Significant Bit,LSB)算法。LSB算法的優點是算法簡單、嵌入容量大、透明性好和盲檢測等優點。然而,該算法的魯棒性較弱,抵抗濾波、壓縮和噪聲等攻擊能力差。
1996年,Bender等人提出了著名的Patchwork圖像水印算法。這是一種基於統計的算法,即在一個宿主圖像中嵌入具有特定統計特性的水印,其嵌入方法是任意選擇N 對圖像點,在增加一點亮度的同時,降低另一點的亮度值。該算法的隱藏性較好,並且對有損的JPEG、濾波、壓縮和扭轉等操作具有抵抗能力。然而,該算法僅適用於具有大量任意紋理區域的圖像。
經過研究者們近30年的不斷努力,已設計出成千上萬種圖像水印算法。
根據水印嵌入的空間不同,圖像水印算法可分為:基於空間域的圖像水印算法和基於變換域的圖像水印算法。
在基於空間域的圖像水印算法中,主要通過直接修改圖像的像素值來實現水印嵌入,基於LSB的圖像水印算法是最常見的一種。
在基於變換域的圖像水印算法中,這類算法就是將圖像轉換到頻域或其他域,然後在其中嵌入水印信息。常見的變換方法包括DCT、DFT和DWT。這類算法考慮了人類視覺系統(Human Visual System,HVS)特性的水印嵌入,因為它們可將水印嵌入到視覺不敏感區域,以提高魯棒性。同時,不會顯著降低圖像質量。
(1)基於LSB的圖像水印算法 LSB算法核心思想是將水印信息嵌入到圖像像素的最低位中。基於LSB的圖像水印算法的詳細步驟如下:
步驟1: 令宿主圖像為P ,大小為m ×n ,每個像素可用8個比特的二進制數表示。例如:y =dec2bin(0,8),即y =00000000;y =dec2bin(127,8),即y =01111111;y =dec2bin(255,8),即y =11111111,其中,dec2bin(·)是十進制轉二進制的函式;
步驟2: 現在用圖像作為底面,用表示像素大小的8位二進制數作為高度,可形成一個立體圖,如圖6所示;
圖6 位平面立方體
步驟3: 各像素的8位二進制數高位(Most Significant Bit,MSB)在上,低位LSB在下,各像素位置相同的位形成一個平面,稱為“位平面”;以圖7灰色圖像Peppers為例,進行位平面分解,可得8個位平面,如圖8所示。
圖7 Peppers圖像
圖8 Peppers的8個位平面
步驟4: 一般來說,LSB算法要求最多可改變像素值的1個位元組中的4個位,即可把水印信息嵌入到最低1 位、2位、3位、4位,最多4位有效位時,人眼是無法察覺到改變的。如果嵌入水印信息過多,那么對像素值改變太大,算法的透明性降低。
(2)基於DCT的圖像水印算法 基於DCT的圖像水印算法的詳細步驟如下:
步驟1: 對宿主圖像分割成8×8的圖像塊;
步驟2: 對8×8的圖像塊進行DCT變換,得係數矩陣B ;
當要嵌入的水印信息為“0”:對比B (5,2)和B (4,3)的係數值大小。當B (5,2)>B (4,3)時,那么互換B (5,2)和B (4,3);否則,不進行任何操作;
當要嵌入的水印信息為“1”:對比B (5,2)和B (4,3)的係數值大小。當B (5,2)>B (4,3)時,那么不進行任何操作;否則,互換B (5,2)和B (4,3);
步驟3: 對處理後的DCT係數B’ ,進行DCT逆變換,得8×8的圖像塊。
步驟4: 對8×8的圖像塊進行組合,得含水印圖像。
基於DCT的圖像水印算法的水印提取過程詳細步驟如下:
步驟1: 對含水印圖像分割成8×8的圖像塊;
步驟2: 對8×8的圖像塊進行DCT變換,得係數矩陣B ;
步驟3: 對比B (5,2)和B (4,3)的係數值大小。當B (5,2)>B (4,3)時,提取水印信息為“1”;否則,提取水印信息為“0”。
常見圖像可逆水印算法 通常傳統的圖像水印算法對宿主圖像是有損的,只要滿足透明性即可。 然而,在一些特殊領域,如醫學、雷達影像以及法律證據的影像保護,不僅要求嵌入水印以保護原始圖像作品的著作權,而且還要求能無損地還原出原始圖像。此時,就要用到可逆水印技術 。可逆水印是利用圖像像素間的冗餘度,在不損害任何像素的情況下嵌入和提取水印,可在不受攻擊的情況下完美地恢復原始圖像。因此,按照水印信息嵌入到宿主圖像後能否無損地恢復出宿主圖像,圖像水印技術可分為不可逆圖像水印和可逆圖像水印。常見的圖像可逆水印算法主要包括:基於差值擴展的圖像可逆水印算法和基於直方圖平移的圖像可逆水印算法。
(1)基於差值擴展的圖像可逆水印算法 Tian等人提出了一種基於差值擴展的圖像可逆水印算法。該算法主要利用相鄰像素點之間的差值來嵌入水印信息。
該算法將差值分為:可擴展的差值、可改變的差值以及不可擴展的差值等三種類型。該算法對可擴展的差值和可改變的差值中嵌入水印,而對不可擴展的差值不做改變。
為達到算法的可逆性,能夠將水印信息提取出來,該算法採用定點陣圖來記錄嵌入了水印的位置,通常用“1”來表示該位置嵌入了水印信息,用“0”來表示該位置沒有嵌入水印信息。因為定點陣圖中的每個二值數據記錄的是灰度圖像中一對相鄰像素點的水印嵌入情況,所以定點陣圖大小為宿主圖像大小的一半。
該算法思想相當簡單,性能良好,可提供更大的嵌入容量和更好的視覺質量。
①基於差值擴展的圖像可逆水印算法的水印嵌入過程詳細步驟如下:
步驟1: 在一幅灰度宿主圖像中,假設x 和y 為一對相鄰像素點的像素值,i 為即將嵌入的水印信息,則i =0或i =1。因此,相鄰像素點的均值l 和差值h 分別為:
l =⌊(x +y )/2⌋, (1)
h =x -y , (2)
其中,⌊·⌋為向下取整函式;
步驟2: 把h 化為二進制並向左移動一位後,將i 加到h 中的最小一位,這樣就將i 嵌入到了h 中去,計算:
h '=2h +i ; (3)
步驟3: 計算擴展後的像素值x '和y ',
x '=l+⌊(h '+1)/2⌋, (4)
y '=l-⌊h '/2⌋。 (5)
②基於差值擴展的圖像可逆水印算法的水印提取過程詳細步驟如下:
步驟1: 計算含水印圖像相鄰像素點的均值l 和差值h ,
l =⌊(x +y )/2⌋, (6)
h =x -y ; (7)
步驟2: 由定點陣圖得到該位置是否嵌入水印。如果該位置在定點陣圖中的值為“1”,那么說明該位置有嵌入水印。如果該位置的在定點陣圖中的值為“0”,那么說明該位置沒有嵌入水印,不需進行處理;
步驟3: 對於嵌入水印的位置,計算:
i =h -⌊h /2⌋×2, (8)
i 即為提出的水印信息。
③基於差值擴展的圖像可逆水印算法的圖像恢復過程詳細步驟如下:
步驟1: 由定點陣圖得到該位置是否嵌入水印。如果該位置的在定點陣圖中的值為“1”,那么說明該位置有嵌入水印。此時,計算差值為:
h =h +1; (9)
步驟2: 如果該位置的在定點陣圖中的值為“0”,那么說明該位置沒有嵌入水印,差值不需改變。此時,計算原始圖像的像素值為:
x =1+⌊(h +1 )/2⌋, (10)
y =1-⌊h /2⌋。 (11)
(2)基於直方圖平移的圖像可逆水印算法 Ni等人提出了一種基於直方圖平移原理的可逆水印算法。該算法在宿主圖像的灰度直方圖中找到最大值點和相鄰的最小值(即零點),再將它們中間的值平移後得出一個空隙,用來嵌入水印信息。該算法操作複雜度低、含水印圖像的質量較高,但是嵌入容量較低。
基於直方圖平移的可逆水印算法的水印嵌入過程詳細步驟如下:
步驟1: 繪出宿主圖像的灰度直方圖;
步驟2: 找到直方圖中的最大值點,即出現在圖像中數目最多像素點的量,記作a ;
步驟3: 找到直方圖中的最小值點,即出現在圖像中數目最少像素點的量,記作b 。為方便描述,在此假設a <b ;例如:如圖9所示,最大值點a=139,像素點數為8800。最小值點b=143,像素點數為0;
圖9 最大值點和最小值點
步驟3: 將圖像中所有像素值在區間[a +1, b -1]的灰度值加1,即相當於將區間[a +1, b -1]的直方圖向右移動一位,使得像素值為a +1的像素點的個數為0;
步驟4: 當嵌入水印值為1時,則像素值為a 的灰度值均加1,即為a +1;當嵌入水印值為0時,則不改變灰度值信息。依次嵌入所有的水印信息,可得含水印圖像。
基於直方圖平移的可逆水印算法的水印提取過程和宿主圖像恢復詳細步驟如下:
步驟1: 根據a 和b 的值,順序掃描含有水印圖像。如果像素灰度值為a ,那么提取的水印信息為0;如果像素灰度值為a +1,那么提取的水印信息為1;
步驟2: 提取水印信息後,只要把灰度值處在區間[a +1, b -1]之間的灰度值均減1,就能將宿主圖像無損地恢復出來。
評價指標 透明性、魯棒性、安全性和嵌入容量是評價圖像水印算法的四大重要指標,詳述如下。
(1)透明性 透明性指數字水印的嵌入不影響圖像的正常使用,不會引起視覺感官上的質量下降,人們無法感知圖像中水印的存在。
①主觀評價
這是檢驗水印透明性的首要標準。人是圖像信息的最終接收者。因此,從視覺上要求嵌入水印的圖像與原圖差別很小,人無法從含水印圖像中看出水印。當使用主觀測試包括兩個步驟:
步驟1:將失真的圖像集按照從最好到最壞的次序排列;
步驟2:挑選的測試人員對每個數據集進行評定,描述所處理對象的可感知性。質量等級和可感知性之間的關係,如表1所示。
表1 質量等級和相應的可感知性 理論上,主觀測試對最終的質量評價和測試是有價值的。然而,在實際套用中這種方法並不是很實用。
②峰值信噪比
峰值信噪比(PeakSignal-to-Noise Ratio,PSNR)是定量客觀地評價水印算法透明性的指標。它反映了水印嵌入前後圖像整體的改變程度,峰值信噪比越小,則表示圖像的質量下降越多。反之,其值越高,透明性越好。為衡量嵌入水印圖像和原始圖像之建的差別,均方誤差(Mean Square Error,MSE)和PSNR分別定義為:
MSE =[1/(m×n)]sum(sum((X (i , j )-Y (i , j ))2)), (12)
PSNR =20log10(2552/MSE),(13)
其中,m 和n 分別表示宿主圖像的行數和列數,sum(·)是求和函式。X (i , j )和Y (i , j )分別代表宿主圖像的像素值和嵌入水印後圖像的像素值。保證PSNR值至少大於38 dB,是水印透明性基本要求。
(2)魯棒性 魯棒性指在經過常規信號處理操作後,仍能檢測出水印的能力。針對圖像的常規操作包括空間濾波、JPEG壓縮、剪下攻擊、列印與複印、幾何變形和噪聲攻擊等。在某些情況下,魯棒性毫無用處,甚至被極力避免,如脆弱水印要求對圖像做任何信號處理操作都會將水印破壞掉。水印的嵌入容量、嵌入強度和圖像大小等對水印的魯棒性都有影響。通常,水印的嵌入容量越大,魯棒性越好,透明性就越差。
魯棒性評價一般由提取水印與原始水印間的差異(即相似度)來衡量,當沒有攻擊嵌入水印圖像時,相似度為1或者接近1,表明水印幾乎沒有失真。而當水印圖像受到攻擊時,提取的水印與原水印的相似程度則用歸一化相關係數(Normalized Correlation,NC)來評價。NC值越接近於1,則表明提取的水印就越接近於原始水印,水印的魯棒性就越好。計算公式為:
NC =sum(sum(W(i ,j )×W’(i ,j )))/ sum(sum(W(i ,j )×W(i ,j ))), (14)
其中,W 表示原始水印圖像,W ’表示提取出的水印圖像。
(3)安全性 安全性指水印能夠抵抗各種破壞水印行為的能力,即未授權者不能去除、嵌入和檢測水印。同時,水印信息應該很難被他人所複製和偽造。現代密碼體制要求滿足Kerckhoffs準則,即算法的安全性要取決於密鑰的安全性,而不是建立在整個算法保密的基礎上。人們希望水印算法也能滿足Kerckhoffs準則。如果密鑰未知,即使水印算法已知,攻擊者也不可能檢測出圖像中是否有水印。
(4)嵌入容量 嵌入容量是指一種圖像水印算法在一幅宿主圖像裡面最多能夠容納多少位水印信息比特數。在滿足透明性的前提下,嵌入容量應儘量大。在實際套用中,由於不同的宿主圖像具有不同的紋理、內容、尺寸和解析度,所以其可嵌入的有效比特數也會有所差異。