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