您好,登錄后才能下訂單哦!
本篇內容主要講解“Matlab中圖像數字水印算法的原理與實現方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Matlab中圖像數字水印算法的原理與實現方法是什么”吧!
圖像數字水印技術以一定的算法將一些標志性信息嵌人到圖像中,而不影響原圖像的面質和使用。水印信息可以是序列號或有特殊意義的文本等,通過和載體圖像的緊密結合而達到識別圖像來源、作者等版權信息的目的。與傳統加密技術不同,圖像水印技術的目的并不在于直接阻止對圖像的盜版,而是著眼于如何將版權信息加入到正版圖像,并能夠從盜版圖像中提取出先期加人的版權方面的證據(水印),在能夠證明圖像確系盜版之后再以法律的手段對盜版者實施制裁。
圖像數字水印處理可分為對水印的嵌人處理和對已嵌人的水印的檢測處理兩部分。從圖像處理的角度看,嵌人水印可以看作是在強背景(原始圖像)下疊加一個弱信號(水印),由于人的視覺系統對圖像的分辨率有限,因此只要疊加的信號在幅度上低于某個對比度門限,就可以使人眼完全感受不到疊加信號的存在,這個對比度門限主要受系統的空間、時間和頻率特征的影響。因此,在不改變視覺效果的前提下,對原始圖像做一定的調整,嵌入一些額外信息是完全有可能的。
由于圖像數字水印的目的不在于限制其正常的圖像復制,而在于保證隱藏其內的水印不被侵犯和發現。因此,在向圖像嵌人水印時。必領考慮到正常的信息操作對水印所造成的威脅,以及要求水印能夠對通常的圖像編輯操作具有一定的抵御、免疫能力。根據圖像水印的目的和技術要求,可以總結出圖像水印的一些特點。
①魯棒性 (robustness):圖像一旦嵌人了水印后,圖像與水印將緊密地融合在一起,而且不因因像的某種處理而導致隱含的水印信息丟失。這里所謂的“處理”,包括了噪聲干擾、濾波、平滑、增強、重采樣、有損編碼壓縮、D/A 或 A/D轉換等各種常規的圖像處理手段。圖像水印除了能對無意識的圖像處理操作具有抵御能力外,還應具各抵擾惡意刪除攻擊、逃惑攻擊等有意識政擊的能力,除非攻擊方對加人的水印有足夠的先驗知識,否則任何破壞和去除水印的企圖都將嚴重損壞因像的面質,使破解后的圖像毫無利用價值。
②不可檢測性(undetectability):水印和圖像應具有一致的特性,如統計噪聲分布等,這樣可以使非法攻擊者無從確認該圖像是否含有水印信息。
③透明性 (invisibility):此特性主要應用了人眼的生理特點,經過隱藏處理的圖像水印不會對原始圖像有視覺可察的畫質降低現象。
④低復雜性:水印的嵌人和提取識別算法應簡單易行。
⑤自恢復性:嵌入了水印的圖像在經過一系列的處理和變換后,可能對原圖產生了較大的破壞,這就要求從留下的片段中仍可提取出水印(或水印殘片),并根據檢驗出的結果確認出水印的存在。
以一副512X512大小的lena灰度圖像和64X64大小的水印灰度圖像為例說明水印嵌入的具體步驟:
第一步,對512X512的原始圖像I系數矩陣分成8X8大小的塊,則原圖一共被分成64X64塊。對每個塊進行二維離散余弦變換(DCT)。
第二步,原圖就變成了64X64個8X8大小的系數矩陣,正好64X64大小的水印圖像J中矩陣的每個系數對應于原始圖像的每個塊,水印的嵌人利用公式:F’ (u,v)=F(u,v)+aw(i) ,其中F(u,v)為原始圖像的DCT系數,a為嵌入強度,w(i)(i=1,2,3,…)是每點的水印像素。
第三步,對這64X64塊嵌入水印信息的矩陣做二維DCT逆變換,再合并成一個整圖,就得到了嵌入水印后的圖像。
代碼如下:
%讀入原始圖像和水印圖像并顯示 I=imread('lena512.jpg'); figure(1); subplot(2,2,1); imshow(I); title('原始圖像'); J=imread('xiaohui64.jpg'); subplot(2,2,2); imshow(J); title('水印圖像'); %對水印圖像進行arnold置亂預處理 H=double(J); tempImg=H; %圖像矩陣賦給tempImg for n=1:5 %置亂次數 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,是因為有64*64個8*8的塊,每次循環處理一個塊 BLOCK1=I(((p-1)*8+1):p*8,((q-1)*8+1):q*8);%每個8*8的塊 BLOCK1=dct2(BLOCK1);%做2維的DCT變換 BLOCK1(4,5)=BLOCK1(4,5)+0.2*G(p,q);%在每塊DCT系數的4行5列處嵌入水印,系數可調 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為可調參數嵌入強度系數,可以發現,隨著嵌入強度的增大,嵌入水印后的圖像效果越來越差。
水印的提取是根據水印的嵌入策略執行相應的逆過程來提取水印。因此,在水印提取過程中,只須將嵌人水印后的圖像塊經DCT變換后的系數減去相應強度的水印信息就可以提取出嵌人該塊的水印信息,再對所有塊提取出來的水印信息進行反置亂就得到提取出來的水印圖像。
水印提取的具體步驟如下:
第一步,讀入嵌入水印后的圖像W和原始水印圖像I。
第二步,分別對W和I進行分塊DCT變換,得到每個塊的系數矩陣。
第三步,對每個8X8塊的中頻系數位置上,利用公式
計算出每一塊的水印信息,合并成一個整圖,就得到了提取出來的水印圖像。
代碼如下:
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 % 對水印進行arnold反置亂 for n=1:43 % 循環次數為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('提取出來的水印圖像');
到此,相信大家對“Matlab中圖像數字水印算法的原理與實現方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。