《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書

上傳人:等** 文檔編號:68265707 上傳時間:2022-04-02 格式:DOC 頁數(shù):28 大?。?.04MB
收藏 版權(quán)申訴 舉報 下載
《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書_第1頁
第1頁 / 共28頁
《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書_第2頁
第2頁 / 共28頁
《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書_第3頁
第3頁 / 共28頁

下載文檔到電腦,查找使用更方便

12 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書》由會員分享,可在線閱讀,更多相關(guān)《《物聯(lián)網(wǎng)信息安全》實驗指導(dǎo)書(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、實驗一 圖像輸入與輸出基本操作(2學(xué)時) 實驗二 基于DCT域的數(shù)字水印技術(shù)(2學(xué)時) 綜合性實驗 基于傅立葉域變換的數(shù)字水印技術(shù)(4學(xué)時) 實驗前預(yù)備知識: 數(shù)字水印技術(shù)是利用數(shù)字產(chǎn)品普遍存在的冗余數(shù)據(jù)與隨機(jī)性,將水印信息嵌入在數(shù)字產(chǎn)品本身中,從而起到保護(hù)數(shù)字產(chǎn)品版權(quán)或者完整性的一種技術(shù)。 現(xiàn)在學(xué)術(shù)界對數(shù)字水印算法的理解都是將一些不易察覺的具有隨機(jī)特性的數(shù)據(jù)嵌入到圖像頻域或空域的系數(shù)上。從信號處理的角度看,嵌入水印可以看成是在強(qiáng)背

2、景下迭加一個弱信號,由于人類視覺系統(tǒng)的分辨率受到一定的限制,只要迭加的信號幅度不超過HVS的對比門限,人眼就無法感覺到信號的存在,所以可以通過對原始圖像進(jìn)行一定調(diào)整,在不影響視覺效果的情況下嵌入一些水印信息。 數(shù)字水印系統(tǒng)的一般模型如圖1所示: 圖1 數(shù)字水印系統(tǒng)基本模型 水印嵌入器的輸入量有三個:水印信號M,宿主信號S和密鑰K。 水印信號M是指原始水印(圖像或一個數(shù)字序列)通過一定的方法經(jīng)過調(diào)制將嵌入到宿主信號中的數(shù)字信號。 宿主信號S是指被嵌入水印的信號(原始信號)。 密鑰K則指用于提高水印系統(tǒng)安全性的密碼信息,它獨立于宿主信號。密鑰有私有密鑰和公共密鑰之分,前者指攻擊者

3、在明確了水印嵌入方法但又不知道密鑰的情況下,水印不會被破壞或盜??;后者是指攻擊者對宿主信號(如內(nèi)容標(biāo)識、語言字幕等)不感興趣的情況下,密鑰也就不存在保密性,可以作為公共密鑰。 實驗一 圖像輸入與輸出基本操作 一、實驗題目: 圖像輸入與輸出操作 二、實驗?zāi)康? 學(xué)習(xí)在MATLAB環(huán)境下對圖像文件的I/O操作,為讀取各種格式的圖像文件和后續(xù)進(jìn)行圖像處理打下基礎(chǔ)。 三、實驗內(nèi)容 利用MATLAB為用戶提供的專門函數(shù)從圖像格式的文件中讀/寫圖像數(shù)據(jù)、顯示圖像,以及查詢圖像文件的信息。 四、預(yù)備知識 熟悉MATLAB開發(fā)環(huán)境。 五、實驗原理 (1)圖像文件的讀取

4、利用imread函數(shù)可以完成圖像文件的讀取操作。常用語法格式為: I=imread(‘filename’,‘fmt’)或I=imread(‘filename.fmt’); 其作用是將文件名用字符串filename表示的、擴(kuò)展名用字符串fmt(表示圖像文件格式)表示的圖像文件中的數(shù)據(jù)讀到矩陣I中。當(dāng)filename中不包含任何路徑信息時,imread會從當(dāng)前工作目錄中尋找并讀取文件。要想讀取指定路徑中的圖像,最簡單的方法就是在filename中輸入完整的或相對的地址。 MATLAB支持多種圖像文件格式的讀、寫和顯示。因此參數(shù)fmt常用的可能值有: ‘bmp’ Window

5、s位圖格式 ‘jpg’or‘jpeg’ 聯(lián)合圖像專家組格式 ‘tif’or‘tiff’ 標(biāo)志圖像文件格式 ‘gif’ 圖形交換格式 ‘pcx’ Windows畫刷格式 ‘png’ 可移動網(wǎng)絡(luò)圖形格式 ‘xwd’ X Window Dump格式 例如,命令行 >>I=imread(‘lena.jpg’); 將JPEG圖像lena讀入圖像矩陣I中。 (2) 圖像文件的寫入(保存) 利用imwrite完成圖像的輸出和保存操作,也完全支持也完全支持上述各種 圖像文件的格式。其語法格式為:

