【圖像隱藏】基于DWT+DCT+LSB三種算法實現(xiàn)數(shù)字水印隱藏提取含Matlab源碼
1 簡介
基于LSB+DWT+DCT三種算法實現(xiàn)圖像和音頻水印嵌入提取。
1.1 LSB算法
根據(jù)LSB算法簡單易實現(xiàn)的特點,結(jié)合在圖像置亂技術(shù)中很好特性的Arnold變換。利用變化產(chǎn)生影子圖像。通過LSB算法將影子圖像嵌入到掩飾圖像中,再利用LSB算法將圖像的影子圖像提取出來。將提取出來的影子圖像經(jīng)過文中設(shè)計的Arnold反變換恢復(fù)出原始。該方法不但有效地?zé)o損傷隱藏了圖像,同樣還保證了隱藏圖像的安全性,無損傷性。





1.2 小波變換算法
**2 基于DWT的音頻水印算法**
**2.1 水印嵌入**
本文研究的音頻水印算法是基于離散小波變換 (DWT) , 音頻信號通過DWT變換, 在變換域中嵌入水印信息, 再經(jīng)過逆變換 (IDWT) 從而得到嵌入水印的音頻信號。水印嵌入原理框圖如圖1所示。
假定水印為M1×M2的二維圖像bw, 由于音頻信號通常為一維向量, 故水印信息在嵌入音頻信號之前需要將二維降至一維向量w, 即M=M1×M2。通常我們也可以將圖像進行打亂加密, 增強水印隱蔽性。
假定語音信號為s, 長度為N, 則s={s1, s2, s3, …, sN}由于語音信號較長在處理中一般需要進行分段, 每段長度設(shè)為N1, 故該語音信號分為K=fix (N/N1) 段進行處理, 每段語音均嵌入一個水印信息。
小波變換是為了解決傅立葉變換的不足而提出的一種分析變換, 傅立葉變換的基函數(shù)是鋪滿整個時域的正弦信號, 對于突變信號以及變化的頻率成分信息均不能較準(zhǔn)確地表示。而小波變換是時間和頻率的局部變換, 更能準(zhǔn)確地表示音頻信號的頻域特征, 常用的小波基有Haar小波、Daubechies (db N) 小波、Marr小波等。本文采用的小波基是Haar小波, 它是支撐域在t∈[0, 1]范圍內(nèi)的矩形波, 定義如下:

圖1 音頻信號水印嵌入原理框圖

圖2 音頻信號水印提取原理框圖?

取定Haar小波基后, 則語音信號s可以表示為:

