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