6、 imwrite(I,‘filename’,‘fmt’)或imwrite(I,‘filename.fmt’); 其中的I、filename和fmt的意義同上所述。 注意事項:當(dāng)利用imwrite函數(shù)保存圖像時,MATLAB默認(rèn)的保存方式是將其簡化為uint8的數(shù)據(jù)類型。與讀取文件類型類似,MATLAB在文件保存時還支持16位的PNG和TIFF圖像。所以,當(dāng)用戶保存這類文件時,MATLAB就將其存儲在uint16中。 (3)圖像文件的顯示 圖像的現(xiàn)實過程是將數(shù)字圖像從一組離散數(shù)據(jù)還原為一幅可見圖像的過程。 MATLAB的的圖像處理工具箱提供了多種圖像顯示技術(shù)。例如imshow

7、可以直接從文件顯示多種圖像;image函數(shù)可以將矩陣作為圖像 ;colorbar函數(shù)可以用來顯示顏色條;montage函數(shù)可以動態(tài)顯示圖像序列。這里僅對常用的顯示函數(shù)進(jìn)行介紹。 ①圖像的顯示 imshow函數(shù)是最常用的顯示各種圖像的函數(shù),其調(diào)用格式如下: imshow(I,N); imshow(I,N)用于顯示灰度圖像,其中I為灰度圖像的數(shù)據(jù)矩陣,N為灰度級數(shù)目,默認(rèn)值為256。 例如下面的語句用于顯示一幅灰度圖像: >> I=imread(‘lena.jpg’); >> imshow(I); 如果不希望在顯示圖像之前裝載圖像,那么可以使用以下格式直接進(jìn)行圖像文件

8、的顯示: imshow filename 其中,filename為要顯示的圖像文件的文件名。 實例1-1 顯示一幅在當(dāng)前目錄下的.bmp格式的圖像: >>imshow lena.jpg 顯示結(jié)果如圖1.1所示。 圖1.1.1 顯示一幅圖像文件中的圖像 注意事項:該文件名必須帶有合法的擴(kuò)展名(指明文件格式),且該圖像文件必須保存在當(dāng)前目錄下,或在MATLAB默認(rèn)的目錄下。 ②添加色帶 colorbar函數(shù)可以給一個坐標(biāo)軸對象添加一條色帶。如果該坐標(biāo)軸對象包含一個圖像對象,則添加的色帶將指示出該圖像中不同顏色的數(shù)據(jù)值。這對于了解被顯示圖像的灰度級特別有用。其調(diào)用

9、格式為: colorbar 實例1-2 >> I=imread(‘lena.jpg’); >> imshow(I); >> colorbar; 圖1.1.2 顯示圖像并加入顏色條 從上圖可知,該圖像是數(shù)據(jù)類型為uint8的灰度圖像,其灰度級范圍從0 -255。 ③顯示多幅圖像 顯示多幅圖像最簡單的方法就是在不同的圖形窗口中顯示它們。imshow總是在當(dāng)前窗口中顯示一幅圖像,如果用戶想連續(xù)顯示兩幅圖像,那么第二幅圖像就會替代第一幅圖像。為了避免圖像在當(dāng)前窗口中的覆蓋現(xiàn)象,在調(diào)用imshow函數(shù)顯示下一幅圖像之前可以使用figure命令來創(chuàng)建一個新的窗口。

10、例如: imshow(I1); figure, imshow(I2); figure, imshow(I3); 有時為了便于在多幅圖像之間進(jìn)行比較,需要將這些圖像顯示在一個圖形窗口中。達(dá)到這一目的有兩種方法:一種方法是聯(lián)合使用imshow和subplot函數(shù),但此方法在一個圖形窗口只能有一個調(diào)色板;另一種方法是聯(lián)合使用subimage和subplot函數(shù),此方法可在一個圖形窗口內(nèi)使用多個調(diào)色板。 subplot函數(shù)將一個圖形窗口劃分為多個顯示區(qū)域,其調(diào)用格式如下: subplot(m,n,p) subplot函數(shù)將圖形窗口劃分為m(行)×n(列)個顯示區(qū)域,并選擇第

11、p個區(qū)域作為當(dāng)前繪圖區(qū)。 例1-3 用兩排顯示四幅圖像,可以使用以下語句: >> I1=imread(‘lena.bmp’); >> I2=imread(‘gs256.bmp’); >> I3=imread(‘lena.bmp’); >> I4=imread(‘gs256.bmp’); >> subplot(2,2,1), imshow(I1); >> subplot(2,2,2), imshow(I2); >> subplot(2,2,3), imshow(I3); >> subplot(2,2,4), imshow(I4); 圖1.1.3 在一個圖形窗