其中Cj, k為離散小波系數(shù), 將音頻信號分解為低頻的近似部分和高頻的細節(jié)部分, 我們在水印信息的嵌入處理中, 主要針對代表低頻近似部分的系數(shù)向量處理, 即將水印信號放入低頻近似部分, 高頻細節(jié)部分不變, 以保證語音質(zhì)量基本不變。由于嵌入的水印為二值圖像, 因此如果水印信息的值為1, 則將對應(yīng)的低頻系數(shù)增大, 相反如果值為0, 則將對應(yīng)的低頻系數(shù)降低。在DWT域嵌入水印信息后, 然后通過IDWT變換, 將語音信號變換成時域信號。
**2.2 水印提取**
為了保證信息安全, 在發(fā)送端發(fā)送嵌入水印的音頻信號, 而在接收端為了確定音頻信息的準(zhǔn)確性, 我們通常需要提取水印以確保來源的真實性, 因此水印的提取技術(shù)也尤為重要。在水印提取過程中, 需要原始音頻信號與嵌入水印的音頻信號同時進行DWT, 再將兩者參數(shù)進行分析比較提取出水印信息。水印提取原理框圖如圖2所示。
在前面所述的水印嵌入過程中, 將水印信息嵌入高頻的細節(jié)部分, 因此在提取水印過程中, 我們也只需比較原始語音信號S的低頻小波系數(shù)向量c A與嵌入水印的音頻信號s1的低頻小波系數(shù)向量c A1作比較, 若c A1>c A, 則水印信息為1;反之則為0, 再通過向量平均, 如此得到水印信息的一維向量, 最后通過升維得到二值圖像.
1.3?DCT算法
在圖像隱寫分析中,這幾個特征是比較經(jīng)典的 圖像隱寫分析中DCT特征與Markov特征展現(xiàn)出了極大a的潛力,小波變換的奇異值分解(Wavelet Singular Value Decomposition , WSVD)特征也有奇效,本文實現(xiàn)前人論文的特征提取編程代碼。 先說說理論知識 1 擴展DCT統(tǒng)計特征提取 大多數(shù)的隱密算法都是對JPEG圖像的DCT系數(shù)進行操作,以此來嵌入秘密信息。DCT系數(shù)統(tǒng)計特征,旨在捕捉DCT系數(shù)的統(tǒng)計量的特征,以此來區(qū)分載體圖像和隱密圖像。 DCT系數(shù)統(tǒng)計算法由Fridrich【1】提出,其中包含了DCT系數(shù)直方圖,共生矩陣,空域塊間相關(guān)性等部分。首先用DCT系數(shù)替換相同位置的原始圖像像素,使用dij(k) 來表示DCT系數(shù)矩陣,其中i,j=1, … ,8,k=1, … ,nB。而dij(k)則代表的是在第k個8×8 DCT塊中處于(i,j)位置的DCT系數(shù),而DCT塊一共有nB 塊。為了減少計算量和特征維度,在計算特征之前需要進行預(yù)處理,將所有DCT系數(shù)值范圍限定在[-5,5]之間,大于和小于該范圍內(nèi)的值全部變換為-5到+5之間。

其中,Ir和Ic表示圖像DCT系數(shù)塊的兩種排列方式,分別是行掃描順序和列掃描順序。 接下來的兩個特征Bα是從解壓的JPEG圖像中計算,也是一種塊間相關(guān)性的特征:

在DCT系數(shù)統(tǒng)計的隱密分析中,F(xiàn)ridrich首次提出了用于隱密分析的“校準(zhǔn)”概念和計算原理:特征計算函數(shù)F,訓(xùn)練或測試圖像J1,將圖像J1解壓到空域并沿各個方向裁剪四個像素,然后使用同J1相同的量化表壓縮得到的圖像J2。f表示最終獲取的特征,而最后的特征由f=F(J1)-F(J2)計算得到。
采用如此計算方式的原理如下:裁剪之后的圖像和原始圖像內(nèi)容上大體上完全一致,雖然裁剪之后的圖像失去了原來的DCT分塊,但是其統(tǒng)計特征應(yīng)與原來相差不多。而這個過程會對嵌入的信息十分敏感,使裁剪前后的特征差別較大。經(jīng)過實驗證明,如此提取特征的方法非常有效果。
總結(jié)來說,DCT系數(shù)統(tǒng)計特征對DCT系數(shù)全局和局部進行了統(tǒng)計分析,并且捕獲DCT系數(shù)的塊間相關(guān)性和空域像素的相關(guān)性等特征。對于JPEG圖像來說,所有隱密算法都是針對DCT系數(shù)進行修改,該算法確實是有一定的效果。實驗中,該特征集展現(xiàn)了不錯的分析效果,在0.2的嵌入率情況下可以達到平均95%的準(zhǔn)確率,但是對MB算法的效果一般,尤其是MB2。
原始DCT統(tǒng)計特征已經(jīng)有一定的檢測效果,本文先對其進行擴展,加強特征的檢測效果。對于全局直方圖函數(shù)H,可以得到范圍在[-5,+ 5]中的元素個數(shù)的差異,包括全局直方圖和局部直方圖,局部直方圖選擇的位置為{(1, 2),(2, 1),(3, 1),(2, 2),(1, 3)}。因此,直方圖特征是:

如此的DCT擴展特征共有193維,其特征組成見下表。

