摘要:數字水印在保護多媒體數字產品版權方面發揮着巨大作用, 是信息隱藏領域研究的熱點之一, 數字水印算法對不可感知性和魯棒性要求較高, 變換域DCT技術能更好地滿足水印的不可感知性和魯棒性。本文對基於DCT變換的數字水印算法進行闡述,並通過Matlab進行模擬。
關鍵詞:數字水印;DCT變換;魯棒性;算法模擬
1 前言
隨着數字技術的發展,Internet應用日益廣泛,數字媒體因其數字特征極易被復制、篡改、非法傳播及蓄意攻擊,其版權保護已日益引起人們的關注。因此,研究新形勢下行之有效的版權保護和認證技術具有深遠的理論意義和廣泛的應用價值。
數字水印技術,是指在數字化的數據內容中嵌入不明顯的記號,從而達到版權保護或認證的目的。被嵌入的記號通常是不可及或不可察覺的,但是通過一些計算操作可以被檢測或提取。因此,數字圖像的內嵌水印必須具有以下特點:透明性、魯棒性、安全性。
在圖像的DCT系數上嵌入水印信息具有諸多優勢,首先,DCT變換是實數域變換,對實系數的處理更加方便,且不會使相應的信息發生改變。第二,DCT變換是有損圖像壓縮JPEG的核心,基於DCT變換的圖像水印將兼容JPEG圖像壓縮。最后,圖像的頻域系數反應了能量分布,DCT變換后圖像能量集中在圖像的低頻部分,即DCT圖像中不為0的系數大部分集中在一起(左上角),因此編碼效率很高,將水印信息嵌入圖像中頻系數上具有較好的魯棒性。
2 相關算法
2.1 水印嵌入算法
水印嵌入算法是通過調整載體圖像子塊的中頻DCT系數的大小來實現對水印信息的編碼嵌入。
算法描述如下:
讀取原始載體圖像A,對A進行8*8分塊,並對每塊圖像進行DCT變換,在8*8的子塊中,中頻系數的掩模矩陣取為
每個子塊的中頻系數總共有11個位置。每個子塊的中頻位置可以嵌入11個像素點的亮度值,對應地,將水印圖像按照11個像素點一組進行分塊,水印圖像的最后一個分塊如果不足11個像素點,則通過把亮度值置0進行擴充。
對載體圖像DCT系數進行修改,有 ,i=1,...,11 ,其中 是載體圖像中頻系數的DCT值, 是變換后的DCT值,
為水印嵌入的強度,這里取
,
為對應位置的水印圖像的灰度值(或亮度值)。
對修改后的DCT矩陣進行DCT逆變換,得到嵌入了水印的合成圖像。
2.2 水印提取算法
水印提取是水印嵌入的逆過程,具體算法描述如下
(1)計算合成圖像和原始載體圖像的差圖像。
(2)對差圖像進行8*8分塊,並對每個小塊做DCT變換。
(3)從DCT小塊中提取可能的水印序列 ,
用下列函數計算可能的水印 和原嵌入水印 的相關性:
式中,和
分別為圖像W 和 W*的灰度值(或亮度值),L為像素點的個數。
根據相似性的值就可以判斷圖像中是否含有水印,從而達到版權保護的目的。判定准則為,事先設定一個閾值T ,若 ,可以判定被測圖像中含有水印,否則沒有水印。
3 仿真實驗
通過Matlab R2014a進行仿真實驗
3.1 讀取文件
以圖1中圖像作為載體圖像原圖,圖2中圖像作為水印圖像原水印,圖1為256*256像素8位深度的bmp格式圖像,圖2為50*50像素8位深度的bmp格式圖像
圖1 原圖
圖2 原水印
代碼如下:
a=imread('原圖.bmp'); %讀入載體圖像,圖像的長和高都必須化成8的整數倍 [M1,N1]=size(a); %計算載體圖像的大小 a=im2double(a); %數據轉換成double類型 knum1=M1/8; knum2=N1/8; %把載體圖像划分成8×8的子塊,高和長方向划分的塊數 b0=imread('原水印.bmp'); %讀入水印圖像 b=im2double(b0); %數據轉換成double類型 subplot(1,2,1), imshow(a) %顯示載體圖像 subplot(1,2,2), imshow(b) %顯示水印圖像
3.2 插入水印
根據2.1水印嵌入算法,選擇嵌入強度因子為 ,代碼如下
mask1=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; %給出低頻的掩膜矩陣 ind1=find(mask1==1); %低頻系數的位置 mask2=[0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; %給出中頻的掩膜矩陣 ind2=find(mask2==1); %中頻系數的位置,總共11個 [M2,N2]=size(b); %計算水印圖像的大小 L=M2*N2; %計算水印圖像的像素個數 knum3=ceil(M2*N2/11); %水印圖像按照11個元素1塊,分的塊數 b=b(:); b(L+1:11*knum3)=0; %水印圖像數據變成列向量,后面不足一塊的元素補0 T=dctmtx(8); %給出8×8的DCT變換矩陣 ab=zeros(M1,N1); %合成圖像的初始值 k=0; %嵌入水印塊計數器的初始值 for i=0:knum1-1 %該兩層循環進行水印嵌入 for j=0:knum2-1 xa=a([8*i+1:8*i+8],[8*j+1:8*j+8]); %提取載體圖像的子塊 ya=T*xa*T'; %載體圖像子塊做DCT變換 coef1=(mask1+mask2).*ya; %提取低頻和中頻系數,作為合成子塊的初始值 if k<knum3 coef1(ind2)=coef1(ind2)+0.05*b(11*k+1:11*k+11); %在中頻系數上嵌入水印子塊的信息 end ab([8*i+1:8*i+8],[8*j+1:8*j+8])=T'*coef1*T; %對合成子塊進行逆DCT變換 k=k+1; end end
3.3 提取水印
根據2.2水印提取算法,代碼如下
acha=ab-a; %提取合成圖像和原圖像的差圖像; k=0; tb=zeros(11*knum3,1); %提取水印圖像的初始值 for i=0:knum1-1 %該兩層循環進行水印提取 for j=0:knum2-1 xa2=acha([8*i+1:8*i+8],[8*j+1:8*j+8]); %提取差圖像的子塊 ya2=T*xa2*T'; %差圖像子塊做DCT變換 coef2=mask2.*ya2; %提取差圖像中頻DCT系數 if k<knum3 tb(11*k+1:11*k+11)=20*coef2(ind2); %提取水印圖像的像素值 end k=k+1; end end tb(L+1:end)=[]; %把水印圖像列向量的后面補的0刪除 tb=reshape(tb,[M2,N2]); %把列向量變成矩陣 figure, subplot(1,1,1), imshow(ab) %顯示水印合成圖像 figure, subplot(1,1,1), imshow(tb) %顯示提取的水印圖像 imwrite(ab,'處理后的圖.bmp','bmp') imwrite(tb,'提取的水印.bmp','bmp')
4 實驗結果討論
4.1 實驗結果
根據3仿真實驗,原圖像和原水印為圖3左一,嵌入水印后的合成圖像為圖3左二,提取的水印圖像圖3左三。圖4為實驗文件。
圖3 實驗結果
圖4 實驗文件
4.2 不同嵌入強度因子測試
實驗選取0和0.01到0.09不同嵌入強度因子進行測試,測試結果如下:
表1 不同嵌入強度因子測試結果
α | 提取的水印和添加水印的圖像 |
視覺效果 |
0 |
![]() |
無提取水印 圖像清楚 |
0.01 |
![]() |
無明顯提取水印 圖像清楚 |
0.02 |
![]() |
提取水印可見 圖像清楚 |
0.03 |
![]() |
提取水印可見 圖像清楚 |
0.04 |
![]() |
提取水印可見 圖像清楚 |
0.05 |
![]() |
提取水印與原水印接近 圖像清楚 |
0.06 |
![]() |
提取水印與原水印接近 圖像清楚 |
0.07 |
![]() |
提取水印與原水印接近 圖像稍微影響 |
0.08 |
![]() |
提取水印與原水印接近 圖像稍微影響 |
0.09 |
![]() |
提取水印與原水印接近 圖像有影響 |
5 總結
數字水印是信息隱藏領域研究熱點之一,本文通過對圖片數字水印中基於DCT變換的水印算法模擬,通過對8位bmp灰度的測試,對該算法處理圖像的不可感知性和魯棒性有了初步的認識。其中嵌入強度因子測試的選取尤為重要,本次模擬結論是嵌入強度因子測試為0.05有較好的效果,提取水印與原水印接近,圖像清楚,在實際生產生活中可通過預設閾值,根據檢測相似性的值判斷圖像中是否含有水印,從而達到版權保護的目的,在選擇閾值時,既要考慮誤檢也要考慮虛警。
參考文獻:
[1]成宇. 基於DCT和最佳的嵌入強度因子的數字水印算法的研究[D].天津工業大學,2017.
[2]張春玉.基於DCT變換的數字水印算法研究[J].河北農機,2019(01):71-72.
[3]陳小娥.基於DCT變換的數字水印算法研究[J].長春工程學院學報(自然科學版),2018,19(03):98-101.
[4]王琳娟,李君霞.基於分塊的多級DCT和SVD的魯棒水印算法[J].計算機時代,2017(09):51-55.
[5]wiki.《離散余弦變換》.
https://zh.wikipedia.org/wiki/BMP.2019年5月20訪問
[6]wiki.《離散余弦變換》.
https://zh.wikipedia.org/wiki/%E7%A6%BB%E6%95%A3%E4%BD%99%E5%BC%A6%E5%8F%98%E6%8D%A2.2019年5月20訪問