12、口中顯示多幅圖像 (4) 圖像文件信息的查詢 imfinfo函數(shù)用于查詢圖像文件的有關(guān)信息,詳細(xì)地顯示出圖像文件的各種屬性。其語法格式為: info=imfinfo(‘filename’,‘fmt’)或info=imfinfo(‘filename.fmt’) 或imfinfo filename.fmt imfinfo函數(shù)獲取的圖像文件信息依賴于文件類型的不同而不同,但至少應(yīng)包 含以下內(nèi)容: 文件名。如果該文件不在當(dāng)前目錄下,還包含該文件的完整路徑。 文件格式。 文件格式的版本號。 文件最后一次修改的時間。 文件的大小。以字節(jié)為單位。 圖像的寬度。 圖像的高度。

13、每個像素所用的比特數(shù)。也叫像素深度。 圖像類型。即該圖像是真彩色圖像、索引圖像還是灰度圖像。 例如,命令行 >>imfinfo bubbles25.jpg 會輸出如下信息(注意,在這種情況下,有些域不包含信息): Filename: ‘bubbles25.jpg’ FileModDate: ‘04-Jan-2003 12:31:26’ FileSize: 13849 Format: ‘jpg’ FormatVersion: ‘’ Width: 714 Heigh

14、t: 682 BitDepth: 8 ColorType: ‘grayscale’ FormatSignature: ‘’ Comment: {} 六、實驗步驟: (1)利用imread函數(shù)完成對圖像文件的讀取操作。 (2)利用imwrite函數(shù)完成圖像的寫入(保存)操作。 (3)利用imshow函數(shù)顯示圖像。 (4)利用imfinfo函數(shù)查詢圖像文件的有關(guān)信息。 實驗二 基于DCT域的數(shù)字水印技術(shù) 離散余弦變換,簡稱DCT,是一種實數(shù)域變換,其變換核為實數(shù)的余弦函數(shù),計算速度較快,

15、是一種近似最佳變換,很適合于做圖象壓縮和隨機(jī)信號處理,它對常用的圖象壓縮有較強(qiáng)的魯棒性。 基于DCT域的數(shù)字水印算法,一般而言有兩種算法。一種是直接對整幅圖像進(jìn)行DCT計算,選取合適頻段的系數(shù),嵌入水印。另一種是,首先將整幅圖像分成塊,對每一塊分別進(jìn)行DCT計算,在每一塊中選取合適頻段的系數(shù),將水印信息分散嵌入到每一塊所選取的DCT系數(shù)中。這種方法稱為分塊DCT,這種方法非常適合于8×8的圖像塊DCT變換。目前,DCT域的水印方法大多數(shù)是采用分塊DCT方法。 二維DCT概述:一般而言,數(shù)字圖象,其二維DCT變換用矩陣表示,其定義式如下式所示: (4-1) 二維IDCT定義如

16、下: (4-2) 其中 并且 (4-3) 我們最常用到的是8×8分塊DCT,也就是首先將大小為M×N的圖像分成的非重疊的大小為8×8的塊,然后對每一塊作DCT。根據(jù)式(4-1)和式(4-2),8×8DCT的定義如下: (4-4) 8×8IDCT的定義如下: (4-5) 其中, 并且 (4-6) 實驗?zāi)康模簩W(xué)習(xí)使用基于DCT域數(shù)字水印嵌入算法和基于DCT域數(shù)字水印檢測提取算法。 實驗內(nèi)容和原理: (1)基于DCT域數(shù)字水印嵌入算法: DCT域的水印嵌入過程,就是首先對宿主圖像S進(jìn)行

17、分塊DCT運算,選取出要嵌入的DCT系數(shù)C,并且對宿主圖像用HVS模型進(jìn)行分析,得到感知系數(shù)掩蔽模板,用其來控制水印嵌入強(qiáng)度,再將編碼后的水印信號W,用一定方式嵌入到選好的系數(shù)中。用嵌入水印的系數(shù)替代原來位置的系數(shù),再進(jìn)行逆DCT(Inverse Discrete Cosine Transform,IDCT)變換,就得到了含有水印的圖像X。DCT域水印系統(tǒng)的水印嵌入過程框圖如圖1所示: 圖1 DCT域水印嵌入過程方框圖 (2)基于DCT域數(shù)字水印檢測提取算法: DCT域水印的驗證過程(即包括水印的檢測和提取過程),就是將待測圖像Y(注意此時的圖像也許已經(jīng)遭受了圖象處理或惡意攻擊)進(jìn)

