錢華山 田麗華 李 晨
(西安交通大學(xué)軟件學(xué)院 陜西 西安 710049)
基于三像素塊差值的多層可逆圖像水印算法
錢華山 田麗華 李 晨*
(西安交通大學(xué)軟件學(xué)院 陜西 西安 710049)
數(shù)字圖像可逆水印算法在水印嵌入容量和不可感知性方面要求越來越高。為了滿足圖像可逆水印算法的需求,提出一種基于三像素差值的多層可逆圖像水印算法。該算法首先把原始圖像按照三種類型進(jìn)行水平分塊,同時(shí)計(jì)算相鄰三像素塊的絕對(duì)差值,對(duì)差值進(jìn)行分組,求出水平分塊中的最大峰值點(diǎn),將生成的二值水印嵌入在第一個(gè)像素和第三個(gè)像素的LSB中,同時(shí)記錄最大峰值點(diǎn)所在塊的索引和嵌入水印信息像素的最低有效位。其次,按照同樣的方法對(duì)原始圖像按照三種類型進(jìn)行垂直分塊,嵌入水印信息。實(shí)驗(yàn)仿真結(jié)果表明,該算法在不可見性、水印容量等方面較同類算法有顯著提高。
圖像水印 可逆水印 像素塊 絕對(duì)差值 LSB
對(duì)于圖像、音頻、視頻等多媒體數(shù)據(jù)而言,版權(quán)的保護(hù)和內(nèi)容完整性認(rèn)證對(duì)于創(chuàng)作者來說至關(guān)重要。雖然傳統(tǒng)的數(shù)字水印技術(shù),對(duì)多媒體的版權(quán)保護(hù)起到一定的作用,但是在一些對(duì)精度認(rèn)證要求較高的領(lǐng)域,比如法律、醫(yī)學(xué)和軍事系統(tǒng)等領(lǐng)域,在不提供恢復(fù)信息的情況下,加密的多媒體數(shù)據(jù)輕微的改變,都會(huì)對(duì)真實(shí)的結(jié)果產(chǎn)生很大影響,為了使隱藏的數(shù)據(jù)被提取后,無損地恢復(fù)原始圖像信息,可逆數(shù)字水印技術(shù)應(yīng)運(yùn)而生。由于可逆數(shù)字水印技術(shù)能夠無失真地恢復(fù)原始圖像,因此在一些敏感領(lǐng)域得到了很廣泛的應(yīng)用[1-2],比如在法律取證和醫(yī)療圖像處理領(lǐng)域,通常要求提取水印后含水印的圖像還能夠無失真的恢復(fù)。
在可逆數(shù)字水印技術(shù)中,水印的嵌入容量和不可見性是衡量圖像水印算法最主要的兩個(gè)方面,因此如何提高水印嵌入容量和不可見性一直是各國學(xué)者研究的熱點(diǎn)。通常,不可見性客觀上可以通過PSNR(Peak Signal to Noise Ratio)來衡量。嵌入容量可以用原始圖像中嵌入水印信息的比特?cái)?shù)來衡量。但是,目前存在的一些可逆水印算法在嵌入容量和不可見性兩個(gè)方面不能兼顧,有時(shí)只能以犧牲圖像質(zhì)量為代價(jià)來獲取較大的嵌入容量,或者為了獲得較好的圖像質(zhì)量,但嵌入容量很小。
目前,國內(nèi)外對(duì)可逆圖像水印算法的研究也有很多,大體上可分為四類:基于差值擴(kuò)展的可逆水印算法,是利用像素之間的差異值來取代圖像的特征,然后通過擴(kuò)展這些值的最不重要位來實(shí)現(xiàn)水印的嵌入,最早是由Tian[3]提出來的;基于壓縮的可逆數(shù)字水印算法,通過壓縮要嵌入的數(shù)據(jù),減少了水印信息嵌入容量,通常只能做認(rèn)證之用,比較好的算法是由MEHMET Utku Celik[4]提出來的;基于頻域的可逆圖像水印方案,對(duì)原始圖像進(jìn)行小波變換后,分別把水印信息嵌入在得到的三個(gè)高頻系數(shù)中,比較好的算法是由Xuan[5]提出的;基于直方圖平移的可逆水印算法,利用直方圖平移的思想來改變像素值,實(shí)現(xiàn)水印信息的嵌入,如文獻(xiàn)[6]提出一個(gè)基于三像素塊差值的無損數(shù)據(jù)隱藏方案,對(duì)圖像進(jìn)行分塊后,找出最大的差值,然后改變像素塊中的像素來嵌入水印信息,在嵌入水印的過程中要考慮到像素是否溢出,對(duì)于附加信息也是分成幾個(gè)不同的區(qū)域進(jìn)行嵌入,雖然嵌入容量有了很大的提高,但是圖像的PSNR比較低,嵌入和提取的規(guī)則過于復(fù)雜。文獻(xiàn)[7]提出一種基于雙層嵌入的可逆灰度圖像水印算法。利用直方圖平移的思想來解決嵌入時(shí)可能出現(xiàn)的溢出問題,計(jì)算每一個(gè)分塊兩像素的差值,選擇差值直方圖最大的峰值點(diǎn)來嵌入水印信息和互補(bǔ)嵌入的方法來提高嵌入容量。雖然該算法在水印嵌入和提取之后嵌入容量和PSNR較好,但是在嵌入和提取的規(guī)則中可以看到,只在塊的第一個(gè)像素嵌入水印信息,同時(shí)平移像素會(huì)改變沒有嵌入水印信息的像素,這樣做沒有必要,而且會(huì)影響圖像的質(zhì)量,除此之外,嵌入的水印信號(hào)是隨機(jī)生成的二值水印序列,沒有實(shí)際的意義。文獻(xiàn)[8]也是利用了分塊和直方圖平移的思想。文獻(xiàn)[9-11]利用圖像相鄰像素點(diǎn)差值直方圖的特征來嵌入水印信息。由于此算法選擇在最大峰值點(diǎn)出嵌入水印信息,當(dāng)在選擇多層嵌入時(shí),由于固定的峰值點(diǎn),所以算法的性能下降很快。
在以上問題的基礎(chǔ)上,本文針對(duì)水印的嵌入容量和不可見性,利用雙層嵌入的方法,將原始圖像劃分成不同類型的水平和垂直分塊,求出三種分塊類型中的最大峰值對(duì)應(yīng)的絕對(duì)差值,由于像素的LSB位對(duì)圖像的質(zhì)量影響較小,因此選擇將水印信息嵌入在差值對(duì)應(yīng)塊的第一個(gè)像素和第三個(gè)像素的LSB中,同時(shí)記錄所在塊的索引。嵌入的水印信息是有實(shí)際意義的水印圖像二值化生成的0和1序列,如果嵌入的水印信息和像素的最低有效位相等,則此像素并不會(huì)發(fā)生改變,從而保證了圖像的質(zhì)量。采用多層嵌入和求像素的絕對(duì)差值來嵌入水印信息,保證了水印信息的嵌入容量。仿真試驗(yàn)表明:本方案算法簡單,不僅能夠?qū)崿F(xiàn)原始圖像的無損恢復(fù),而且在水印嵌入容量和不可見性方面達(dá)到了很好的效果。
1.1 劃分圖像分塊類型
為了在保證圖像質(zhì)量的前提下嵌入更多的水印信息,對(duì)原始圖像進(jìn)行分塊,根據(jù)最大峰值對(duì)應(yīng)的差值對(duì)每一塊進(jìn)行嵌入操作。按照水平和垂直的方向?qū)υ紙D像進(jìn)行三種不同類型的分塊,分塊的大小分別是1×3和3×1。對(duì)于塊的類型,Type=0,表示分塊是從一行或一列的第一個(gè)像素開始逐次分塊,如圖1(a)所示;Type=1,表示分塊是從一行或者一列的第二個(gè)像素開始逐次分塊,如圖1(b)所示;Type=2,表示分塊是從一行或一列的第三個(gè)像素開始逐次分塊,如圖1(c)所示。具體的分塊類型如圖1所示。
圖1 圖像分塊類型
1.2 水印的嵌入
水印的嵌入首先按照?qǐng)D1所示的類型對(duì)原始圖像進(jìn)行分塊,計(jì)算三種分塊類型中差值的最大峰值點(diǎn),按照最大峰值點(diǎn)對(duì)差值進(jìn)行分組,分組之后與最大峰值點(diǎn)進(jìn)行比較,若是與最大峰值點(diǎn)相等,則表示是要嵌入水印信息的像素,按照水平嵌入算法進(jìn)行水印信息的嵌入,記錄此塊的索引,在嵌入水印信息之前,記錄將要嵌入水印的像素的LSB,作為密鑰進(jìn)行保存;在水平嵌入的基礎(chǔ)上,對(duì)水印圖像按照與水平分塊同樣的方法進(jìn)行垂直水印的嵌入,最終得到含水印的圖像,總體的嵌入流程如圖2所示。
圖2 水印的嵌入總體流程圖
本文的水印信號(hào)采用有實(shí)際意義的水印圖像二值化生成的0、1序列作為將要嵌入的水印信息,大小采用M×M的二值圖像,同時(shí)把二值水印序列由二維降成一維的形式,用W2B表示,如式(1)所示,便于后續(xù)水印的嵌入。
W2B={W2B(i),1≤i≤M×M}
(1)
為了使嵌入的過程與思路清晰明了,水印信息的嵌入分別從水平嵌入和垂直嵌入兩個(gè)方面來具體介紹。
1) 水平嵌入
按照?qǐng)D2所示的流程圖對(duì)原始圖像進(jìn)行水平分塊操作,求取差值特征,然后進(jìn)行水印的嵌入操作,具體的步驟如下:
步驟1 按照?qǐng)D1所示圖像的三種類型的分塊方法,對(duì)大小是W×W的灰度圖像進(jìn)行互不重疊的大小為1×3的分塊,設(shè)第k塊用Blockk(pixel1,pixel2,pixel3)來表示,其中,pixel1、pixel2、pixel3表示塊k中的連續(xù)的三個(gè)像素值,分別計(jì)算第一個(gè)像素pixel1(Blockk(1))和第二個(gè)像素pixel2(Blockk(2)),第二個(gè)像素pixel2(Blockk(2))和第三個(gè)像素pixel3(Blockk(3))的絕對(duì)差值,如式(2)和式(3)所示;同時(shí)保存絕對(duì)差值。
(2)
(3)
步驟2 分別求出三種類型水平分塊差值的最大峰值,對(duì)三個(gè)峰值進(jìn)行比較,同時(shí)記錄最大的峰值對(duì)應(yīng)的差值和水平分塊的類型,分別用MP和Type表示。
步驟3 根據(jù)MP和Type分別對(duì)第1步生成的差值集合按照每塊中第一個(gè)差值和第二個(gè)差值進(jìn)行分組,分別用firstValue和secondValue來表示;依次遍歷兩個(gè)差值集合,判斷集合中的差值是否與最大峰值對(duì)應(yīng)的差值相等,若相等,表示是要嵌入水印的塊,同時(shí)記錄此塊的索引,分別用集合firstindex和secondindex來存儲(chǔ);反之,則不記錄塊索引,所記錄塊的索引作為密鑰傳送到接收方。
步驟4 若第一個(gè)差值與最大峰值所對(duì)應(yīng)的差值相等,則在塊的第一個(gè)像素的LSB嵌入1比特水印信息,同時(shí)在嵌入之前記錄此像素的LSB,用bitSave集合來存儲(chǔ),便于后面原始圖像的恢復(fù);同理,若第二個(gè)差值與最大峰值對(duì)應(yīng)的差值相等,則在塊的第三個(gè)像素的LSB嵌入1比特水印信息,同時(shí)在嵌入之前記錄此像素的LSB,用bitSave集合來表示。嵌入規(guī)則如式(4)和式(5)所示:
(4)
(5)
其中,W2B(i)表示的是二值水印序列中的一位水印比特,bitSave作為密鑰信息發(fā)送給接受方。
步驟5 為了減少密鑰的傳送,把以上步驟中記錄的分塊類型用附加信息的形式進(jìn)行存儲(chǔ)。在本文中附加信息的長度總共占12位,其中標(biāo)志附加信息T的長度占據(jù)8位,水平分塊的類型Type占據(jù)2位,垂直分塊的類型Type1占據(jù)2位。把T,Type和Type1轉(zhuǎn)換成二進(jìn)制后按照T--->Type--->Type1的順序?qū)Ω郊有畔⑦M(jìn)行存儲(chǔ)。附加信息將會(huì)在垂直分塊中作為秘密信息進(jìn)行嵌入。
2) 垂直嵌入
按照?qǐng)D2所示的流程圖對(duì)原始圖像進(jìn)行垂直分塊操作,求取差值特征,然后進(jìn)行水印的嵌入操作,具體的步驟如下:
(6)
(7)
步驟2 分別求出三種類型垂直分塊差值的最大峰值,對(duì)三個(gè)峰值進(jìn)行比較,同時(shí)記錄最大的峰值對(duì)應(yīng)的差值和垂直分塊的類型,分別用MP1和Type1表示。
步驟3 根據(jù)MP1和Type1分別對(duì)第1步生成的差值集合按照每塊中第一個(gè)差值和第二個(gè)差值進(jìn)行分組,分別用firstValue1和secondValue1來存儲(chǔ);依次遍歷兩個(gè)差值集合,判斷集合中的差值是否與最大峰值對(duì)應(yīng)的差值相等,若相等,表示是要嵌入水印的塊,同時(shí)記錄此塊的索引,分別用firstindex1和secondindex1來存儲(chǔ);反之,則不記錄塊索引。所記錄塊的索引作為密鑰信息傳送到接收方。
步驟4 采用和水平嵌入相同的嵌入規(guī)則,若第一個(gè)差值與最大峰值所對(duì)應(yīng)的差值相等,則在塊的第一個(gè)像素的LSB嵌入1比特水印信息,在嵌入之前記錄此像素的LSB,用bitSave1集合來存儲(chǔ);同理,若第二個(gè)差值與最大峰值對(duì)應(yīng)的差值相等,則在塊的第三個(gè)像素的LSB嵌入1比特水印,在嵌入之前記錄此像素的LSB,用bitSave1集合來存儲(chǔ)。嵌入規(guī)則如式(8)和式(9)所示:
(8)
(9)
其中,W2B′(i)表示的是二值水印序列中的一位水印比特,bitSave1作為密鑰信息發(fā)送給接收方。
步驟5 根據(jù)水平分塊中存儲(chǔ)的附加信息,將第1步中提取像素的最低有效位用附加信息替換,得到最終含水印圖像。
根據(jù)水印嵌入的總體流程圖(圖2),本文在Matlab環(huán)境下對(duì)水印的嵌入算法進(jìn)行了編程實(shí)現(xiàn),其中水平嵌入(以Type=0為例)過程的算法核心編程抽象描述及注釋如下:
1: read the source image I1; %大小是wxw
2: if type==0
%判斷分塊類型
3: for i=1:w
4: for j=1:3:w-2
5: Block=int32(I1(i,j:j+2));
%對(duì)圖像分塊,大小為1×3
6: calculate D1 using formula (2);
%計(jì)算第一個(gè)差值
7: if D1==MP
%如果差值等于峰值MP
8: get and save the LSB then embed the watermark using formula(4);
%獲取和保存LSB,然后嵌入水印信息
9: end
10: calculate D2 using formula (3);
%計(jì)算第二個(gè)差值
11: if D2==MP
%如果差值等于峰值MP
12: get and save the LSB then embed the watermark using formula (5);
%獲取和保存LSB,然后嵌入水印信息
13: end
14: end
15: end
16:end
17:output watermark image;
%輸出含水印圖像
接收方根據(jù)發(fā)送方秘密傳送過來的密鑰信息進(jìn)行水印信號(hào)的提取以及原始圖像的恢復(fù)。密鑰信息分別為水平分塊中第一個(gè)和第二個(gè)差值集合中嵌入水印信息的塊的索引(firstindex和secondindex)、垂直分塊中第一個(gè)和第二個(gè)差值集合中嵌入水印信息的塊的索引(firstindex1和secondindex1)以及水平和垂直嵌入水印信息的像素最低有效位集合(bitSave和bitSave1)。總體的流程如圖3所示。
圖3 水印的提取與圖像的恢復(fù)流程圖
水印提取和原始圖像恢復(fù)的具體步驟:
步驟1 首先提取第1列的前8個(gè)像素,解碼得到附加信息的長度,按照附加信息的長度提取灰度圖像像素的LSB,得到相應(yīng)的附加信息,由十進(jìn)制轉(zhuǎn)換成二進(jìn)制得到水平分塊的類型Type3,垂直分塊的類型Type4。
步驟2 第1列不提取水印信息,根據(jù)Type4對(duì)應(yīng)的分塊類型對(duì)原始圖像從第2列進(jìn)行3×1的垂直分塊,當(dāng)所分塊的索引與密鑰中的索引值相等時(shí),就從相應(yīng)像素的LSB位提取一位水印信息,同時(shí)將此像素的LSB位用密鑰bitSave1中保存像素的LSB位進(jìn)行替換,得到恢復(fù)的圖像;不相等時(shí)就跳過,不對(duì)水印圖像做任何操作。分塊的索引用Blockindex來表示,具體按照如式(10)和式(11)的規(guī)則進(jìn)行水印的提取和原始圖像的恢復(fù)。
ifBlockindex=firstindex1(p)
(10)
ifBlockindex=firstindex1(q)
(11)
其中,對(duì)于塊索引Blockindex每循環(huán)一次就會(huì)增加1;p、q、index表示的是集合中的索引值,當(dāng)一個(gè)條件滿足后,他們都會(huì)自動(dòng)增加1,water2表示提取出的水印信息。
步驟3 在步驟2提取出的水印信號(hào)中,取出與附加信息長度相等的水印信息,并將此附加信息替換原來提取像素的最低有效位,得到垂直恢復(fù)后的圖像。
步驟4 根據(jù)Type3對(duì)應(yīng)的分塊類型對(duì)步驟3中恢復(fù)之后的圖像進(jìn)行1×3的水平分塊,當(dāng)所分塊的索引與密鑰中的索引值相等時(shí),就從相應(yīng)像素的LSB位提取一位水印信息,同時(shí)將此像素的LSB位用密鑰bitSave中保存的像素的LSB位進(jìn)行替換,得到恢復(fù)的圖像;不相等時(shí)就跳過,不對(duì)水印圖像做任何操作。分塊的索引用Blockindex來表示。具體按照如式(12)和式(13)的規(guī)則進(jìn)行水印的提取和原是圖像的恢復(fù)。
ifBlockindex=firstindex(p)
(12)
ifBlockindex=firstindex(q)
(13)
其中,對(duì)于塊索引Blockindex每循環(huán)一次就會(huì)增加1,p,q,index表示的是集合中的索引值,當(dāng)每一個(gè)條件滿足后,他們都會(huì)自動(dòng)增加1,water1表示提取出的水印信息。
步驟5 從垂直提取的水印信息中去除附加信息后,組合步驟3剩余的水印信息和步驟4中提取出的水印信息,得到最后提取出的水印信號(hào)。
步驟6 把提取出的二值水印信息序列轉(zhuǎn)換成二值水印圖像,可以得到原始的水印圖像。
利用接收端收到的密鑰信息可以進(jìn)行水印的提取,本文在Matlab環(huán)境下實(shí)現(xiàn)了水印圖像的提取和原始圖像的恢復(fù)算法,分塊仍然按照?qǐng)D1所示的類型進(jìn)行,算法的核心編程抽象描述以及注釋如下(以垂直提取Type4=0為例來說明):
1:read watermark image I2;
%讀取水印圖像
2:extract secret key and decode according to Step 1;
%根據(jù)步驟1 提取密鑰并解碼
3:Blockindex=0;
%用于記錄分塊的索引
4:
if typ4==0
5: for j=(c+1):W
%c表示前c列不提取水印信息
6: for i=1:3:W-2
7: Block=int32(I2(i,j:j+2));
%對(duì)圖像分塊,大小為3×1
8: Blockindex==Blockindex+1;
%用于記錄分塊的索引
9: if Blockindex==firstindex1(p)
%如果塊索引與第一個(gè)密鑰中的索引值相等
10: get and save the LSB then recover the LSB using formula (10);
%獲取和保存LSB,然后恢復(fù)最低位
11: end
12: if Blockindex==secondindex1(q)
%如果塊索引與第二個(gè)密鑰中的索引值相等
13: get and save the LSB then recover the LSB using formula (11);
%獲取和保存LSB,然后恢復(fù)最低位
14: end
15: end
16: end
17:end
18:output image after vertical recovery;
本文主要從水印嵌入容量和不可見性兩個(gè)方面來客觀衡量可逆水印算法的性能。利用Matlab R2014a在Windows操作系統(tǒng)環(huán)境下進(jìn)行仿真測試,在測試過程中,從標(biāo)準(zhǔn)灰度圖像庫中分別采用大小為512×512和256×256的經(jīng)典灰度圖像(Lena、Pepper、Airplane、Boat)進(jìn)行實(shí)驗(yàn),如圖5(a-h)所示;它們的紋理復(fù)雜程度不同,其中,Lena圖像和Airplane圖像屬于紋理簡單圖像,Pepper和Boat圖像屬于紋理復(fù)雜的圖像。水印圖像為有意義的大小為512×512的二值圖像,如圖4(a)所示。
用提取前后載體圖像的歸一化系數(shù)(NC)來衡量算法的可逆性,公式如下所示:
(14)
其中,w1和w2分別表示原始載體和恢復(fù)后的載體,l1和l2表示提取前后載體的大小。
3.1 可逆性測試
本文首先對(duì)可逆性進(jìn)行了測試,通過比較嵌入和提取水印前后載體圖像之間的NC值來驗(yàn)證算法的可逆性。表1給出了可逆性測試結(jié)果。從中可以看出原始載體圖像和提取水印后恢復(fù)的載體圖像的歸一化系數(shù)NC都為1,說明了算法的可逆性,即提取水印后恢復(fù)的圖像和原始圖像是一樣的。從恢復(fù)后的二值水印圖像和原始水印圖像對(duì)比中可以看出,兩者沒有任何區(qū)別(如圖4所示)。
表1 本文算法可逆性測試
圖4 二值水印圖像
3.2 不可見性和水印容量測試
接下來從水印的不可見性、水印的嵌入容量以及與相關(guān)文獻(xiàn)算法的對(duì)比來進(jìn)行說明。首先,從不可見性方面來進(jìn)行分析,其一,從原始圖像和含水印圖像(如圖5所示)中可以看出,嵌入水印前后圖像從主觀上來看,沒有任何的不同,用肉眼幾乎是看不到圖像中含有水印信息,說明水印不可見性很好。其二,從峰值信噪比(PSNR)上來看,本文算法在水平方向上進(jìn)行水印的嵌入時(shí),對(duì)于Lena圖像來說,其PSNR為59.369 3dB,Pepper圖像的PSNR為58.317 7dB,Airplane圖像的PSNR是59.382 8dB,Boat圖像的PSNR是59.231 8dB,PSNR都在58dB以上,再從垂直方向上水印嵌入的峰值信噪比來看,其PSNR都在55dB以上。與其他同類算法相比,本文的峰值信噪比都高于其他算法,如表2和表3所示,從這幾個(gè)方面可以看出,本文算法不可見性很好。
圖5 原始圖像與含水印圖像
其次,從水印的嵌入容量上來看,由于所采用的載體圖像的紋理不同,所以嵌入的水印信息的容量也是不一樣的。但是,無論對(duì)于哪一種載體圖像,不管是在水平方向上進(jìn)行嵌入,還是在垂直方向上進(jìn)行嵌入,本文算法的嵌入容量都明顯大于文獻(xiàn)[7]算法的嵌入容量,最終從水平和垂直方向上嵌入水印比特?cái)?shù)的總量上可以看出,本文總的嵌入容量高于文獻(xiàn)[7]算法,表2、表3給出了本文算法和文獻(xiàn)[7]的對(duì)比情況。本文和文獻(xiàn)[6]也進(jìn)行了對(duì)比,雖然低于文獻(xiàn)[6]三像素差值算法的嵌入水印總?cè)萘?,但是在PSNR上遠(yuǎn)遠(yuǎn)高于文獻(xiàn)[6]算法,如表4所示。
表2 水平嵌入后圖像的PSNR和嵌入容量
表3 垂直嵌入后圖像的PSNR和嵌入容量
表4 與三像素差值算法在總?cè)萘亢蚉SNR上的比較
為了說明不同的圖像由于大小、紋理不同而對(duì)嵌入的水印容量的影響,本文給出了大小為256×256的一組圖像的實(shí)驗(yàn)結(jié)果,如表5所示。
表5 256×256圖像在本算法中的PSNR和總嵌入容量
從表5中的數(shù)據(jù)與表4中的數(shù)據(jù)對(duì)比中可以看出, 512×512圖像和256×256圖像在嵌入的水印總?cè)萘可嫌泻艽蟮牟顒e。另外對(duì)于紋理復(fù)雜的圖像,如Pepper和Boat圖像,在相同大小情況下,其水印嵌入的總?cè)萘肯鄬?duì)紋理簡單圖像來說較大。
最后本文給出了在相同嵌入水印容量的情況下,本文算法和文獻(xiàn)[7]的對(duì)比情況。由于文獻(xiàn)[7]產(chǎn)生的二值水印序列是隨機(jī)產(chǎn)生,為了使測試環(huán)境一樣,利用與本文生成二值水印序列相同的方法產(chǎn)生文獻(xiàn)[7]要嵌入的水印序列。在同樣的測試環(huán)境下,兩種算法在相同的嵌入容量下,對(duì)水平嵌入和垂直嵌入水印信息后本文算法與文獻(xiàn)[7]算法的PSNR的大小進(jìn)行了測試,其算法性能對(duì)比的結(jié)果如圖6和圖7所示。從水平嵌入和垂直嵌入的算法性能對(duì)比圖中可以看出,兩種算法在相同的嵌入容量下,雖然隨著嵌入容量增加,峰值信噪比不斷降低,但是總體上來看,本文算法的PSNR都明顯高于文獻(xiàn)[7]中的PSNR。
圖6 水平嵌入后算法的性能對(duì)比圖
圖7 垂直嵌入后算法的性能對(duì)比圖
總之,不管是從圖像的不可見性、嵌入容量還是與其他算法對(duì)比的結(jié)果中可以看出,本文算法采用對(duì)原始圖像進(jìn)行不同的類型分塊,求三個(gè)像素的絕對(duì)差值,利用絕對(duì)差值求最大峰值點(diǎn)和雙層嵌入水印信息的方法,從而使嵌入容量明顯高于文獻(xiàn)[7]的算法。這是因?yàn)檫@些算法采用的是固定分塊類型,求取每兩個(gè)像素差值的最大峰值點(diǎn)嵌入水印信息,因此限制了水印的嵌入容量。另外,本文算法采用的二值水印圖像并不是隨機(jī)生成的,而是由有意義的圖像二值化生成的水印序列,這樣能夠保證產(chǎn)生的水印序列是有意義的水印序列。由于像素的最低有效位對(duì)圖像的影響較小,同時(shí)本文算法采用把水印信息嵌入在像素的LSB中,當(dāng)嵌入水印信息位與像素的最低有效位一致時(shí),并不改變像素的值,從而保證了圖像的質(zhì)量,所以在峰值信噪比上明顯高于文獻(xiàn)[7]。文獻(xiàn)[7]中的算法在嵌入水印的過程中要對(duì)溢出的像素進(jìn)行處理,利用直方圖平移的思想嵌入水印信息,對(duì)沒有嵌入水印信息的像素有所改變,進(jìn)而影響了圖像的質(zhì)量。另外,從本文算法與文獻(xiàn)[7]的對(duì)比圖中可以看出,在相同的嵌入容量下,本文算法峰值信噪比明顯高于文獻(xiàn)[7]中的算法。和文獻(xiàn)[6]三像素差值的無損數(shù)據(jù)隱藏算法相比,盡管嵌入容量偏低,但是PSNR很高。當(dāng)然,本文算法在水印信息提取的過程中和其他算法相比更簡單,提取時(shí)不需要載體圖像,只需知道提取出的密鑰和接收的密鑰就可以對(duì)原始圖像進(jìn)行無損恢復(fù)。
本文所提出的多層可逆水印算法,利用三像素塊絕對(duì)差值把二值化生成的水印序列分層嵌入在像素的最低有效位中。仿真實(shí)驗(yàn)結(jié)果表明:采用雙層嵌入的思想,不僅使嵌入容量有了很大的提高,同時(shí)嵌入在像素的最低有效位對(duì)圖像的不可見性也有了極大的改善,兼顧了圖像水印不可見性和嵌入容量兩個(gè)方面,能夠?qū)崿F(xiàn)對(duì)水印的盲提取和原始圖像的無損恢復(fù),從而能夠更好地實(shí)現(xiàn)對(duì)圖像的版權(quán)保護(hù)和內(nèi)容完整性的認(rèn)證。該方法可用于法律、醫(yī)療領(lǐng)域中圖像的信息隱藏和載體圖像無損恢復(fù),能夠很好地解決圖像中信息嵌入容量小和無損恢復(fù)原始圖像的問題。
[1] 尚冠宇,郭凡新,鄧小鴻.基于采樣預(yù)測和差值變換的醫(yī)學(xué)圖像可逆水印算法[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(6):22-24.
[2] 高海波,鄧小鴻,陳志剛.基于可逆可見水印的醫(yī)學(xué)圖像隱私保護(hù)算法[J].計(jì)算機(jī)應(yīng)用,2014,34(1):119-123,157.
[3]TianJun.ReversibleDataEmbeddingUsingaDifferenceExpansion[J].IEEETransactionsonCircuitsandSystemsforVedioTechnology,2003,13(8):890-896.
[4]MehmetUtkuCelik,GauravSharma,AhmetMuratTekalp,etal.LosslessGeneralized-LSBDataEmbedding[J].IEEETransactionsonmageProcessing,2005,14(2):253-266.
[5]XuanGuorong,YangChenyun,ZhenYizhan.ReversibleDataHidingBasedonWaveletSpreadSpectrum[J].IEEE6thWorkshoponMultimediaSignalProcessing,2004:211-214.
[6]ChingChiuanLin,NienLinHsueh.Alosslessdatahidingschemebasedonthree-pixelblockdifference[J].PatternRecognition,2008,4:1415-1425.
[7] 熊祥光,韋立.基于直方圖平移和互補(bǔ)嵌入的可逆圖像水印方案[J].計(jì)算機(jī)工程,2015,41(8):180-185.
[8] 鄭淑麗,邢慧芬,王美玲,等.基于直方圖平移和差分直方圖的可逆水印[J].系統(tǒng)仿真學(xué)報(bào),2013,11(8):2717-2722.
[9] 文家福,王嘉禎,張政保,等.一種基于可逆數(shù)字水印的圖像認(rèn)證方案[J].計(jì)算機(jī)應(yīng)用與軟件,2010,27(4):121-123.
[10] 王繼軍.圖像插值空間大容量可逆數(shù)字水印算法[J].中國圖像圖形學(xué)報(bào),2014,19(4):527-533.
[11] 黃志強(qiáng),王美清.基于鄰域預(yù)測差值直方圖平移的可逆信息隱藏[J].計(jì)算機(jī)工程,2014,40(4):117-119.
[12] 宋偉,侯建軍,李趙紅.一種基于塊分類和差值擴(kuò)展的可逆數(shù)據(jù)隱藏算法[J].中南大學(xué)學(xué)報(bào):自然科學(xué)版,2011,42(3):694-702.
[13] 張秋余,孫媛,晏燕.基于分塊自適應(yīng)壓縮感知的可逆水印算法[J].電子與信息學(xué)報(bào),2013,35(4):798-804.
[14] 劉芳,汪玉凱.一種基于差值直方圖平移的多層可逆水印算法[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(1):304-307.
[15] 皇甫大恩,劉曉斐.基于小波域的篡改定位可逆水印算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(5):1584-1587.
[16] 高曉琴,晏勇,唐琦.基于可逆數(shù)字水印的圖像認(rèn)證新方法[J].西南師范大學(xué)學(xué)報(bào):自然科學(xué)報(bào),2015,40(7):120-123.
[17] 姜傳賢,楊鐵軍,董明剛,等.基于線性空間隱藏模型的可逆圖像水印算法[J].自動(dòng)化學(xué)報(bào),2014,40(10):2325-2333.
MULTILAYER REVERSIBLE IMAGE WATERMARK ALGORITHM BASED ONTHREE-PIXEL BLOCK DIFFERENCES
Qian Huashan Tian Lihua Li Chen*
(SchoolofSoftwareEngineering,Xi’anJiaotongUniversity,Xi’an710049,Shaanxi,China)
The requirements of digital image reversible watermarking algorithms become exigent in watermark embedding capacity and imperceptibility. In order to meet the requirements, a multilayer reversible image watermark algorithm based on three-pixel block differences is proposed. Firstly, the original image is divided into horizontal blocks according to three types. The absolute difference of adjacent three-pixel block is calculated simultaneously, then they should be grouped so that the maximum peak point of horizontal blocks can be obtained. The binary watermark is embedded in LSB of the first pixel and the third pixel. At the same time, the index of the block with the maximum peak point and LSB of embedding watermark is recorded. Then, the original image is divided into three types of vertical blocks, and watermark is embedded in the same way. Simulation result shows that the proposed algorithm has made a significant improvement in the aspects of invisibility and watermark capacity compared with other similar algorithms.
Image watermark Reversible watermark Pixel block Absolute difference LSB
2016-02-29。國家自然科學(xué)
61403302);西安交通大學(xué)科研業(yè)務(wù)
基金項(xiàng)目(XJJ2016029)。錢華山,碩士生,主研領(lǐng)域:數(shù)字圖像水印。田麗華,高工。李晨,講師。
TP3
A
10.3969/j.issn.1000-386x.2017.03.046