2 部分代碼
function image_b = LSB(original,watermark)
%隱藏矩陣存到I中,隱藏信息存到J中
L =original; ? ? ?
J=watermark;
%N為隱藏矩陣大小
N=64;
%K為分塊大小1
K=8;
%p,q為變換系數(shù)
p=2;
q=1;
%
%隱藏思想:將512*512的矩陣分為64*64個8*8的方塊,根據(jù)p,q選出方塊中某一個元素,根據(jù)LSB方法隱藏0或1
%p,q變換:p初始值為2,q初始值為1,每對一個8*8矩陣嵌入完信息,p新值為q+2對8求模的值加1(求模得出的值可能為1),同理q新值為p+2對8求模的值加1
%此方法適用與頻域隱藏,不適用于普通LSB隱藏
%隱藏信息嵌入方法:對選出的值進行二進制變換,轉(zhuǎn)為二進制后比較倒數(shù)第二位和最后一位的差值(倒數(shù)第二位減去最后一位),差值為0表示嵌入0,差值為1表示嵌入1
%
for m=1:N ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?for n=1:N
? ? ? ?x=(m-1)*K+1; ? ? ? ? ? ? ? ? ? ?
? ? ? ?y=(n-1)*K+1;
? ? ? ?%取出一個8*8分塊
? ? ? ?block=L(x:x+K-1,y:y+K-1);
? ? ? ?%取出方塊所選值的倒數(shù)第二位
? ? ? ?temp0 = bitget(block(p,q),2);
? ? ? ?%取出方塊所選值的最后一位
? ? ? ?temp1 = bitget(block(p,q),1);
? ? ? ?%求出差值
? ? ? ?temp = double(temp0) - double(temp1);
? ? ? ?%嵌入信息為0時
? ? ? ?if(J(m, n)==0)
? ? ? ? ? ?%差值為1時,所選值最后2位為10,減2后變?yōu)?0,差值為0
? ? ? ? ? ?if(temp == 1)
? ? ? ? ? ? ? ?block(p,q) = block(p,q) - 2;
? ? ? ? ? ?end
? ? ? ? ? ?%差值為-11時,所選值最后2位為01,減1后變?yōu)?0,差值為0
? ? ? ? ? ?if(temp == -1)
? ? ? ? ? ? ? ?block(p,q) = block(p,q) - 1;
? ? ? ? ? ?end
? ? ? ?%嵌入信息為1時
? ? ? ?else
? ? ? ? ? ?%差值為0時,所選值最后2位為00或11
? ? ? ? ? ?if(temp == 0)
? ? ? ? ? ? ? ?%最后2位為00時,加2后最后兩位為10,差值為1
? ? ? ? ? ? ? ?if(mod(block(p,q),2)==0)
? ? ? ? ? ? ? ? ? ?block(p,q) = block(p,q) + 2;
? ? ? ? ? ? ? ?%最后2位為11時,減1后最后兩位為10,差值為1
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ?block(p,q) = block(p,q) - 1;
? ? ? ? ? ? ? ?end
? ? ? ? ? ?end
? ? ? ? ? ?%差值為-1時,所選值最后2位為01,加1后最后兩位為10,差值為1
? ? ? ? ? ?if(temp == -1)
? ? ? ? ? ? ? ?block(p,q) = block(p,q) + 1;
? ? ? ? ? ?end
? ? ? ?end
? ? ? ?%將嵌入隱藏信息后的矩陣放回原矩陣
? ? ? ?L(x:x+K-1,y:y+K-1)=block;
? ? ? ?%對p,q進行變換
? ? ? ?p=p+2;
? ? ? ?q=q+2;
? ? ? ?p=mod(q,8)+1;
? ? ? ?q=mod(p,8)+1;
? ?end
end
image_b = uint8(L);
return
3 仿真結(jié)果

4 參考文獻
[1]張元欽. 基于DWT-DCT的圖像數(shù)字水印技術(shù)的研究. Diss. 北京郵電大學(xué), 2014.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。