18、行DCT運算;然后按著嵌入水印時選取的DCT系數(shù),選取其含有水印的系數(shù),進(jìn)行水印提取,然后利用相關(guān)檢測法判斷水印是否存在。如果水印檢測器輸出結(jié)果顯示水印存在,則根據(jù)需要可以用水印解碼器對提取的水印進(jìn)行解碼,恢復(fù)水印。水印檢測提取過程如圖2 圖2 DCT域數(shù)字水印檢測提取框圖 實驗操作方法與步驟: (1)水印嵌入步驟如下: 1. 將宿主圖像分成8×8的塊,每一塊都進(jìn)行DCT變換,得到與宿主圖象相同尺寸的DCT域系數(shù)矩陣。 2. 產(chǎn)生兩個不相關(guān)的偽隨機(jī)序列,并設(shè)定一個密鑰key。 3. 將每個8×8的DCT系數(shù)矩陣,從每一塊的中頻段取出個系數(shù)。 4. 然后嵌入水印,嵌入規(guī)則為當(dāng)

19、水印圖像元素為‘0’時,按照式子(其中alpha為尺度因子,mark為隨機(jī)序列,為原圖像的分塊DCT系數(shù)),將一個隨機(jī)序列與原始圖像塊的幅度譜對應(yīng)元素進(jìn)行乘性疊加;為‘1’時,用另一個偽隨機(jī)序列與幅度譜對應(yīng)元素進(jìn)行乘性疊加。 5. 用得到的新的DCT系數(shù)對原來位置的DCT系數(shù)進(jìn)行置換。 6. 對新的DCT系數(shù)矩陣進(jìn)行DCT逆變換,得到了嵌入水印信號的圖像。 (2)水印檢測提取步驟如下: 1. 對含有水印圖像進(jìn)行8×8的塊DCT變換。 2. 對每一塊的DCT系數(shù)進(jìn)行“之”字型排列,從我們已知的嵌入位置取出可能含有水印的系數(shù),將所有提取出的系數(shù),按順序組成新的系數(shù)序列。 3. 用密鑰

20、生成水印信號 4. 將含水印的系數(shù)序列與水印信號進(jìn)行相關(guān)計算,得到歸一化相關(guān)系數(shù)。 實驗結(jié)果及分析: 以下是尺度因子alpha=30時的實驗結(jié)果,以及受到各種攻擊后所提取到的水印圖像及其與原始水印圖像的相關(guān)系數(shù): 圖3 原始圖像和嵌入水印后的圖像 此時,alpha=30 圖4 沒有受到攻擊的圖像及提取到的水印圖像 此時相關(guān)系數(shù)=1 圖5 加入白噪聲后的圖像、原始水印和提取的水印圖像 此時相關(guān)系數(shù)=0.99969 圖6 高斯低通濾波后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0.99058 圖7 剪切后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0

21、.93909 圖8 旋轉(zhuǎn)10后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0.48383 結(jié)論:當(dāng)圖像(宿主信息)受到加噪、高斯低通濾波、剪切等攻擊后,其可視度、提取的水印圖像與原始水印圖像的相似度(都在90%以上) 都是非常令人滿意的;當(dāng)受到旋轉(zhuǎn)攻擊后,其提取的水印圖像與原始水印圖像的相似度(不足50%)卻令人感到失望,不過仍可證明水印信息的存在。 程序參考: %%%%%%%%%%%%% 嵌入算法 %%%%%%%%%%%%%%% clear all; clc; %%%%%% 讀取水印圖像 %%%%%%%% omark=double(imread('muxiao.bmp'

22、))/255; mo=size(omark,1); no=size(omark,2); %%%%% 以下生成水印信息 %%%%%% mark=omark; alpha=30; rand1=randn(1,8); rand2=randn(1,8); %%%%%% 讀取宿主圖像 %%%%%%%% cimage=imread('lena.bmp'); figure(1); subplot(2,3,1),imshow(cimage,[]),title(‘原始的宿主圖像’); [mc,nc]=size(cimage); cda0=blkproc(cimage,[8,8],'dc

23、t2'); %%%%%%% 嵌入水印 %%%%%%%%% cda1=cda0; for i=1:mo for j=1:no x=(i-1)*8;y=(j-1)*8; if mark(i,j)==1 k=rand1; else k=rand2; end cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1); cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2); cda1(x+3,y+6

24、)=cda0(x+3,y+6)+alpha*k(3); cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4); cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5); cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6); cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7); cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8); end end %%%%%% 嵌入水印后圖象 %%%%%% wimage=bl

