摘 要: 提出一種基于矢量量化壓縮編碼(簡稱VQ編碼)技術(shù)的水印策略,在對原圖像進(jìn)行VQ編碼后,按碼書中碼字的相似程度對碼字進(jìn)行劃分,根據(jù)待嵌入水印圖像的大小產(chǎn)生一個(gè)隨機(jī)序列作為密鑰,然后根據(jù)密鑰在壓縮數(shù)據(jù)的特定位置嵌入水印。提出的水印策略,其主要特征在于水印既存在于原圖像VQ編碼后的壓縮數(shù)據(jù)中,也存在于接收端VQ解碼后的圖像中。壓縮后的數(shù)據(jù)在數(shù)據(jù)量上遠(yuǎn)小于原始數(shù)據(jù),所以由它替代原圖像攜帶水印,既節(jié)省存儲空間,也減小了網(wǎng)絡(luò)傳輸時(shí)間,特別適用于網(wǎng)絡(luò)環(huán)境下的水印嵌入和提取。更重要的是,這種水印策略具有較好的魯棒性,能夠抵抗諸如裁剪、模糊、JPEG壓縮等波形攻擊和扭轉(zhuǎn)幾何攻擊。
關(guān)鍵詞: 數(shù)字水印; 矢量量化編碼; 碼書; 細(xì)胞分裂法; 碼書劃分
中圖分類號: TN911.73?34; TP391 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)01?0070?05
0 引 言
多媒體數(shù)據(jù)的數(shù)字化進(jìn)程,使得多媒體信息的存取和交換也變成了一個(gè)相對簡單的過程。特別是隨著Internet等信息網(wǎng)絡(luò)的迅速發(fā)展,借助于數(shù)碼像機(jī)、掃描儀等數(shù)字化I/O設(shè)備,人們可以方便地將各種多媒體數(shù)字信息傳播到世界的各個(gè)角落。技術(shù)日益進(jìn)步,隨之出現(xiàn)的問題也日益嚴(yán)重,對數(shù)字多媒體產(chǎn)品的非法拷貝、惡意篡改、破壞和散播屢見不鮮。因此,如何在當(dāng)前網(wǎng)絡(luò)環(huán)境下提供有效的信息安全手段實(shí)現(xiàn)有效的版權(quán)保護(hù)已經(jīng)成為一個(gè)迫在眉睫的現(xiàn)實(shí)問題。自Tirkel于1994年提出數(shù)字水印的概念以來,數(shù)字水印技術(shù)取得了長足的發(fā)展,各種算法層出不窮,主要包括:空間域水印、變換域水印、分形水印等。然而經(jīng)典的水印算法在水印的不可感知性、可檢測性、魯棒性三個(gè)方面不能做到很好的兼顧,從一定程度上阻礙了數(shù)字水印技術(shù)的應(yīng)用和普及[1?2]。2000年Lu等人提出一種了基于VQ編碼的圖像數(shù)字水印方案[3],這種算法采用碼書擴(kuò)展的方法來產(chǎn)生碼書劃分,然后利用碼書劃分嵌入水印信息,但要求碼書是保密的。后來有人提出了基于可變維VQ的圖像水印算法,但這種算法嵌入的水印是易碎性的,魯棒性較差[4]。
本文提出一種將水印嵌入于圖像VQ壓縮數(shù)據(jù)中的數(shù)字水印新算法,算法中水印同時(shí)存在于VQ壓縮后的數(shù)據(jù)中和VQ解壓后的圖像中。更重要的是,實(shí)驗(yàn)證明這種算法對裁剪、模糊、JPEG、扭轉(zhuǎn)等攻擊具有一定的魯棒性并且適用于比灰度圖像更為普遍的彩色圖像。所以,可以利用本算法在Internet和其他應(yīng)用VQ壓縮的環(huán)境下,有效地實(shí)現(xiàn)數(shù)字水印的嵌入和提取。
1 VQ編碼
矢量量化(Vector Quantization,VQ)編碼的基本操作包括:將矢量空間分割成有限的、彼此不相交的子空間,并對每個(gè)子空間選擇一個(gè)代表矢量作為量化結(jié)果[4]。將VQ編碼用于圖像處理時(shí),首先將圖像分割成大小相同的像塊。例如512×512的圖像按照4×4的尺寸可以分成16 384個(gè)像塊,每個(gè)像塊代表一個(gè)16維的矢量,稱為訓(xùn)練矢量。VQ算法就是要從這些訓(xùn)練矢量中找到代表矢量,組成碼書(Code Book),碼書中的各矢量稱為碼字(Code Word)。編碼時(shí),對各個(gè)訓(xùn)練矢量,找出碼書中最接近的碼字對應(yīng)的索引值,組成一張索引表。這張索引表就是圖像經(jīng)VQ編碼后的壓縮數(shù)據(jù)。
碼書的生成算法有很多,常見的有LBG算法及其各種改進(jìn)算法[5],本文采用細(xì)胞分裂算法。仍以一張512×512的圖像為例,基本步驟如下:
(1) 將圖像切割成4×4的小方格。
(2) 找出所有碼字的質(zhì)心[X(][x1,][x2,]…,[xk)]作為初始矢量。
(3) 設(shè)細(xì)胞分裂的步長為常數(shù)值[δ,]將初始矢量[X]分別減加步長[δ,]形成二個(gè)矢量:[Y(y1,y2,…,yk)、][Z(z1,z2,…,zk),]其中[yi=xi-δ,][zi=xi+δ,]且當(dāng)[yi<0]時(shí),取[yi=0,]當(dāng)[zi>255]時(shí),取[zi=255。]
(4) 對[Y,Z]構(gòu)成的碼書執(zhí)行LBG算法。即以[Y]及[Z]為質(zhì)心,將其余各碼字歸群到這兩個(gè)質(zhì)心,并重新計(jì)算各群的質(zhì)心,得到[Y]及[Z。]
(5) 將[Y]和[Z]各分裂成兩個(gè)矢量,并重復(fù)步驟(3)、步驟(4),如此每一次碼書大小以2的倍數(shù)增長,一直到產(chǎn)生足夠的碼字個(gè)數(shù)。
算法中步長[δ]可以通過實(shí)驗(yàn)選取適當(dāng)值,比如10。這里的歸群,就是尋找與某矢量最接近的質(zhì)心并歸入其代表的子空間。矢量之間的近似程度由歐幾里德失真來度量,對于矢量[Y]和[X,]定義:
[dEX,Y=X-YTX-Y=i=1Kxi-yi2] (1)
顯然失真越小,近似程度越高。
2 基于VQ編碼的數(shù)字水印技術(shù)
Pitas和Kaskalis利用基于統(tǒng)計(jì)的數(shù)字水印方案的基本原理[6],提出了數(shù)字簽名的思想,這種算法可以有效抵抗二次采樣和JPEG壓縮攻擊。Fridrich提出了一種稱為混合水印(Hybrid Watermarking)的算法,它是在Cox提出的DCT變換算法的基礎(chǔ)上,再在中頻DCT系數(shù)上疊加一擴(kuò)頻信號[7?9]。Kundur等人提出基于小波融合的水印嵌入算法,它是在不同的分辨率下將水印和圖像的小波系數(shù)相加,相加前,將水印的小波系數(shù)使用一種人類視覺模型約束進(jìn)行調(diào)制[10]。VQ編碼是一種壓縮比比較可觀,壓縮失真小,適用范圍廣的壓縮編碼方案。本文提出的基于VQ編碼的水印策略,嵌入位置為VQ壓縮編碼后的壓縮域。
2.1 水印嵌入
水印嵌入的重要步驟是碼書劃分。碼書劃分是指對VQ編碼后產(chǎn)生的碼書按碼字之間的相似度進(jìn)行劃分,即將彼此最相似的2個(gè)或幾個(gè)碼字分在同一子劃分中。設(shè)一個(gè)碼書有256個(gè)碼字,如果規(guī)定碼書劃分中的每個(gè)子劃分含2個(gè)碼字,則共有128個(gè)子劃分,每個(gè)碼字在對應(yīng)子劃分中的偏移量或?yàn)?,或?yàn)?;于是要定位1個(gè)碼字,需要1個(gè)字節(jié),字節(jié)的高7位用于定位子劃分,字節(jié)的最低位用于定位子劃分中的碼字,如:第一個(gè)碼字的索引碼為00000000,第二個(gè)碼字的索引碼為00000001,第十個(gè)碼字的索引碼為00001001。
當(dāng)碼書劃分完成后,就可以開始水印的嵌入過程,圖1為水印嵌入的原理框圖,詳細(xì)步驟如下:
(1) 對原圖像HI進(jìn)行VQ編碼,包括:圖像分塊,產(chǎn)生訓(xùn)練矢量集,根據(jù)相似度利用細(xì)胞分裂法產(chǎn)生碼書CB(Code Book)與索引表IT(Index Table),也可以使用公共碼書。對CB進(jìn)行劃分,產(chǎn)生碼書劃分CD(Code Divided),每個(gè)子劃分含2個(gè)碼字。