基于matlab實現(xiàn)DCT數(shù)字水印嵌入與提取
一、離散小波變換的音頻信號數(shù)字水印技術簡介
0 引言
近年來, 數(shù)字水印技術的作用越來越重要。數(shù)字水印技術是將一些標識信息直接嵌入數(shù)字載體當中, 或間接表示在信號載體中, 且不影響原載體的使用價值。通過隱藏在載體中的這些信息, 可以判斷信息是否被篡改, 具有防偽溯源、保護信息安全、版權保護等作用。對于廣播轉播臺站而言, 是廣播音頻的中轉站, 在廣播信號發(fā)送至千家萬戶之前務必保證信號的安全可靠, 但現(xiàn)在的大部分臺站只是利用人耳的判斷, 以及不同信源之間的比較, 具有較大的局限性。若利用數(shù)字水印的特性, 應用于廣播節(jié)目中可以有效地防止信號插播, 可靠地保護信號安全, 保障廣播的安全播出。
1 音頻數(shù)字水印技術分類
根據(jù)數(shù)字水印在音頻信號中的處理技術, 可將數(shù)字水印分為時域、變換域、壓縮域數(shù)字水印。
1.1 時域數(shù)字水印
在時域數(shù)字水印技術中, 直接將水印信息嵌入至音頻信號中, 通常會選擇隱藏在信號不重要部位, 以保證其嵌入水印不影響原音頻信號的監(jiān)聽效果。時域水印技術的實現(xiàn)較為容易且運算量小, 簡單直接, 但是魯棒性差, 容易被破解, 抵抗力較差。
1.2 變換域數(shù)字水印
在變換域數(shù)字水印中, 音頻信號需經(jīng)過時域至變換域的轉換, 通常的變換域有離散余弦變換 (DCT, Discrete Cosine Transform) 、離散傅立葉變換 (DFT, Discrete Fourier transform) 、離散小波變換 (DWT, Discrete Wavelet Transform) 等。在變換域中嵌入水印信息, 通過反變換得到嵌入水印的音頻時域信號。變換域水印技術較時域水印技術復雜, 但變換域嵌入的水印信息較時域而言, 不可見性更強, 隱蔽性更好, 魯棒性更好。本文的研究主要基于DWT的音頻信號的水印信息的嵌入與提取。
1.3 壓縮域數(shù)字水印
在時域和變換域的水印技術, 都是直接將水印信號嵌入未壓縮的音頻格式中, 但是通常在音頻信號的傳輸或存儲中需要對音頻信號進行壓縮編碼 (例如WMA、MP3等) , 因此壓縮域數(shù)字水印也是水印技術也具有較大的實用價值。壓縮域數(shù)字水印技術大致可分為三類: (1) 在非壓縮域嵌入水印, 將音頻信號與水印信息一起壓縮; (2) 在壓縮域中, 直接將水印信息嵌入壓縮的音頻信號中; (3) 將壓縮后的信號進行解壓縮, 然后嵌入水印信息, 最后將水印信息和解壓后的音頻信號一起壓縮??偟膩碚f, 壓縮域水印技術的編解碼系統(tǒng)過于復雜, 受壓縮編碼格式限制大, 壓縮后的音頻信號已經(jīng)去除了冗余, 因此加入水印的難度大, 壓縮域水印技術有待進一步研究。
2 基于DWT的音頻水印算法
2.1 水印嵌入
本文研究的音頻水印算法是基于離散小波變換 (DWT) , 音頻信號通過DWT變換, 在變換域中嵌入水印信息, 再經(jīng)過逆變換 (IDWT) 從而得到嵌入水印的音頻信號。水印嵌入原理框圖如圖1所示。
假定水印為M1×M2的二維圖像bw, 由于音頻信號通常為一維向量, 故水印信息在嵌入音頻信號之前需要將二維降至一維向量w, 即M=M1×M2。通常我們也可以將圖像進行打亂加密, 增強水印隱蔽性。
假定語音信號為s, 長度為N, 則s={s1, s2, s3, …, sN}由于語音信號較長在處理中一般需要進行分段, 每段長度設為N1, 故該語音信號分為K=fix (N/N1) 段進行處理, 每段語音均嵌入一個水印信息。
小波變換是為了解決傅立葉變換的不足而提出的一種分析變換, 傅立葉變換的基函數(shù)是鋪滿整個時域的正弦信號, 對于突變信號以及變化的頻率成分信息均不能較準確地表示。而小波變換是時間和頻率的局部變換, 更能準確地表示音頻信號的頻域特征, 常用的小波基有Haar小波、Daubechies (db N) 小波、Marr小波等。本文采用的小波基是Haar小波, 它是支撐域在t∈[0, 1]范圍內的矩形波, 定義如下:
圖1 音頻信號水印嵌入原理框圖
圖2 音頻信號水印提取原理框圖
取定Haar小波基后, 則語音信號s可以表示為:
其中Cj, k為離散小波系數(shù), 將音頻信號分解為低頻的近似部分和高頻的細節(jié)部分, 我們在水印信息的嵌入處理中, 主要針對代表低頻近似部分的系數(shù)向量處理, 即將水印信號放入低頻近似部分, 高頻細節(jié)部分不變, 以保證語音質量基本不變。由于嵌入的水印為二值圖像, 因此如果水印信息的值為1, 則將對應的低頻系數(shù)增大, 相反如果值為0, 則將對應的低頻系數(shù)降低。在DWT域嵌入水印信息后, 然后通過IDWT變換, 將語音信號變換成時域信號。
2.2 水印提取
為了保證信息安全, 在發(fā)送端發(fā)送嵌入水印的音頻信號, 而在接收端為了確定音頻信息的準確性, 我們通常需要提取水印以確保來源的真實性, 因此水印的提取技術也尤為重要。在水印提取過程中, 需要原始音頻信號與嵌入水印的音頻信號同時進行DWT, 再將兩者參數(shù)進行分析比較提取出水印信息。水印提取原理框圖如圖2所示。
在前面所述的水印嵌入過程中, 將水印信息嵌入高頻的細節(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);
三、運行結果
到此這篇關于基于matlab實現(xiàn)DCT數(shù)字水印嵌入與提取的文章就介紹到這了,更多相關matlab數(shù)字水印嵌入與提取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于Sizeof與Strlen的區(qū)別以及聯(lián)系的使用詳解
本篇文章是對Sizeof與Strlen的區(qū)別以及聯(lián)系的使用進行了詳細的介紹。需要的朋友參考下2013-05-05Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實現(xiàn)
這篇文章主要介紹了Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實現(xiàn)方法,本文通過實例文字相結合的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07Visual?Studio2022的完全卸載及安裝到D盤的操作方法
這篇文章主要介紹了Visual?Studio2022的完全卸載以及完全安裝到D盤,因為VS如果隨便寫在會有很多很多的亂七八糟的東西掉出來,所以我們選擇制式一點的卸載方式,需要的朋友可以參考下2022-09-09C++11新特性之隨機數(shù)庫(Random?Number?Library)詳解
相對于C++11之前的隨機數(shù)生成器來說,C++11的隨機數(shù)生成器是復雜了很多,下面這篇文章主要給大家介紹了關于C++11新特性之隨機數(shù)庫(Random?Number?Library)的相關資料,需要的朋友可以參考下2022-06-06