25、kproc(cda1,[8,8],'idct2'); wimage_1=uint8(wimage); imwrite(wimage_1,'withmark.bmp','bmp'); subplot(2,3,2),imshow(wimage,[]),title(‘嵌入水印后圖象’); %%%%%%%%%%%%%% 進(jìn)行攻擊測試 %%%%%%%%%%% disp(‘1-->加入白噪聲’); disp(‘2-->高斯低通濾波’); disp(‘3-->剪切圖像’); disp(‘4-->旋轉(zhuǎn)攻擊’); disp(‘5-->直接檢測’) begin=input(‘請選擇攻擊(1-

26、5):’) switch begin %%%%%%% 加入白噪聲 %%%%%%%% case 1 Aimage1=wimage; Wnoise=20*randn(size(Aimage1)); Aimage1=Aimage1+Wnoise; subplot(2,3,4),imshow(Aimage1,[]),title(‘加入白噪聲后的圖象’); att=Aimage1; imwrite(att,'whitenoiseimage.bmp'); %%%%%%% 高斯低通濾波 %%%%%%% case 2 Aimage2=wimage; H=fspecia

27、l('gaussian',[4,4],0.5); Aimage2=imfilter(Aimage2,H); subplot(2,3,4),imshow(Aimage2,[]),title(‘高斯低通濾波后的圖象’); att=Aimage2; imwrite(att,'gaussianimage.bmp') %%%%%%%% 剪切攻擊 %%%%%%%% case 3 Aimage3=wimage; Aimage3(1:128,1:128)=256; subplot(2,3,4),imshow(Aimage3,[]),title(‘剪切后的圖象’); att=Aima

28、ge3; imwrite(att,'cutpartimage.bmp'); %%%%%%%% 旋轉(zhuǎn)攻擊 %%%%%%%% case 4 Aimage4=wimage; Aimage4=imrotate(Aimage4,10,'bilinear','crop'); Aimage_4=mat2gray(Aimage4); subplot(2,3,4),imshow(Aimage_4,[]),title(‘旋轉(zhuǎn)10 度后的圖象’); att=Aimage_4; imwrite(att,'rotatedimage.bmp'); %%%%%%% 沒有受到攻擊 %%%%%%%

29、 case 5 subplot(2,3,4),imshow(wimage,[]),title(‘直接提取的圖像’); att=wimage; imwrite(att,'directimage.bmp'); end %%%%%%%%%%%%% 提取水印 %%%%%%%%%%%%%% tmark_0=att; tmark_0=blkproc(tmark_0,[8,8],'dct2'); pass=zeros(1,8); for i=1:mo for j=1:no x=(i-1)*8;y=(j-1)*8; pass(1)=tma

30、rk_0(x+1,y+8); pass(2)=tmark_0(x+2,y+7); pass(3)=tmark_0(x+3,y+6); pass(4)=tmark_0(x+4,y+5); pass(5)=tmark_0(x+5,y+4); pass(6)=tmark_0(x+6,y+3); pass(7)=tmark_0(x+7,y+2); pass(8)=tmark_0(x+8,y+1); if (corr2(pass,rand1)>corr2(pas

31、s,rand2)) tmark_1(i,j)=1; else tmark_1(i,j)=0; end end end %%%%%%%%%% 計算NC(歸一化相關(guān)系數(shù))%%%%%%%% g_mark=double(tmark_1); o_mark=double(omark); [m,n]=size(g_mark); nc_0=0; nc_1=0; nc_2=0; for i=1:m for j=1:n nc_0=nc_0+g_mark(i,j)*o_

