[李楸桐 黃平]
?
一種基于數(shù)字圖像嵌入式小波編碼的水印算法
[李楸桐黃平]
摘要在圖像嵌入式小波編碼算法(EZW、SPIHT、JPEG2000d等)的基礎(chǔ)上提出了一種新穎的數(shù)字圖像水印算法。該算法把水印比特的嵌入與圖像小波編碼過(guò)程中的比特平面編碼有機(jī)地相結(jié)合,水印的檢測(cè)或提取具有分級(jí)漸進(jìn)特性,檢測(cè)的效率高,實(shí)驗(yàn)表明該算法有很好的不可見性和魯棒性,從而具有一定的理論與應(yīng)用價(jià)值。
關(guān)鍵詞:小波變換 數(shù)字水印 人類視覺系統(tǒng) 不可見性 嵌入式零樹小波
李楸桐
成都東軟學(xué)院。
黃平
成都東軟學(xué)院。
常見的圖像小波編碼算法是指Shapiro提出的嵌入式小波編碼算法[1](EZW),Said和Parlman提出的SPIHT算法[2]以及JPEG2000[3]等編碼算法,近年來(lái),它們已得到實(shí)際的應(yīng)用,具有嵌入式傳輸特性,嵌入式特性指的是對(duì)重要的圖像或視頻信息優(yōu)先編碼,并將壓縮后的結(jié)果放在碼流的初始部分,然后依次按照信息的重要程度放置碼流的其他部分,這樣,低碼率的碼流就嵌入在高碼率的碼流中。因而支持漸進(jìn)式傳輸,可以在任意點(diǎn)停止解碼,能嚴(yán)格滿足目標(biāo)碼率或目標(biāo)失真度的要求。
算法EZW和SPIHT編碼中主要采用零樹與逐次逼近量化(SAQ)技術(shù)。在EZW編碼算法中,逐次逼近量化方法為:在編碼過(guò)程中采用一個(gè)閾值序列(T0,T1,…,TK?1)來(lái)依次確定重要系數(shù)(大于閾值的小波系數(shù))和不重要系數(shù)(小于閾值的小波系數(shù)),各個(gè)閾值滿足條件:為小波變換系數(shù)中的最大幅值,SAQ在量化過(guò)程中以2的倍數(shù)不斷細(xì)化閾值,以在不同的比特平面上進(jìn)行編碼。同時(shí)始終保持著兩個(gè)列表:主表和副表,主表包含重要系數(shù)的映射即記錄重要系數(shù)的幅值,副表主要是對(duì)已發(fā)現(xiàn)的重要系數(shù)進(jìn)行更細(xì)化的表示。編碼首先給出初始閾值T0,進(jìn)行第一次主掃描,掃描到重要系數(shù)則將其幅值加到副表中,然后將該系數(shù)所在的位置零,接下來(lái)進(jìn)行第一次副掃描,細(xì)化重要系數(shù)的表示,更新閾值,進(jìn)行新一輪的主掃描,對(duì)上一輪已編碼的重要系數(shù)不再掃描。假設(shè)當(dāng)前閾值為Tk,主掃描后已找到的重要系數(shù)的幅值在之間,此時(shí)解碼器可能用作為它的重構(gòu)值,副掃描則以為界,將區(qū)間再分為兩部分,用1位信息表示一個(gè)值處于區(qū)間的上部分,用另一位信息表示一個(gè)值處于區(qū)間的下部分],上部分的重構(gòu)值為,下部分的重構(gòu)值為
SPIHT編碼算法是EZW算法的擴(kuò)展,其只采用2的指數(shù)作為閾值,起始閾值取為T0=2n,n=lb|Xmax|」,Xmax是小波變換系數(shù)中的最大幅值。一遍掃描完成后,n減1,相當(dāng)于閾值減半,進(jìn)行下一遍掃描,經(jīng)過(guò)多次掃描,重要系數(shù)是小波變換系數(shù)整數(shù)部分的二進(jìn)制表示,這顯然是一種典型的比特平面編碼。
JPEG2000編碼過(guò)程與EZW和SPIHT不同,為了減少表示小波系數(shù)的比特?cái)?shù),算法中采用了量化技術(shù)。對(duì)子帶k的系數(shù)fk(i,j )使用式(1)量化為值qk(i,j ):
Rk是子帶k的標(biāo)定動(dòng)態(tài)范圍,而k和μk是分配給子帶系數(shù)的指數(shù)和尾數(shù)的比特?cái)?shù)。對(duì)于無(wú)誤差編碼,μk=0,Rk=k,?k=1;而對(duì)于有誤差編碼,用式(2)給出動(dòng)態(tài)范圍Rk。
式中,RI為采樣的比特精度,gaink為子帶增益,μk、k用其它方法導(dǎo)出。
最后對(duì)系數(shù)比特建模,算術(shù)編碼,比特流分層和分組。每個(gè)變換塊分量的子帶系數(shù)排列在稱為碼塊的矩形中,這個(gè)碼塊一次對(duì)一個(gè)位平面進(jìn)行獨(dú)立編碼,從帶有非零元素的最高有效位平面開始,每個(gè)位平面進(jìn)行3次處理,位平面的每比特僅在3次處理中的一次編碼。
式中,Nk(i,j )為構(gòu)成解碼對(duì)象的位平面數(shù),包括進(jìn)行位平面數(shù)據(jù)截?cái)鄷r(shí)的解碼對(duì)象,MSBl(k,i,j)為子帶k的變換系數(shù)第l個(gè)MSB(l=1,2,…,Nk(i,j)。
可見,JPEG2000的編碼器實(shí)質(zhì)上也是位平面編碼器。
既然常見的圖像小波編碼是基于比特平面的,如果設(shè)計(jì)的水印算法能與比特平面編碼相結(jié)合,則算法不僅可以與嵌入式小波編碼技術(shù)相兼容,而且水印信號(hào)與載體圖像一樣具有漸進(jìn)式重構(gòu)的特性。因此作如下考慮:水印比特1嵌入小波域某位系數(shù)后,該系數(shù)在臨界可見誤差門限內(nèi)變?yōu)橹匾禂?shù),即在比特平面中該位為“1”;水印比特0嵌入某位后,該系數(shù)在臨界可見誤差門限內(nèi)變?yōu)椴恢匾禂?shù),即在比特平面中該位為“0”,這樣,水印比特便在位平面編碼中完整地保留下來(lái)。選擇水印比特的嵌入位置(對(duì)于JPEG2000的有誤差編碼,應(yīng)在量化后選擇)是該算法的關(guān)鍵部分,分兩步進(jìn)行:
步驟一、設(shè)圖像小波變換后的系數(shù)為f (i,j),逐層疊代選擇小波系數(shù)的迭代次數(shù)以T0= 2n′為初始閾值逐層折半遞減掃描,計(jì)算以閾值和為中心的區(qū)間(即區(qū)間,不同的閾值的鄰域不重疊)內(nèi)的每個(gè)重要系數(shù)和不重要系數(shù)的臨界可見誤差門限,鄰域半徑Rk由Tk的值和嵌入水印的量確定。設(shè)誤差門限為JNDi,j(i,j是系數(shù)的位置索引),取每次迭代掃描的鄰域內(nèi)所有小波系數(shù)的臨界可見誤差門限為JNDk=min(JNDi,j, Rk),不同的迭代層的誤差門限是不同的。
步驟二、重復(fù)步驟一中的按初始閾值逐層折半遞減掃描的操作,選擇區(qū)間(Tk?JNDk/2Tk+JNDk/2)和(?Tk+JNDk/2?Tk?JNDk/2)區(qū)間長(zhǎng)度為JNDk保證了含水印圖像的不可感知性)內(nèi)的每個(gè)重要系數(shù)和不重要系數(shù)的位置索引及其它相關(guān)信息并組成一維數(shù)組S:
其中t、i、j是系數(shù)的位置索引,k =1,2,…,n',設(shè)水印比特總數(shù)為L(zhǎng),將數(shù)組S的前L個(gè)元素、標(biāo)識(shí)符水?。ǘS二值水印信號(hào))的維數(shù)及混沌映射初值x0(式(5)中)經(jīng)加密處理后作為在解碼過(guò)程中提取水印的密鑰K%發(fā)送到水印檢測(cè)器(在解碼過(guò)程中提取水印時(shí)使用)。
對(duì)于二維標(biāo)識(shí)符水印信號(hào),嵌入前對(duì)水印作混沌置亂處理,設(shè)水印的高和寬分別為m、n,用Logistic映射[4][5]把水印按行轉(zhuǎn)化為一維水印序列w,設(shè)x0是映射初值。
其中,i=1,2,…,m,j=1,2,…,n,[ ]是取整運(yùn)算,xk? mn是水印序列w中的位置索引,c是分枝參數(shù)。
在數(shù)組S的前L個(gè)元素所表示的小波系數(shù)位按式(6)嵌入水印比特:
sign是小波系數(shù)的符號(hào),由于嵌入水印后處于邊界值的小波系數(shù)易受影響,其波動(dòng)性直接影響了算法的穩(wěn)健性,應(yīng)作如下調(diào)整:若加水印的小波系數(shù)與邊界Tk、Tk+JNDk/2、Tk?JNDk/2之間的距離小于一定值α(α為較小的正值)時(shí),將該系數(shù)值相應(yīng)的調(diào)整為與Tk的距離為JNDk/4時(shí)的值:
算法的具體步驟為:
(1)將圖像f進(jìn)行L級(jí)小波變換,得到3*L+1個(gè)子帶,算出初始閾值T0,逐層折半遞減掃描得出每層選出的小波系數(shù)的臨界可見誤差門限JNDk。
(2)逐層折半遞減掃描,由(4)式選擇重要小波系數(shù)和不重要小波系數(shù)的位置索引組成一維數(shù)組S。
(3)對(duì)于二維水印圖像,則用混沌置亂(式(5))將其并轉(zhuǎn)化為一維水印序列w。
(4)由嵌入算法(6)式嵌入水印比特。
(5)由調(diào)整算法(7)式調(diào)整處于邊界值的小波系數(shù)。
(6)小波反變換得到含水印圖像f'。
水印的提取可以在圖像小波編碼解碼過(guò)程中和圖像數(shù)據(jù)完全恢復(fù)后進(jìn)行。
(1)在解碼過(guò)程中提取水印
水印比特的提取過(guò)程與用混沌置亂將其轉(zhuǎn)換成二維水印的過(guò)程并行進(jìn)行。由(10)式計(jì)算已恢復(fù)水印與原始水印的相似度,大于某一定值則認(rèn)為檢測(cè)到了水印的存在,可隨時(shí)停止水印的提取。
(2)非解碼過(guò)程中提取水印
式中,i=1,2,…。
實(shí)驗(yàn)的樣本空間是500個(gè)在[1,-1]內(nèi)長(zhǎng)度為1024的隨機(jī)序列,使用512×512×8的Lena512灰度圖像作為原始圖像來(lái)進(jìn)行測(cè)試,根據(jù)上一節(jié)中提出的水印算法進(jìn)行水印嵌入,得到含水印的圖像,如圖2所示,嵌入水印后的結(jié)果圖像有非常好的視覺效應(yīng),峰值信噪比(PSNR=41.2469)比較高。然后我們對(duì)含水印圖像進(jìn)行了各種攻擊實(shí)驗(yàn),相關(guān)檢測(cè)結(jié)果如圖3~12所示。
圖1 原始圖像
圖2 含水印圖像
圖3 未遭受攻擊水印檢測(cè)輸出,NC=1
4.1實(shí)驗(yàn)1小波編碼實(shí)驗(yàn)
仿真實(shí)驗(yàn)時(shí)首先將含水印圖像輸入圖像小波編解碼器,這個(gè)編解碼器是用小波基Db4進(jìn)行4級(jí)分解,然后用SPIHT算法實(shí)現(xiàn)的。在編解碼器輸出端解碼恢復(fù)原始圖像的同時(shí)提取水印,可以控制編解碼器使其在編碼端對(duì)含水印圖像進(jìn)行完全編碼,在解碼端以任意碼率解碼,含水印圖像被漸進(jìn)式地重建,因而水印信號(hào)能夠被漸進(jìn)式地恢復(fù),實(shí)驗(yàn)中的碼率控制為每位用0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1、1.5比特解碼時(shí),用上節(jié)介紹的水印提取算法檢測(cè)水印,隨機(jī)水印信號(hào)能較好地被檢測(cè)到,圖4(a)(b)是在每位比特Q=0.2(壓縮比為40:1)編碼下的檢測(cè)結(jié)果,圖像質(zhì)量較差(PSNR= 27.7962),但實(shí)驗(yàn)中仍能檢測(cè)到水印的存在(NC= 0.5959)。圖5(a)(b)是在每位比特Q=1(壓縮比為8:1)編碼下的檢測(cè)結(jié)果,圖像質(zhì)量較好(PSNR= 36.6230),實(shí)驗(yàn)中水印信號(hào)能沒有誤差損失地檢測(cè)到(NC=1)。
4.2實(shí)驗(yàn)2JPEG2000編碼實(shí)驗(yàn)
圖4?。╝) 壓縮圖像
圖4(b) 檢測(cè)結(jié)果
圖5?。╝) 壓縮圖像
圖5(b) 檢測(cè)結(jié)果
在JPEG2000編碼的仿真實(shí)驗(yàn)中,采用LuraTech 的LuraWaveSmartCompress來(lái)對(duì)含水印圖像(如圖2)進(jìn)行JPEG2000編碼,LuraWaveSmartCompress是LuraTech根據(jù)2000年3月份的JPEG2000草案編寫的JPEG2000壓縮編碼格式軟件。本文對(duì)含水印圖像分別在每位比特0.2(壓縮比為1:40)和4(壓縮比為1:2)的碼率控制下進(jìn)行JPEG2000編碼,相應(yīng)的解碼重構(gòu)圖像如圖6(a)(PSNR= 31.5285)和如圖7(a)(PSNR= 40.5823),數(shù)字水印圖像的視覺效果保持良好;檢測(cè)器輸出如圖6(b)(NC= 0.6404)和如圖7(b)(NC= 0.9925)。
圖6?。╝) 壓縮圖像
圖6?。╞) 檢測(cè)結(jié)果
圖7?。╝) 壓縮圖像
圖7(b) 檢測(cè)結(jié)果
4.3實(shí)驗(yàn)3JPEG壓縮實(shí)驗(yàn)
圖8?。╝) 壓縮圖像
圖8(b) 檢測(cè)結(jié)果
JPEG壓縮是很常見的一類攻擊。圖8給出了品質(zhì)因子為5的情況下的檢測(cè)性能。從圖8(a)可以看出,壓縮后的水印圖像已經(jīng)存在明顯的方塊效應(yīng)(PSNR= 27.2910),但從圖8 (b)的檢測(cè)結(jié)果可以看出,此時(shí)仍然有水印序列存在,相似度CN=0.6125,說(shuō)明算法在一般情況下能很好的抵抗JPEG有損壓縮。
4.4實(shí)驗(yàn)4噪聲實(shí)驗(yàn)
實(shí)驗(yàn)中向加水印圖像加入強(qiáng)度為0.3的椒鹽噪聲,如圖9(a)所示,圖像質(zhì)量已經(jīng)非常差(PSNR= 10.6853),實(shí)驗(yàn)中仍能檢測(cè)到較強(qiáng)的水印信號(hào),水印檢測(cè)器輸出如圖9(b)所示,CN= 0.6020。
圖9?。╝) 椒鹽噪聲攻擊圖像
圖9(b) 檢測(cè)器結(jié)果
(b) 檢測(cè)器結(jié)果
在數(shù)字圖像的傳輸過(guò)程中,常被加性高斯噪聲干擾。圖10給出了加入均值為0,方差為0.3的高斯噪聲的情況下的檢測(cè)性能。從圖10 (a).可以看出,加入噪聲后的水印圖像已經(jīng)存在明顯的失真(PSNR= 8.7015),但從圖10(b)的檢測(cè)結(jié)果可以看出,此時(shí)仍然可以完全正確地檢測(cè)出水印序列來(lái),CN= 0.6052。
圖10?。╝) 高斯噪聲攻擊圖像
圖10(b) 檢測(cè)器結(jié)果
4.5實(shí)驗(yàn)5 濾波實(shí)驗(yàn)
對(duì)含水印圖像進(jìn)行窗口尺寸為7×7的中值濾波攻擊實(shí)驗(yàn),如圖11(a)所示,PSNR= 28.9242,水印檢測(cè)器輸出如圖11(b)所示,CN= 0.6228。
圖11?。╝) 中值濾波攻擊圖像
圖11(b) 檢測(cè)器結(jié)果
4.6實(shí)驗(yàn)6剪切實(shí)驗(yàn)
對(duì)含水印圖像進(jìn)行任意剪切后測(cè)試其魯棒性。把剪切后的待檢圖像作為檢測(cè)器的輸入,進(jìn)行水印檢測(cè)和解碼。如圖12(a)(c)所示,PSNR= 10.7517和11.3606,水印檢測(cè)器輸出如圖12(b)(d)所示,CN= 0.6145和0.7081。
圖12?。╝) 剪切攻擊圖像
圖12(b) 檢測(cè)器結(jié)果
圖12?。╟) 剪切噪聲攻擊圖像
圖12(d) 檢測(cè)器結(jié)果
實(shí)驗(yàn)中仍采用512×512×8的Lena512灰度圖像作為測(cè)試圖像,水印圖像是大小為24×150的二值圖像。對(duì)原始圖像進(jìn)行4級(jí)小波正變換,嵌入水印后的圖像如圖13所示 (PSNR=36.6087),在沒有任何攻擊的情況下提取的水印如圖14所示(CN=1)。相關(guān)實(shí)驗(yàn)結(jié)果如圖16、表1、表2、表3所示。
圖13 原始圖像
圖14 含水印圖像
圖15 圖像水印
5.1實(shí)驗(yàn)一 質(zhì)量可擴(kuò)展性實(shí)驗(yàn)
仿真實(shí)驗(yàn)時(shí)首先將含水印圖像輸入圖像小波編解碼器,這個(gè)編解碼器與偽隨機(jī)水印實(shí)驗(yàn)中使用的編解碼器相同。實(shí)驗(yàn)中的碼率控制為每位用0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1、1.5比特解碼時(shí),用上節(jié)介紹的水印提取算法提取水印,水印信號(hào)能較好地被提取出來(lái),圖16是在碼率控制為每位比特Q=0.3、0.5、0.7、0.9、1、1.5(壓縮比從80:3到16:3)下漸進(jìn)式重建的含水印圖像和從中提取的水印圖像。
圖16 漸進(jìn)式恢復(fù)的部分水印圖像
5.2實(shí)驗(yàn)二 JPEG2000編碼實(shí)驗(yàn)
在JPEG2000編碼的實(shí)驗(yàn)中,仍采用LuraTech的LuraWaveSmartCompress來(lái)對(duì)含水印圖像(如圖14)進(jìn)行JPEG2000編碼,本文對(duì)含水印圖像在每位比特0.2、0.4、0.6、0.8、1、1.2(壓縮比最高為1:40,最低為1:7)的碼率控制下進(jìn)行JPEG2000編碼并解碼,結(jié)果如表1所示。
表1 JPEG2000實(shí)驗(yàn)結(jié)果
5.3實(shí)驗(yàn)三 其它攻擊實(shí)驗(yàn)
實(shí)驗(yàn)結(jié)果表明:算法對(duì)JPEG有損壓縮、中值濾波、剪接、噪聲等攻擊有較強(qiáng)的抵抗性。對(duì)原始含水印圖像進(jìn)行強(qiáng)度較大的攻擊比如品質(zhì)因子為10的JPEG有損壓縮,75%的剪切等后,雖圖像質(zhì)量嚴(yán)重下降,但還是可以檢測(cè)到質(zhì)量較好的水印圖像,尤其對(duì)高斯噪聲的攻擊表現(xiàn)出優(yōu)秀的性能,即使噪聲強(qiáng)度達(dá)到0.1時(shí),恢復(fù)的水印與原始水印的相似度也達(dá)到0.55,部分仿真實(shí)驗(yàn)結(jié)果如表2所示,恢復(fù)的部分水印圖像如表3所示。
表2 部分攻擊實(shí)驗(yàn)結(jié)果
表3 部分攻擊下提取的水印圖像
本文首先研究了圖像嵌入式小波編碼算法(EZW、SPIHT、JPEG2000),然后在此基礎(chǔ)上從實(shí)際應(yīng)用出發(fā),提出了一種與這些編碼技術(shù)相結(jié)合的水印算法,該算法把水印比特的嵌入與這些編碼過(guò)程中的比特平面編碼有機(jī)地相結(jié)合,從而水印信號(hào)的檢測(cè)或提取具有漸進(jìn)式特征,算法具有一定的靈活性,能實(shí)現(xiàn)水印漸進(jìn)式的提取以適應(yīng)網(wǎng)絡(luò)帶寬的不穩(wěn)定性,提取或檢測(cè)的水印信號(hào)具有質(zhì)量可擴(kuò)展性。
參考文獻(xiàn)
1Shapiro JM.Embedded Image Coding Using Zero Trees of Wavelet Coefficients.IEEE Tran on Signal Processing.1993.41 (12):3445-3462
2A said and WA Pearlman.A new,fast,and efficient image code based on set partitioning in hierarchical trees,IEEE Transactions on Circuits and Systems for Video Technology,1996,6(3):243-250
3魏江力,柏正堯,等.JPEG2000圖像壓縮基礎(chǔ)、標(biāo)準(zhǔn)和實(shí)踐.DavidS.Taubman MichaelW.Marcellin著.人民郵電出版社.2004,pp:172-216
4向華,曹漢強(qiáng),等.一種基于混沌調(diào)制的零水印法.中國(guó)圖像圖形學(xué)報(bào).2006,11(5)
5Watson a B YANG GLORIA Y, SODOM ON J a et al Visibility of wavelet quantization noise.IEEE Transactions on Image Processing 1997. 6(8):1165-1175
DOI:10.3969/j.issn.1006-6403.2016.04.014
收稿日期:(2016-03-10)