基于matlab實(shí)現(xiàn)DCT數(shù)字水印嵌入與提取
一、離散小波變換的音頻信號數(shù)字水印技術(shù)簡介
0 引言
近年來, 數(shù)字水印技術(shù)的作用越來越重要。數(shù)字水印技術(shù)是將一些標(biāo)識信息直接嵌入數(shù)字載體當(dāng)中, 或間接表示在信號載體中, 且不影響原載體的使用價(jià)值。通過隱藏在載體中的這些信息, 可以判斷信息是否被篡改, 具有防偽溯源、保護(hù)信息安全、版權(quán)保護(hù)等作用。對于廣播轉(zhuǎn)播臺(tái)站而言, 是廣播音頻的中轉(zhuǎn)站, 在廣播信號發(fā)送至千家萬戶之前務(wù)必保證信號的安全可靠, 但現(xiàn)在的大部分臺(tái)站只是利用人耳的判斷, 以及不同信源之間的比較, 具有較大的局限性。若利用數(shù)字水印的特性, 應(yīng)用于廣播節(jié)目中可以有效地防止信號插播, 可靠地保護(hù)信號安全, 保障廣播的安全播出。
1 音頻數(shù)字水印技術(shù)分類
根據(jù)數(shù)字水印在音頻信號中的處理技術(shù), 可將數(shù)字水印分為時(shí)域、變換域、壓縮域數(shù)字水印。
1.1 時(shí)域數(shù)字水印
在時(shí)域數(shù)字水印技術(shù)中, 直接將水印信息嵌入至音頻信號中, 通常會(huì)選擇隱藏在信號不重要部位, 以保證其嵌入水印不影響原音頻信號的監(jiān)聽效果。時(shí)域水印技術(shù)的實(shí)現(xiàn)較為容易且運(yùn)算量小, 簡單直接, 但是魯棒性差, 容易被破解, 抵抗力較差。
1.2 變換域數(shù)字水印
在變換域數(shù)字水印中, 音頻信號需經(jīng)過時(shí)域至變換域的轉(zhuǎn)換, 通常的變換域有離散余弦變換 (DCT, Discrete Cosine Transform) 、離散傅立葉變換 (DFT, Discrete Fourier transform) 、離散小波變換 (DWT, Discrete Wavelet Transform) 等。在變換域中嵌入水印信息, 通過反變換得到嵌入水印的音頻時(shí)域信號。變換域水印技術(shù)較時(shí)域水印技術(shù)復(fù)雜, 但變換域嵌入的水印信息較時(shí)域而言, 不可見性更強(qiáng), 隱蔽性更好, 魯棒性更好。本文的研究主要基于DWT的音頻信號的水印信息的嵌入與提取。
1.3 壓縮域數(shù)字水印
在時(shí)域和變換域的水印技術(shù), 都是直接將水印信號嵌入未壓縮的音頻格式中, 但是通常在音頻信號的傳輸或存儲(chǔ)中需要對音頻信號進(jìn)行壓縮編碼 (例如WMA、MP3等) , 因此壓縮域數(shù)字水印也是水印技術(shù)也具有較大的實(shí)用價(jià)值。壓縮域數(shù)字水印技術(shù)大致可分為三類: (1) 在非壓縮域嵌入水印, 將音頻信號與水印信息一起壓縮; (2) 在壓縮域中, 直接將水印信息嵌入壓縮的音頻信號中; (3) 將壓縮后的信號進(jìn)行解壓縮, 然后嵌入水印信息, 最后將水印信息和解壓后的音頻信號一起壓縮??偟膩碚f, 壓縮域水印技術(shù)的編解碼系統(tǒng)過于復(fù)雜, 受壓縮編碼格式限制大, 壓縮后的音頻信號已經(jīng)去除了冗余, 因此加入水印的難度大, 壓縮域水印技術(shù)有待進(jìn)一步研究。
2 基于DWT的音頻水印算法
2.1 水印嵌入
本文研究的音頻水印算法是基于離散小波變換 (DWT) , 音頻信號通過DWT變換, 在變換域中嵌入水印信息, 再經(jīng)過逆變換 (IDWT) 從而得到嵌入水印的音頻信號。水印嵌入原理框圖如圖1所示。
假定水印為M1×M2的二維圖像bw, 由于音頻信號通常為一維向量, 故水印信息在嵌入音頻信號之前需要將二維降至一維向量w, 即M=M1×M2。通常我們也可以將圖像進(jìn)行打亂加密, 增強(qiáng)水印隱蔽性。
假定語音信號為s, 長度為N, 則s={s1, s2, s3, …, sN}由于語音信號較長在處理中一般需要進(jìn)行分段, 每段長度設(shè)為N1, 故該語音信號分為K=fix (N/N1) 段進(jìn)行處理, 每段語音均嵌入一個(gè)水印信息。
小波變換是為了解決傅立葉變換的不足而提出的一種分析變換, 傅立葉變換的基函數(shù)是鋪滿整個(gè)時(shí)域的正弦信號, 對于突變信號以及變化的頻率成分信息均不能較準(zhǔn)確地表示。而小波變換是時(shí)間和頻率的局部變換, 更能準(zhǔn)確地表示音頻信號的頻域特征, 常用的小波基有Haar小波、Daubechies (db N) 小波、Marr小波等。本文采用的小波基是Haar小波, 它是支撐域在t∈[0, 1]范圍內(nèi)的矩形波, 定義如下:

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

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

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