32、mark(i,j); nc_1=nc_1+o_mark(i,j)*o_mark(i,j); nc_2=nc_2+g_mark(i,j)*g_mark(i,j); end end NC=nc_0/sqrt(nc_1*nc_2); %%%%%% 顯示提取水印 %%%%%%%% subplot(2,3,5),imshow('muxiao.bmp'),title(‘原始水印圖像’); subplot(2,3,6),imshow(tmark_1,[]); name=‘提取得水印圖像’; title(strcat(num2str(name),'N

33、C=',num2str(NC))); 綜合設(shè)計性實驗 基于傅立葉域變換的數(shù)字水印技術(shù) 實驗?zāi)康模簩W(xué)習(xí)使用基于傅立葉域的數(shù)字水印嵌入算法和基于DCT域數(shù)字水印檢測提取算法。 實驗內(nèi)容和原理: 傅立葉變換(Fourier Transform)是線性系統(tǒng)分析的一個有力工具,是研究信號的頻譜方法,它架起了時域和頻域之間的橋梁。使我們能夠定量分析諸如數(shù)字化系統(tǒng)、采樣點、電子放大器、卷積濾波器、噪聲等的作用,把傅立葉變換的理論同其物理解釋相結(jié)合,將大大有助于解決大多數(shù)圖象處理問題。 Fourier分析理論十分完善,既可以處理連續(xù)信號也可以處理離散信號。計算機(jī)只能處理離散信號,且在

34、數(shù)字圖象處理中,輸入圖像和輸出圖像通常都是二維的,一般表示成二維數(shù)字矩陣,因此這里直接討論二維離散傅立葉變換(DFT)和二維快速傅立葉變換(FFT)。 (1)二維離散傅立葉變換DFT(Discrete Fourier Transform) 二維離散傅立葉變換對定義式如下: (1-1) (1-2) 二維離散傅立葉變換的傅立葉譜、相位、功率譜分別如下: 傅立葉譜: (1-3) 相位: (1-4) 功率譜: (1-5) 式子(1-1)可以分離為:

35、 (1-6) 式子(1-2)可以分離為: (1-7) 由上兩式可知,二維傅立葉變換可由連續(xù)兩次一維傅立葉變換得到,從而將二維DFT分解為水平和垂直兩部分運算,上式中方括號中的項表示在圖像的行上計算的DFT,方括號外邊的求和則實現(xiàn)結(jié)果數(shù)組在列上的DFT,這種分解使我們可以用一維FFT來快速實現(xiàn)二維DFT。 (2)二維快速傅立葉變換FFT(Fast Fourier Transform) FFT的基本思想是: 令序列的長度為,如果不滿足,在尾部補零,沒有任何影響。按n奇偶把分解為兩個N/2點的子序列: (1-8)

36、 (1-9) 那么 (1-10) 將(1-8)和(1-9)式代入上式得: (1-11) 上式右邊的兩部分恰好是長度(周期)為N/2的的傅立葉變換,所以: (1-12) (1-13) 這樣一個長度為N的DFT就分解為兩個長度為N/2的DFT,然后進(jìn)行N/2次復(fù)數(shù)的蝶式運算,再運用分解-遞歸思想,分解次,每一次均有N/2個蝶式運算,所以FFT的時間復(fù)雜度為。 FFT在圖像運用中的思想是,先將原圖像進(jìn)行轉(zhuǎn)置,按行對轉(zhuǎn)置后的圖像矩陣做一維FFT,將此變換所得的中間矩陣再轉(zhuǎn)

37、置,再按對轉(zhuǎn)置后的中間矩陣做一維FFT,最后得到的就是二維FFT。 實驗操作方法與步驟: (1)嵌入算法的步驟如下: 1.將宿主圖像分成8×8的塊,每一塊都進(jìn)行DFT變換,得到與宿主圖象相同尺寸的DFT域圖象系數(shù)矩陣。 2. 產(chǎn)生兩個不相關(guān)的偽隨機(jī)序列,并設(shè)定一個密鑰key。 3. 將每個8×8的DFT系數(shù)矩陣,從每一塊的中頻段取出個系數(shù)。 4. 由于DFT域的幅度譜具有對稱性,為了水印嵌入后保持這種對稱性,也為了確?;謴?fù)圖像像素值為實數(shù),嵌入水印時采用對稱嵌入。嵌入規(guī)則為當(dāng)水印圖像元素為‘0’時,按照式子(其中alfa為尺度因子,mark為隨機(jī)序列,為原圖像的分塊DFT系數(shù))

38、,將一個隨機(jī)序列與原始圖像塊的幅度譜對應(yīng)元素進(jìn)行乘性疊加;為‘1’時,用另一個偽隨機(jī)序列與幅度譜對應(yīng)元素進(jìn)行乘性疊加。 5. 用得到的新的DFT系數(shù)對原來位置的DFT系數(shù)進(jìn)行置換。 6. 對每一圖像塊進(jìn)行DFT逆變換,得到含水印圖像。 (2)提取算法步驟如下: 1. 將宿主圖像分成8×8的塊,每一塊都進(jìn)行DFT變換,得到與宿主圖像相同尺寸的DFT域圖象系數(shù)矩陣。 2. 對每一塊的DFT系數(shù)進(jìn)行“之”字型排列,從我們已知的嵌入位置取出可能含有水印的系數(shù),將所有提取出的系數(shù),按順序組成新的系數(shù)序列。 3. 計算嵌入水印圖像塊的幅度譜與兩個偽隨機(jī)序列的相關(guān)性,假設(shè)嵌入的水印圖像矩陣為‘

39、0’時疊加的是隨機(jī)序列A,為‘1’時疊加的是隨機(jī)序列B,則提取時如果嵌入水印幅度譜與隨機(jī)序列A的相關(guān)性大于其B的相關(guān)性,那么這個位置嵌入的是水印圖像矩陣‘0’元素。按這個規(guī)則即可提取出水印圖像。 4. 將含水印的系數(shù)序列與水印信號進(jìn)行相關(guān)計算,得到歸一化相關(guān)系數(shù)。 實驗結(jié)果與分析: 以下是尺度因子alpha=260時的實驗結(jié)果,以及受到各種攻擊后所提取到的水印圖像及其與原始水印圖像的相關(guān)系數(shù): 圖1 原始圖像與嵌入水印后的圖像 圖2 沒有受到攻擊的圖像和直接提取的水印圖像 此時相關(guān)系數(shù)=1 圖3 加入白噪聲后的圖像、原始水印圖像及提取的水印圖像 此時相關(guān)系數(shù)=0

40、.96566 圖4 高斯低通濾波后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0.97311 圖5 剪切后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0.96907 圖6 旋轉(zhuǎn)后的圖像及提取的水印圖像 此時相關(guān)系數(shù)=0.91301 結(jié)論:由于DFT域?qū)θ中缘男D(zhuǎn)、平移和縮放變換具有不變性的特點,基于DFT域的數(shù)字水印技術(shù)要比基于DCT域的數(shù)字水印技術(shù)的魯棒性要強(qiáng)的多,特別是對于旋轉(zhuǎn)攻擊,前者的優(yōu)勢更加突出! 程序參考: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%% 嵌入水印算法 %%%%%%%%%%%%%% cle

