Matlab中圖像數(shù)字水印算法的原理與實(shí)現(xiàn)詳解
一、背景意義
數(shù)字水印技術(shù)作為信息隱藏技術(shù)的一個(gè)重要分支,是將信息(水印)隱藏于數(shù)字圖像、視頻、音頻及文本文檔等數(shù)字媒體中,從而實(shí)現(xiàn)隱秘傳輸、存儲(chǔ)、標(biāo)注、身份識(shí)別、版權(quán)保護(hù)和防篡改等目的。
隨著 1996 年第一屆信息隱藏國(guó)際學(xué)術(shù)研討會(huì)的召開,數(shù)字水印技術(shù)的研究得到了迅速的發(fā)展,不少政府機(jī)構(gòu)和研究部門加大了對(duì)其的研究力度,其中包括美國(guó)財(cái)政部、美國(guó)版權(quán)工作組、美國(guó)洛斯阿莫斯國(guó)家實(shí)驗(yàn)室、美國(guó)海陸空軍研究實(shí)驗(yàn)室、歐洲電信聯(lián)盟、德國(guó)國(guó)家信息技木研究中心、日本 NTT 信息與通信系研究中心、麻省理工學(xué)院、南加利福尼亞大學(xué)、普渡大學(xué)、劍橋大學(xué)、瑞士洛柔聯(lián)邦工學(xué)院、微軟公司、CA 公司等研究機(jī)構(gòu)。另外,在 TEEE 和 SPIE 等一些重要國(guó)際會(huì)議上,也專門開辟了與數(shù)字水印相關(guān)的專題。歐洲幾項(xiàng)較大的工程項(xiàng)目(如 VIVA 和ACTS)中也均有關(guān)于圖像水印方面的專題研究。我國(guó)在這一領(lǐng)域的研究也基本與歐美等科技強(qiáng)國(guó)保持同步,目前國(guó)內(nèi)已經(jīng)有不少科研機(jī)構(gòu)投人到數(shù)字水印方面的研究中去。1999年底,第一屆全國(guó)信息隱藏學(xué)術(shù)研討會(huì)(CIHW)在北京電子技術(shù)應(yīng)用研究所召開。國(guó)家“863 計(jì)劃”“973項(xiàng)目”(國(guó)家重點(diǎn)基礎(chǔ)研究發(fā)展規(guī)劃)、國(guó)家自然科學(xué)基金等也都對(duì)圖像水印的研究有項(xiàng)目資金支持。
二、基本原理
圖像數(shù)字水印技術(shù)以一定的算法將一些標(biāo)志性信息嵌人到圖像中,而不影響原圖像的面質(zhì)和使用。水印信息可以是序列號(hào)或有特殊意義的文本等,通過和載體圖像的緊密結(jié)合而達(dá)到識(shí)別圖像來源、作者等版權(quán)信息的目的。與傳統(tǒng)加密技術(shù)不同,圖像水印技術(shù)的目的并不在于直接阻止對(duì)圖像的盜版,而是著眼于如何將版權(quán)信息加入到正版圖像,并能夠從盜版圖像中提取出先期加人的版權(quán)方面的證據(jù)(水印),在能夠證明圖像確系盜版之后再以法律的手段對(duì)盜版者實(shí)施制裁。
圖像數(shù)字水印處理可分為對(duì)水印的嵌人處理和對(duì)已嵌人的水印的檢測(cè)處理兩部分。從圖像處理的角度看,嵌人水印可以看作是在強(qiáng)背景(原始圖像)下疊加一個(gè)弱信號(hào)(水印),由于人的視覺系統(tǒng)對(duì)圖像的分辨率有限,因此只要疊加的信號(hào)在幅度上低于某個(gè)對(duì)比度門限,就可以使人眼完全感受不到疊加信號(hào)的存在,這個(gè)對(duì)比度門限主要受系統(tǒng)的空間、時(shí)間和頻率特征的影響。因此,在不改變視覺效果的前提下,對(duì)原始圖像做一定的調(diào)整,嵌入一些額外信息是完全有可能的。
由于圖像數(shù)字水印的目的不在于限制其正常的圖像復(fù)制,而在于保證隱藏其內(nèi)的水印不被侵犯和發(fā)現(xiàn)。因此,在向圖像嵌人水印時(shí)。必領(lǐng)考慮到正常的信息操作對(duì)水印所造成的威脅,以及要求水印能夠?qū)νǔ5膱D像編輯操作具有一定的抵御、免疫能力。根據(jù)圖像水印的目的和技術(shù)要求,可以總結(jié)出圖像水印的一些特點(diǎn)。
①魯棒性 (robustness):圖像一旦嵌人了水印后,圖像與水印將緊密地融合在一起,而且不因因像的某種處理而導(dǎo)致隱含的水印信息丟失。這里所謂的“處理”,包括了噪聲干擾、濾波、平滑、增強(qiáng)、重采樣、有損編碼壓縮、D/A 或 A/D轉(zhuǎn)換等各種常規(guī)的圖像處理手段。圖像水印除了能對(duì)無(wú)意識(shí)的圖像處理操作具有抵御能力外,還應(yīng)具各抵?jǐn)_惡意刪除攻擊、逃惑攻擊等有意識(shí)政擊的能力,除非攻擊方對(duì)加人的水印有足夠的先驗(yàn)知識(shí),否則任何破壞和去除水印的企圖都將嚴(yán)重?fù)p壞因像的面質(zhì),使破解后的圖像毫無(wú)利用價(jià)值。
②不可檢測(cè)性(undetectability):水印和圖像應(yīng)具有一致的特性,如統(tǒng)計(jì)噪聲分布等,這樣可以使非法攻擊者無(wú)從確認(rèn)該圖像是否含有水印信息。
③透明性 (invisibility):此特性主要應(yīng)用了人眼的生理特點(diǎn),經(jīng)過隱藏處理的圖像水印不會(huì)對(duì)原始圖像有視覺可察的畫質(zhì)降低現(xiàn)象。
④低復(fù)雜性:水印的嵌人和提取識(shí)別算法應(yīng)簡(jiǎn)單易行。
⑤自恢復(fù)性:嵌入了水印的圖像在經(jīng)過一系列的處理和變換后,可能對(duì)原圖產(chǎn)生了較大的破壞,這就要求從留下的片段中仍可提取出水印(或水印殘片),并根據(jù)檢驗(yàn)出的結(jié)果確認(rèn)出水印的存在。
三、算法介紹
3.1 數(shù)字水印嵌入
以一副512X512大小的lena灰度圖像和64X64大小的水印灰度圖像為例說明水印嵌入的具體步驟:
第一步,對(duì)512X512的原始圖像I系數(shù)矩陣分成8X8大小的塊,則原圖一共被分成64X64塊。對(duì)每個(gè)塊進(jìn)行二維離散余弦變換(DCT)。
第二步,原圖就變成了64X64個(gè)8X8大小的系數(shù)矩陣,正好64X64大小的水印圖像J中矩陣的每個(gè)系數(shù)對(duì)應(yīng)于原始圖像的每個(gè)塊,水印的嵌人利用公式:F’ (u,v)=F(u,v)+aw(i) ,其中F(u,v)為原始圖像的DCT系數(shù),a為嵌入強(qiáng)度,w(i)(i=1,2,3,…)是每點(diǎn)的水印像素。
第三步,對(duì)這64X64塊嵌入水印信息的矩陣做二維DCT逆變換,再合并成一個(gè)整圖,就得到了嵌入水印后的圖像。
代碼如下:
%讀入原始圖像和水印圖像并顯示 I=imread('lena512.jpg'); figure(1); subplot(2,2,1); imshow(I); title('原始圖像'); J=imread('xiaohui64.jpg'); subplot(2,2,2); imshow(J); title('水印圖像'); %對(duì)水印圖像進(jìn)行arnold置亂預(yù)處理 H=double(J); tempImg=H; %圖像矩陣賦給tempImg for n=1:5 %置亂次數(shù) for u=1:64 for v=1:64 temp=tempImg(u,v); ax=mod((u-1)+(v-1),64)+1;%新像素行位置 ay=mod((u-1)+2*(v-1),64)+1;%新像素列位置 outImg(ax,ay)=temp; end end tempImg=outImg; end G=uint8(outImg);%得到置亂后的水印圖像 %嵌入水印 for p=1:64 for q=1:64 %p、q都是1到64,是因?yàn)橛?4*64個(gè)8*8的塊,每次循環(huán)處理一個(gè)塊 BLOCK1=I(((p-1)*8+1):p*8,((q-1)*8+1):q*8);%每個(gè)8*8的塊 BLOCK1=dct2(BLOCK1);%做2維的DCT變換 BLOCK1(4,5)=BLOCK1(4,5)+0.2*G(p,q);%在每塊DCT系數(shù)的4行5列處嵌入水印,系數(shù)可調(diào) W(((p-1)*8+1):p*8,((q-1)*8+1):q*8)=idct2(BLOCK1);%做DCT反變換 end end %顯示嵌入水印后的圖像 imwrite(uint8(W), 'lena_mark.jpg ', 'jpg'); subplot(2,2,3); imshow('lena_mark.jpg'); title('嵌入水印后的圖像');
上圖中0.2為可調(diào)參數(shù)嵌入強(qiáng)度系數(shù),可以發(fā)現(xiàn),隨著嵌入強(qiáng)度的增大,嵌入水印后的圖像效果越來越差。
3.2 數(shù)字水印提取
水印的提取是根據(jù)水印的嵌入策略執(zhí)行相應(yīng)的逆過程來提取水印。因此,在水印提取過程中,只須將嵌人水印后的圖像塊經(jīng)DCT變換后的系數(shù)減去相應(yīng)強(qiáng)度的水印信息就可以提取出嵌人該塊的水印信息,再對(duì)所有塊提取出來的水印信息進(jìn)行反置亂就得到提取出來的水印圖像。
水印提取的具體步驟如下:
第一步,讀入嵌入水印后的圖像W和原始水印圖像I。
第二步,分別對(duì)W和I進(jìn)行分塊DCT變換,得到每個(gè)塊的系數(shù)矩陣。
第三步,對(duì)每個(gè)8X8塊的中頻系數(shù)位置上,利用公式
計(jì)算出每一塊的水印信息,合并成一個(gè)整圖,就得到了提取出來的水印圖像。
代碼如下:
for p=1:64 for q=1:64 BLOCK1=W(((p-1)*8+1):p*8,((q-1)*8+1):q*8); BLOCK2=I(((p-1)*8+1):p*8,((q-1)*8+1):q*8); BLOCK1=dct2(BLOCK1); BLOCK2=dct2(BLOCK2); Y(p,q)=(BLOCK1(4,5)-BLOCK2(4,5))/0.2; end end % 對(duì)水印進(jìn)行arnold反置亂 for n=1:43 % 循環(huán)次數(shù)為48-5 for u=1:64 for v=1:64 temp1=Y(u,v); bx=mod((u-1)+(v-1),64)+1; by=mod((u-1)+2*(v-1),64)+1; outImg1(bx,by)=temp1; end end Y=outImg1; end %顯示提取出來的水印圖像 imwrite(uint8(Y), 'watermark.jpg ', 'jpg'); subplot(2,2,4); imshow('watermark.jpg'); title('提取出來的水印圖像');
四、程序?qū)崿F(xiàn)
程序運(yùn)行結(jié)果如下:
到此這篇關(guān)于Matlab中圖像數(shù)字水印算法的原理與實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Matlab圖像數(shù)字水印算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01教你5分鐘輕松搞定內(nèi)存字節(jié)對(duì)齊
隨便google一下,人家就可以跟你解釋的,一大堆的道理,我們沒怎么多時(shí)間,討論為何要對(duì)齊.直入主題,怎么判斷內(nèi)存對(duì)齊規(guī)則,sizeof的結(jié)果怎么來的,請(qǐng)牢記以下3條原則2013-09-09Matlab實(shí)現(xiàn)貪吃蛇小游戲的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03純c實(shí)現(xiàn)異常捕獲try-catch組件教程示例
這篇文章主要為大家介紹了純c實(shí)現(xiàn)異常捕獲try-catch組件教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn)
這篇文章主要介紹了C語(yǔ)言指針如何實(shí)現(xiàn)字符串逆序反轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07c++基礎(chǔ)算法動(dòng)態(tài)DP解決CoinChange問題
這篇文章主要為大家介紹了c++基礎(chǔ)算法如何利用動(dòng)態(tài)DP來解決Coin Change的問題示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10C語(yǔ)言實(shí)現(xiàn)五子棋對(duì)戰(zhàn)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)五子棋對(duì)戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05