其中Cj, k為離散小波系數(shù), 將音頻信號分解為低頻的近似部分和高頻的細(xì)節(jié)部分, 我們在水印信息的嵌入處理中, 主要針對代表低頻近似部分的系數(shù)向量處理, 即將水印信號放入低頻近似部分, 高頻細(xì)節(jié)部分不變, 以保證語音質(zhì)量基本不變。由于嵌入的水印為二值圖像, 因此如果水印信息的值為1, 則將對應(yīng)的低頻系數(shù)增大, 相反如果值為0, 則將對應(yīng)的低頻系數(shù)降低。在DWT域嵌入水印信息后, 然后通過IDWT變換, 將語音信號變換成時(shí)域信號。
2.2 水印提取
為了保證信息安全, 在發(fā)送端發(fā)送嵌入水印的音頻信號, 而在接收端為了確定音頻信息的準(zhǔn)確性, 我們通常需要提取水印以確保來源的真實(shí)性, 因此水印的提取技術(shù)也尤為重要。在水印提取過程中, 需要原始音頻信號與嵌入水印的音頻信號同時(shí)進(jìn)行DWT, 再將兩者參數(shù)進(jìn)行分析比較提取出水印信息。水印提取原理框圖如圖2所示。
在前面所述的水印嵌入過程中, 將水印信息嵌入高頻的細(xì)節(jié)部分, 因此在提取水印過程中, 我們也只需比較原始語音信號S的低頻小波系數(shù)向量c A與嵌入水印的音頻信號s1的低頻小波系數(shù)向量c A1作比較, 若c A1>c A, 則水印信息為1;反之則為0, 再通過向量平均, 如此得到水印信息的一維向量, 最后通過升維得到二值圖像。
二、部分源代碼
function [embimg,p]=wtmark(im,wt)
% wtmark function performs watermarking in DCT domain
% it processes the image into 8x8 blocks.
% im = Input Image
% wt = Watermark
% embimg = Output Embedded image
% p = PSNR of Embedded image
% Checking Dimnesions
im=imread('b.jpg');
if length(size(im))>2
im=rgb2gray(im);
end
im = imresize(im,[512 512]); % Resize image
watermark = imresize(im2bw((wt)),[32 32]);% Resize and Change in binary
x={}; % empty cell which will consist all blocks
dct_img=blkproc(im,[8,8],@dct2);% DCT of image using 8X8 block
m=dct_img; % Sorce image in which watermark will be inserted
k=1; dr=0; dc=0;
% dr is to address 1:8 row every time for new block in x
% dc is to address 1:8 column every time for new block in x
% k is to change the no. of cell
%%%%%%%%%%%%%%%%% To divide image in to 4096---8X8 blocks %%%%%%%%%%%%%%%%%%
for ii=1:8:512 % To address row -- 8X8 blocks of image
for jj=1:8:512 % To address columns -- 8X8 blocks of image
for i=ii:(ii+7) % To address rows of blocks
dr=dr+1;
for j=jj:(jj+7) % To address columns of block
dc=dc+1;
z(dr,dc)=m(i,j);
end
dc=0;
end
x{k}=z; k=k+1;
z=[]; dr=0;
end
end
nn=x;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% To insert watermark in to blocks %%%%%
i=[]; j=[]; w=1; wmrk=watermark; welem=numel(wmrk); % welem - no. of elements
for k=1:4096
kx=(x{k}); % Extracting block into kx for processing
for i=1:8 % To address row of block
for j=1:8 % To adress column of block
if (i==8) && (j==8) && (w<=welem) % Eligiblity condition to insert watremark
% i=1 and j=1 - means embedding element in first bit of every block
if wmrk(w)==0
kx(i,j)=kx(i,j)+35;
elseif wmrk(w)==1
kx(i,j)=kx(i,j)-35;
end
end
end
end
w=w+1;
x{k}=kx; kx=[]; % Watermark value will be replaced in block
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%% To recombine cells in to image %%%%%%%%%
i=[]; j=[]; data=[]; count=0;
embimg1={}; % Changing complete row cell of 4096 into 64 row cell
for j=1:64:4096
count=count+1;
for i=j:(j+63)
data=[data,x{i}];
end
embimg1{count}=data;
data=[];
end
% Change 64 row cell in to particular columns to form image
i=[]; j=[]; data=[];
embimg=[]; % final watermark image
for i=1:64
embimg=[embimg;embimg1{i}];
end
embimg=(uint8(blkproc(embimg,[8 8],@idct2)));
imwrite(embimg,'out.jpg')
p=psnr(im,embimg);
三、運(yùn)行結(jié)果

到此這篇關(guān)于基于matlab實(shí)現(xiàn)DCT數(shù)字水印嵌入與提取的文章就介紹到這了,更多相關(guān)matlab數(shù)字水印嵌入與提取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ STL入門教程(3) deque雙向隊(duì)列使用方法
這篇文章主要為大家詳細(xì)介紹了C++ STL入門教程第三篇,deque雙向隊(duì)列的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
C++不使用變量求字符串長度strlen函數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C++不使用變量求字符串長度strlen函數(shù)的實(shí)現(xiàn)方法,實(shí)例分析了strlen函數(shù)的實(shí)現(xiàn)原理與不使用變量求字符串長度的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06
簡單掌握C++編程中的while與do-while循環(huán)語句使用
這篇文章主要介紹了C++編程中的while與do-while循環(huán)語句使用,區(qū)別就是while是先判斷再執(zhí)行,而do-while是先執(zhí)行再判斷,需要的朋友可以參考下2016-01-01
C++實(shí)現(xiàn)簡單班級成績管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單班級成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C語言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲
這篇文章主要為大家詳細(xì)介紹了C語言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
詳解C語言結(jié)構(gòu)體,枚舉,聯(lián)合體的使用
這篇文章主要給大家介紹一下關(guān)于C語言中結(jié)構(gòu)體、枚舉、聯(lián)合體的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考一下2022-07-07