41、ar all; clc; %%%%%% 讀取水印圖象 %%%%%%% omark=double(imread('muxiao.bmp'))/255; mo=size(omark,1); no=size(omark,2); %%%%% 以下生成水印信息 %%%%%% mark=omark; alpha=200; R1=randn(1,8); rand1=round(R1); R2=randn(1,8); rand2=round(R2); %%%%%%% 讀取宿主圖像 %%%%%%% cimage=imread('lena.bmp'); figure(1); s

42、ubplot(2,3,1),imshow(cimage,[]),title('原始的宿主圖像'); [mc,nc]=size(cimage); cimage=double(cimage); fft0=blkproc(cimage,[8,8],'fft2'); %%%%%%% 嵌入水印 %%%%%%%%% fft_abs=abs(fft0); fft_angle=angle(fft0); fft1=fft_abs; for ii=1:mo for jj=1:no x=(ii-1)*8;y=(jj-1)*8; if mark(ii,

43、jj)==1 k=rand1; else k=rand2; end fft1(x+1,y+8)=fft_abs(x+1,y+8)+alpha*k(1); fft1(x+2,y+7)=fft_abs(x+2,y+7)+alpha*k(2); fft1(x+3,y+6)=fft_abs(x+3,y+6)+alpha*k(3); fft1(x+4,y+5)=fft_abs(x+4,y+5)+alpha*k(4); fft1(x+5,y+4)=fft_abs(x+5,y+4)+a

44、lpha*k(5); fft1(x+6,y+3)=fft_abs(x+6,y+3)+alpha*k(6); fft1(x+7,y+2)=fft_abs(x+7,y+2)+alpha*k(7); fft1(x+8,y+1)=fft_abs(x+8,y+1)+alpha*k(8); end end fft_abs_0=fft1; fft_abs_1=(fft_abs_0.*exp(i*fft_angle)); wimage_0=blkproc(fft_abs_1,[8,8],'ifft2'); wimage=abs(wimage_0); %%%%

45、%% 顯示嵌入水印圖象 %%%%% wimage_1=uint8(wimage); imwrite(wimage_1,'withmark.bmp','bmp'); subplot(2,3,2),imshow(wimage,[]),title('嵌入水印后的圖象'); %%%%%%%%%%%%% 進(jìn)行各種攻擊 %%%%%%%%%%%% disp('1-->加入白噪聲'); disp('2-->高斯低通濾波'); disp('3-->剪切圖像'); disp('4-->旋轉(zhuǎn)圖象'); disp('5-->直接檢測'); begin=input('請選擇攻擊(1-5)'); s

