【圖像隱藏】基于 DCT的圖像隱寫matlab源碼
一、簡介
在圖像隱寫分析中,這幾個(gè)特征是比較經(jīng)典的
圖像隱寫分析中DCT特征與Markov特征展現(xiàn)出了極大的潛力,小波變換的奇異值分解(Wavelet Singular Value Decomposition , WSVD)特征也有奇效,本文實(shí)現(xiàn)前人論文的特征提取編程代碼。
先說說理論知識
1 擴(kuò)展DCT統(tǒng)計(jì)特征提取
大多數(shù)的隱密算法都是對JPEG圖像的DCT系數(shù)進(jìn)行操作,以此來嵌入秘密信息。DCT系數(shù)統(tǒng)計(jì)特征,旨在捕捉DCT系數(shù)的統(tǒng)計(jì)量的特征,以此來區(qū)分載體圖像和隱密圖像。
DCT系數(shù)統(tǒng)計(jì)算法由Fridrich【1】提出,其中包含了DCT系數(shù)直方圖,共生矩陣,空域塊間相關(guān)性等部分。首先用DCT系數(shù)替換相同位置的原始圖像像素,使用dij(k) 來表示DCT系數(shù)矩陣,其中i,j=1, … ,8,k=1, … ,nB。而dij(k)則代表的是在第k個(gè)8×8 DCT塊中處于(i,j)位置的DCT系數(shù),而DCT塊一共有nB 塊。為了減少計(jì)算量和特征維度,在計(jì)算特征之前需要進(jìn)行預(yù)處理,將所有DCT系數(shù)值范圍限定在[-5,5]之間,大于和小于該范圍內(nèi)的值全部變換為-5到+5之間。
其中,Ir和Ic表示圖像DCT系數(shù)塊的兩種排列方式,分別是行掃描順序和列掃描順序。
接下來的兩個(gè)特征Bα是從解壓的JPEG圖像中計(jì)算,也是一種塊間相關(guān)性的特征:
在DCT系數(shù)統(tǒng)計(jì)的隱密分析中,F(xiàn)ridrich首次提出了用于隱密分析的“校準(zhǔn)”概念和計(jì)算原理:特征計(jì)算函數(shù)F,訓(xùn)練或測試圖像J1,將圖像J1解壓到空域并沿各個(gè)方向裁剪四個(gè)像素,然后使用同J1相同的量化表壓縮得到的圖像J2。f表示最終獲取的特征,而最后的特征由f=F(J1)-F(J2)計(jì)算得到。
采用如此計(jì)算方式的原理如下:裁剪之后的圖像和原始圖像內(nèi)容上大體上完全一致,雖然裁剪之后的圖像失去了原來的DCT分塊,但是其統(tǒng)計(jì)特征應(yīng)與原來相差不多。而這個(gè)過程會對嵌入的信息十分敏感,使裁剪前后的特征差別較大。經(jīng)過實(shí)驗(yàn)證明,如此提取特征的方法非常有效果。
總結(jié)來說,DCT系數(shù)統(tǒng)計(jì)特征對DCT系數(shù)全局和局部進(jìn)行了統(tǒng)計(jì)分析,并且捕獲DCT系數(shù)的塊間相關(guān)性和空域像素的相關(guān)性等特征。對于JPEG圖像來說,所有隱密算法都是針對DCT系數(shù)進(jìn)行修改,該算法確實(shí)是有一定的效果。實(shí)驗(yàn)中,該特征集展現(xiàn)了不錯(cuò)的分析效果,在0.2的嵌入率情況下可以達(dá)到平均95%的準(zhǔn)確率,但是對MB算法的效果一般,尤其是MB2。
原始DCT統(tǒng)計(jì)特征已經(jīng)有一定的檢測效果,本文先對其進(jìn)行擴(kuò)展,加強(qiáng)特征的檢測效果。對于全局直方圖函數(shù)H,可以得到范圍在[-5,+ 5]中的元素個(gè)數(shù)的差異,包括全局直方圖和局部直方圖,局部直方圖選擇的位置為{(1, 2),(2, 1),(3, 1),(2, 2),(1, 3)}。 因此,直方圖特征是:
如此的DCT擴(kuò)展特征共有193維,其特征組成見下表。
二、源代碼
clc;
clear;
msgfid=fopen('hidden.txt','r');%%打開秘密文件,讀入秘密信息
[msg,count]=fread(msgfid);
count=count*8;
alpha=0.02;
fclose(msgfid);
msg=str2bit(msg)';
[len col]=size(msg);
io=imread('lena.bmp');%讀取載體圖像
io=double(io)/255;
output=io;
i1=io(:,:,1);%取圖像的一層來隱藏
T=dctmtx(8);%對圖像進(jìn)行分塊
DCTrgb=blkproc(i1,[8 8],'P1*x*P2',T,T');%對圖像分塊進(jìn)行DCT變換
[row,col]=size(DCTrgb);
row=floor(row/8);
col=floor(col/8);
% 順序信息嵌入
temp=0;
for i=1:count;
? ?if msg(i,1)==0
? ? ? ?if DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2) %選擇(5,2)和(4,3)這一對系數(shù)
? ? ? ? ? ?temp=DCTrgb(i+4,i+1);
? ? ? ? ? ?DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);
? ? ? ? ? ?DCTrgb(i+3,i+2)=temp;
? ? ? ?end
? ?else
? ? ? ? if ?DCTrgb(i+4,i+1)>DCTrgb(i+3,i+2)
? ? ? ? ? ?temp=DCTrgb(i+4,i+1);
? ? ? ? ? ?DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);
? ? ? ? ? ?DCTrgb(i+3,i+2)=temp;
? ? ? ?end
? ?end
? ?if DCTrgb(i+4,i+1)<DCTrgb(i+3,i+2)
? ? ? ?DCTrgb(i+4,i+1)=DCTrgb(i+4,i+1)-alpha;%將原本小的系數(shù)調(diào)整更小,使得系數(shù)差別變大
? ?else
? ? ? ?DCTrgb(i+3,i+2)=DCTrgb(i+3,i+2)-alpha;
? ?end
end
三、運(yùn)行結(jié)果
?