46、witch begin %%%%%%%%加入白噪聲%%%%%%%% case 1 Aimage1=wimage; Wnoise=12*randn(size(Aimage1)); Aimage1=Aimage1+Wnoise; subplot(2,3,4),imshow(Aimage1,[]),title('加入白噪聲后的圖象'); att=Aimage1; imwrite(att,'whitenoiseimage.bmp'); %%%%%% 高斯低通濾波 %%%%%%%% case 2 Aimage2=wimage; H=fspecial('gauss

47、ian',[4,4],0.6); Aimage2=imfilter(Aimage2,H); subplot(2,3,4),imshow(Aimage2,[]),title('高斯低通濾波后的圖象'); att=Aimage2; imwrite(att,'gaussianimage.bmp') %%%%%%% 剪切攻擊 %%%%%%%%% case 3 Aimage3=wimage; Aimage3(1:128,1:128)=256; subplot(2,3,4),imshow(Aimage3,[]),title('剪切后的圖象'); att=Aimage3; im

48、write(att,'cutpartimage.bmp'); %%%%%%% 旋轉(zhuǎn)攻擊 %%%%%%%%% case 4 Aimage4=wimage; Aimage4=imrotate(Aimage4,10,'bilinear','crop'); Aimage_4=mat2gray(Aimage4); subplot(2,3,4),imshow(Aimage_4,[]),title('旋轉(zhuǎn)10度后的圖象'); att=Aimage_4; imwrite(att,'rotatedimage.bmp'); %%%%%%% 沒有受到攻擊 %%%%%%% case

49、 5 subplot(2,3,4),imshow(wimage,[]),title('直接提取的圖象'); att=wimage; imwrite(att,'directimage.bmp'); end %%%%%%%%%%%%%%% 提取水印 %%%%%%%%%%%%% tmark_0=att; tmark_0=blkproc(tmark_0,[8,8],'fft2'); tmark_0=abs(tmark_0); pass=zeros(1,8); for ii=1:mo for jj=1:no x=(ii-1)*8;y=(jj-1)*8;

50、 pass(1)=tmark_0(x+1,y+8); pass(2)=tmark_0(x+2,y+7); pass(3)=tmark_0(x+3,y+6); pass(4)=tmark_0(x+4,y+5); pass(5)=tmark_0(x+5,y+4); pass(6)=tmark_0(x+6,y+3); pass(7)=tmark_0(x+7,y+2); pass(8)=tmark_0(x+8,y+1); if (corr2(pa

51、ss,rand1)>corr2(pass,rand2)) tmark_1(ii,jj)=1; else tmark_1(ii,jj)=0; end end end %%%%%%%%%% 計算NC(歸一化相關(guān)系數(shù))%%%%%%%% g_mark=double(tmark_1); o_mark=double(omark); [m,n]=size(g_mark); nc_0=0; nc_1=0; nc_2=0; for ii=1:m for jj=1:n

52、 nc_0=nc_0+g_mark(ii,jj)*o_mark(ii,jj); nc_1=nc_1+o_mark(ii,jj)*o_mark(ii,jj); nc_2=nc_2+g_mark(ii,jj)*g_mark(ii,jj); end end NC=nc_0/sqrt(nc_1*nc_2); %%%%%% 顯示提取水印圖象 %%%%% subplot(2,3,5),imshow('muxiao.bmp'),title('原始水印圖象'); subplot(2,3,6),imshow(tmark_1,[]); name='提取的水

53、印圖像'; title(strcat(num2str(name),'NC=',num2str(NC))); 附錄:MATLAB函數(shù)介紹 在研究水印技術(shù)時,我們處理的圖像數(shù)據(jù)是二維信號,而聲音是一維信號,所以在這里,我門只簡單介紹與水印有關(guān)的函數(shù)。 1. 數(shù)據(jù)輸入輸出函數(shù) imread()和imwrite():可以讀寫bmp, jpg/jpeg, tif/tiff, png, hdf, pcx, wxd格式文件。讀索引文件時,還可以得到相應(yīng)的調(diào)色板數(shù)據(jù)。 2. 圖象顯示 imshow():顯示一幅圖像;imfinfo():可以得到讀入圖像的信息。如文件的大小、格式、格式版本號、圖像

54、的高度、寬度、顏色類型(真彩色,灰度圖還是索引圖)等。 3. 變換域函數(shù) 對信號采用不同的變換,是實現(xiàn)頻域法水印的至關(guān)重要的一步,MATLAB中的一維信號和二維信號分別提供了各種變換和逆變換函數(shù)。 1) 離散余弦變換(DCT) (1) dct(),dct2():分別實現(xiàn)一維信號和二維信號的DCT(離散余弦變換); (2) idct(),idct2():分別實現(xiàn)一維信號和二維信號的IDCT(逆離散余弦變換); 2) 離散傅立葉變換(DFT) (1) fft(),fft2():分別實現(xiàn)一維信號和二維信號的DFT(離散傅立葉變換); (2) ifft(),ifft2():分別實現(xiàn)一維信號和二維信號的IDFT(逆離散傅立葉變換); 4. 攻擊函數(shù) 對算法進(jìn)行攻擊測試是對水印魯棒性檢測的一種重要手段,一個好的水印算法必須經(jīng)過各種攻擊測試才能對之做出客觀的評價。 MATLAB中的許多函數(shù)可以直接用來做攻擊測試: 1)旋轉(zhuǎn):rotate()可以對圖像進(jìn)行任意角度的旋轉(zhuǎn); 2)剪裁:imcrop()可以按精確定位的各點坐標(biāo)進(jìn)行剪裁; 3)濾波:filter()和filter2()可實現(xiàn)對一維信號和二維信號的濾波; 4)加各種噪聲:imnoise()可以對圖像加入各種噪聲,如白噪聲、椒鹽噪聲等。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!