圖片水印演算法
1. 基於餘弦變換的數字圖像水印演算法有什麼特點
典型數字水印演算法
近年來,數字水印技術研究取得了很大的進步,下面對一些典型的演算法進行了分析,除特別指明外,這些演算法主要針對圖像數據(某些演算法也適合視頻和音頻數據)。
空域演算法
該類演算法中典型的水印演算法是將信息嵌入到隨機選擇的圖像點中最不重要的像素位 (LSB:least significant bits)上,這可保證嵌入的水印是不可見的。但是由於使用了圖像不重要的像素位,演算法的魯棒性差,水印信息很容易為濾波、圖像量化、幾何變形的操作破壞。另外一個常用方法是利用像素的統計特徵將信息嵌入像素的亮度值中。
Patchwork演算法
方法是隨機選擇N對像素點 (ai,bi) ,然後將每個ai點的亮度值加 1 ,每個bi點的亮度值減 1,這樣整個圖像的平均亮度保持不變。適當地調整參數,Patchwork方法對JPEG壓縮、FIR濾波以及圖像裁剪有一定的抵抗力,但該方法嵌入的信息量有限。為了嵌入更多的水印信息,可以將圖像分塊,然後對每一個圖像塊進行嵌入操作。
變換域演算法
該類演算法中,大部分水印演算法採用了擴展頻譜通信 (spread spectrum communication)技術。演算法實現過程為:先計算圖像的離散餘弦變換 (DCT),然後將水印疊加到DCT域中幅值最大的前k系數上(不包括直流分量),通常為圖像的低頻分量。若DCT系數的前k個最大分量表示為D=,i=1 ,… ,k,水印是服從高斯分布的隨機實數序列W =,i=1 ,… ,k,那麼水印的嵌入演算法為di = di(1 + awi),其中常數a為尺度因子,控制水印添加的強度。然後用新的系數做反變換得到水印圖像I。解碼函數則分別計算原始圖像I和水印圖像I*的離散餘弦變換,並提取嵌入的水印W*,再做相關檢驗 以確定水印的存在與否。該方法即使當水印圖像經過一些通用的幾何變形和信號處理操作而產生比較明顯的變形後仍然能夠提取出一個可信賴的水印拷貝。一個簡單改進是不將水印嵌入到DCT域的低頻分量上,而是嵌入到中頻分量上以調節水印的頑健性與不可見性之間的矛盾。另外,還可以將數字圖像的空間域數據通過離散傅里葉變換(DFT)或離散小波變換(DWT)轉化為相應的頻域系數;其次,根據待隱藏的信息類型,對其進行適當編碼或變形;再次,根據隱藏信息量的大小和其相應的安全目標,選擇某些類型的頻域系數序列(如高頻或中頻或低頻);再次,確定某種規則或演算法,用待隱藏的信息的相應數據去修改前面選定的頻域系數序列;最後,將數字圖像的頻域系數經相應的反變換轉化為空間域數據。該類演算法的隱藏和提取信息操作復雜,隱藏信息量不能很大,但抗攻擊能力強,很適合於數字作品版權保護的數字水印技術中。
2. 零水印圖像演算法 MATLAB實現
有些錯誤,不知道你原來的意思是怎麼樣的
不過可以試著改一下
I=imread('C:UsersAdministratorDesktopdog.jpg');
ifndims(I)==3
X=rgb2gray(I);
end
[a1,h1,v1,d1]=dwt2(X,'sym8');
[a2,h2,v2,d2]=dwt2(a1,'sym8');
X0=double(a2);
%n=length(X0);這里你X0是矩陣,你應該是想獲得它元素的個數
n=numel(X0);%改成這樣n才是矩陣元素個數,X0的行或列沒有超過625個的
ifn>625%所以這個if裡面的語句都不執行,D1就沒有賦值,後面就報錯
KG1=randsample(n,625);
KG1=KG1';
D=X0(KG1(1,(1:625)));
KG2=randperm(625);
D1=D(KG2(1,(1:625)));
end
aver=(sum(D1(1:end)))/625;
fori=1:625
%ifD1(i)>aver
%D1(i)=1;
%else
%D1=0;這里也有錯應該改成這樣D1(i)=0;,不過後面的個for循環效率不高
%end
%end
%整個for循環就是讓D1中元素大於aver的置1,小於等於的置零,一句搞定
D1=D1>aver;
T=D1;
WM=reshape(T,25,25);
Imshow(WM,[]);
3. DCT域圖像數字水印演算法,新手,這個水印嵌入程序看不明白,誰能幫我把每條注釋下Q282092728,謝謝了
M=256;%原圖像長度
N=32;%水印圖像長度
K=8; %圖像分塊大小
I=zeros(M,M);%創建一個零矩陣,用於存放載體圖像
J=zeros(N,N); %創建一個零矩陣,用於存放水印圖像
BLOCK=zeros(K,K);%創建一個零矩陣,用於存放圖像分塊
%顯示水印圖像
subplot(1,8,2);
J=imread('14','bmp'); %讀入水印圖像
imshow(J); %顯示水印圖像
title('水印圖像');
%顯示原圖像
subplot(1,3,2);
I=imread('11','bmp'); %讀入原始圖像
imshow(I); %顯示原始圖像
title('原始公開圖像');
%嵌入水印
tem=1;%創建變數tem,沒用
for p=1:N%水印圖像行循環
for q=1:N%水印圖像列循環
x=(p-1)*K+1; %x為載體圖像行坐標
y=(q-1)*K+1; %y為載體圖像列坐標
BLOCK=I(x:x+K-1,y:y+K-1); %BLOCK為載體圖像I的分塊,分塊大小為K*K,
%初始值為I(0:K-1,0:K-1)
BLOCK=dct2(BLOCK);%對BLOCK進行二維DCT變換,得到新的BLOCK即%DCT系數矩陣BLOCK
if J(p,q)==0%如果水印圖像的第(p,q)個像素為0
a=-1;%嵌入參數為-1
else
a=1; %若如果水印圖像的第(p,q)個像素為1嵌入參數為1
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01); %對載體圖像的分塊的DCT系數矩陣
%BLOCK
BLOCK=idct2(BLOCK);%對DCT系數矩陣進行反變換,得到嵌入水印後的載體
%圖像分塊BLOCK
I(x:x+K-1,y:y+K-1)=BLOCK;%用嵌入水印後的圖像分塊BLOCK代替載體圖像
%的對應分塊
End%水印圖像列循環結束
End%水印圖像行循環結束
%顯示嵌入水印後的圖像
subplot(1,3,3);
imshow(I);%顯示嵌入水印後圖像
title('嵌入水印後的圖像');
imwrite(I,'embedded.bmp','bmp');%將嵌入水印後圖像寫成bmp文件
夠詳細吧,希望對你有用。
4. 幫我看看這個水印演算法屬於哪個演算法
基於LSB演算法的數字水印技術
5. 數字圖像水印演算法有哪些
有很多,dct,dwt,svd,mod.等等。。。。。
數字水印大分,頻域與空間嵌入法。
現,大多都用頻域嵌入。相關文章網上很多。
6. 什麼是水印演算法
數字水印(Digital Watermark)技術是將與多媒體內容相關或不相關的一些標示信息直接嵌入多媒體內容當中,但不影響原內容的使用價值,並不容易被人的知覺系統覺察或注意到。通過這些隱藏在多媒體內容中的信息,可以達到確認內容創建者、購買者,或者是否真實完整。數字水印是信息隱藏技術的一個重要研究方向。
作為數字水印技術基本上具有下面幾個方面的特點:
----安全性:數字水印的信息應是安全的,難以篡改或偽造,同時,應當有較低的誤檢測率,當原內容發生變化時,數字水印應當發生變化,從而可以檢測原始數據的變更;當然數字水印同樣對重復添加有有強的抵抗性
----隱蔽性:數字水印應是不可知覺的,而且應不影響被保護數據的正常使用;不會降質;
----魯棒性:是指在經歷多種無意或有意的信號處理過程後,數字水印仍能保持部分完整性並能被准確鑒別。可能的信號處理過程包括信道雜訊、濾波、數/模與模/數轉換、重采樣、剪切、位移、尺度變化以及有損壓縮編碼等。主要用於版權保護的數字水印易損水印(Fragile Watermarking),主要用於完整性保護,這種水印同樣是在內容數據中嵌入不可見的信息。當內容發生改變時,這些水印信息會發生相應的改變,從而可以鑒定原始數據是否被篡改。
----水印容量:嵌入的水印信息必須足以表示多媒體內容的創建者或所有者的標志信息,或購買者的序列號,這樣有利於解決版權糾紛,保護數字產權合法擁有者的利益。尤其是隱蔽通信領域的特殊性,對水印的容量需求很大。
數字水印的分類
----1.按特性劃分
----按水印的特性可以將數字水印分為魯棒數字水印和易損數字水印兩類。魯棒數字水印主要用於在數字作品中標識著作權信息,利用這種水印技術在多媒體內容的數據中嵌入創建者、所有者的標示信息,或者嵌入購買者的標示(即序列號)。在發生版權糾紛時,創建者或所有者的信息用於標示數據的版權所有者,而序列號用於追蹤違反協議而為盜版提供多媒體數據的用戶。用於版權保護的數字水印要求有很強的魯棒性和安全性,除了要求在一般圖象處理(如:濾波、加雜訊、替換、壓縮等)中生存外,還需能抵抗一些惡意攻擊。
----易損水印(Fragile Watermarking),與魯棒水印的要求相反,易損數字水印主要用於完整性保護,這種水印同樣是在內容數據中嵌入不可見的信息。當內容發生改變時,這些水印信息會發生相應的改變,從而可以鑒定原始數據是否被篡改。易損水印應對一般圖象處理(如:濾波、加雜訊、替換、壓縮等)有較強的免疫能力(魯棒性),同時又要求有較強的敏感性,即:既允許一定程度的失真,又要能將失真情況探測出來。必須對信號的改動很敏感,人們根據易損水印的狀態就可以判斷數據是否被篡改過。
----2.按水印所附載的媒體劃分
----按水印所附載的媒體,我們可以將數字水印劃分為圖像水印、音頻水印、視頻水印、文本水印以及用於三維網格模型的網格水印等。隨著數字技術的發展,會有更多種類的數字媒體出現,同時也會產生相應的水印技術。
----3.按檢測過程劃分
----按水印的檢測過程可以將數字水印劃分為明文水印和盲水印。明文水印在檢測過程中需要原始數據,而盲水印的檢測只需要密鑰,不需要原始數據。一般來說,明文水印的魯棒性比較強,但其應用受到存儲成本的限制。目前學術界研究的數字水印大多數是盲水印。
----4.按內容劃分
----按數字水印的內容可以將水印劃分為有意義水印和無意義水印。有意義水印是指水印本身也是某個數字圖像(如商標圖像)或數字音頻片段的編碼;無意義水印則只對應於一個序列號。有意義水印的優勢在於,如果由於受到攻擊或其他原因致使解碼後的水印破損,人們仍然可以通過視覺觀察確認是否有水印。但對於無意義水印來說,如果解碼後的水印序列有若干碼元錯誤,則只能通過統計決策來確定信號中是否含有水印。
----5.按用途劃分
----不同的應用需求造就了不同的水印技術。按水印的用途,我們可以將數字水印劃分為票證防偽水印、版權保護水印、篡改提示水印和隱蔽標識水印。
----票證防偽水印是一類比較特殊的水印,主要用於列印票據和電子票據、各種證件的防偽。一般來說,偽幣的製造者不可能對票據圖像進行過多的修改,所以,諸如尺度變換等信號編輯操作是不用考慮的。但另一方面,人們必須考慮票據破損、圖案模糊等情形,而且考慮到快速檢測的要求,用於票證防偽的數字水印演算法不能太復雜。
----版權標識水印是目前研究最多的一類數字水印。數字作品既是商品又是知識作品,這種雙重性決定了版權標識水印主要強調隱蔽性和魯棒性,而對數據量的要求相對較小。
----篡改提示水印是一種脆弱水印,其目的是標識原文件信號的完整性和真實性。
----隱蔽標識水印的目的是將保密數據的重要標注隱藏起來,限制非法用戶對保密數據的使用。
----6.按水印隱藏的位置劃分
----按數字水印的隱藏位置,我們可以將其劃分為時(空)域數字水印、頻域數字水印、時/頻域數字水印和時間/尺度域數字水印。
----時(空)域數字水印是直接在信號空間上疊加水印信息,而頻域數字水印、時/頻域數字水印和時間/尺度域數字水印則分別是在DCT變換域、時/ 頻變換域和小波變換域上隱藏水印。
----隨著數字水印技術的發展,各種水印演算法層出不窮,水印的隱藏位置也不再局限於上述四種。應該說,只要構成一種信號變換,就有可能在其變換空間上隱藏水印。
典型數字水印演算法
近年來,數字水印技術研究取得了很大的進步,下面對一些典型的演算法進行了分析,除特別指明外,這些演算法主要針對圖象數據(某些演算法也適合視頻和音頻數據)。
----空域演算法 該類演算法中典型的水印演算法是將信息嵌入到隨機選擇的圖像點中最不重要的像素位 (LSB:least significant bits)上,這可保證嵌入的水印是不可見的。但是由於使用了圖像不重要的像素位,演算法的魯棒性差,水印信息很容易為濾波、圖像量化、幾何變形的操作破壞。另外一個常用方法是利用像素的統計特徵將信息嵌入像素的亮度值中。
----Patchwork演算法 方法是隨機選擇N對像素點 (ai,bi) ,然後將每個ai點的亮度值加 1 ,每個bi點的亮度值減 1,這樣整個圖像的平均亮度保持不變。適當地調整參數,Patchwork方法對JPEG壓縮、FIR濾波以及圖像裁剪有一定的抵抗力,但該方法嵌入的信息量有限。為了嵌入更多的水印信息,可以將圖像分塊,然後對每一個圖像塊進行嵌入操作。
----變換域演算法 該類演算法中,大部分水印演算法採用了擴展頻譜通信 (spread spectrum communication)技術。演算法實現過程為:先計算圖像的離散餘弦變換 (DCT),然後將水印疊加到DCT域中幅值最大的前k系數上(不包括直流分量),通常為圖像的低頻分量。若DCT系數的前k個最大分量表示為D={ di },i=1 ,… ,k,水印是服從高斯分布的隨機實數序列W ={ wi },i=1 ,… ,k,那麼水印的嵌入演算法為di = di(1 + awi),其中常數a為尺度因子,控制水印添加的強度。然後用新的系數做反變換得到水印圖像I。解碼函數則分別計算原始圖像I和水印圖像I*的離散餘弦變換,並提取嵌入的水印W*,再做相關檢驗 以確定水印的存在與否。該方法即使當水印圖像經過一些通用的幾何變形和信號處理操作而產生比較明顯的變形後仍然能夠提取出一個可信賴的水印拷貝。一個簡單改進是不將水印嵌入到DCT域的低頻分量上,而是嵌入到中頻分量上以調節水印的頑健性與不可見性之間的矛盾。另外,還可以將數字圖象的空間域數據通過離散傅里葉變換(DFT)或離散小波變換(DWT)轉化為相應的頻域系數;其次,根據待隱藏的信息類型,對其進行適當編碼或變形;再次,根據隱藏信息量的大小和其相應的安全目標,選擇某些類型的頻域系數序列(如高頻或中頻或低頻);再次,確定某種規則或演算法,用待隱藏的信息的相應數據去修改前面選定的頻域系數序列;最後,將數字圖象的頻域系數經相應的反變換轉化為空間域數據。該類演算法的隱藏和提取信息操作復雜,隱藏信息量不能很大,但抗攻擊能力強,很適合於數字作品版權保護的數字水印技術中。
----壓縮域演算法 基於JPEG、MPEG標準的壓縮域數字水印系統不僅節省了大量的完全解碼和重新編碼過程,而且在數字電視廣播及VOD(Video on Demand)中有很大的實用價值。相應地,水印檢測與提取也可直接在壓縮域數據中進行。下面介紹一種針對MPEG-2壓縮視頻數據流的數字水印方案。雖然MPEG-2數據流語法允許把用戶數據加到數據流中,但是這種方案並不適合數字水印技術,因為用戶數據可以簡單地從數據流中去掉,同時,在MPEG-2編碼視頻數據流中增加用戶數據會加大位率,使之不適於固定帶寬的應用,所以關鍵是如何把水印信號加到數據信號中,即加入到表示視頻幀的數據流中。對於輸入的MPEG-2數據流而言,它可分為數據頭信息、運動向量(用於運動補償)和DCT編碼信號塊3部分,在方案中只有MPEG-2數據流最後一部分數據被改變,其原理是,首先對DCT編碼數據塊中每一輸入的Huffman碼進行解碼和逆量化,以得到當前數據塊的一個DCT系數;其次,把相應水印信號塊的變換系數與之相加,從而得到水印疊加的DCT系數,再重新進行量化和Huffman編碼,最後對新的Huffman碼字的位數n1與原來的無水印系數的碼字n0進行比較,只在n1不大於n0的時候,才能傳輸水印碼字,否則傳輸原碼字,這就保證了不增加視頻數據流位率。該方法有一個問題值得考慮,即水印信號的引入是一種引起降質的誤差信號,而基於運動補償的編碼方案會將一個誤差擴散和累積起來,為解決此問題,該演算法採取了漂移補償的方案來抵消因水印信號的引入所引起的視覺變形。
----NEC演算法 該演算法由NEC實驗室的Cox等人提出,該演算法在數字水印演算法中佔有重要地位,其實現方法是,首先以密鑰為種子來產生偽隨機序列,該序列具有高斯N(0,1)分布,密鑰一般由作者的標識碼和圖象的哈希值組成,其次對圖象做DCT變換,最後用偽隨機高斯序列來調制(疊加)該圖象除直流(DC)分量外的1000個最大的DCT系數。該演算法具有較強的魯棒性、安全性、透明性等。由於採用特殊的密鑰,因此可防止IBM攻擊,而且該演算法還提出了增強水印魯棒性和抗攻擊演算法的重要原則,即水印信號應該嵌入源數據中對人感覺最重要的部分,這種水印信號由獨立同分布隨機實數序列構成,且該實數序列應該具有高斯分布N(0,1)的特徵。
----生理模型演算法 人的生理模型包括人類視HVS(HumanVisualSystem)和人類聽覺系統HAS。該模型不僅被多媒體數據壓縮系統利用,同樣可以供數字水印系統利用。利用視覺模型的基本思想均是利用從視覺模型導出的JND(Just Noticeable Difference)描述來確定在圖象的各個部分所能容忍的數字水印信號的最大強度,從而能避免破壞視覺質量。也就是說,利用視覺模型來確定與圖象相關的調制掩模,然後再利用其來插入水印。這一方法同時具有好的透明性和強健性。
數字水印應用領域
隨著數字水印技術的發展,數字水印的應用領域也得到了擴展,數字水印的基本應用領域是版權保護、隱藏標識、認證和安全不可見通信。
當數字水印應用於版權保護時,潛在的應用市場在於電子商務、在線或離線地分發多媒體內容以及大規模的廣播服務。數字水印用於隱藏標識時,可在醫學、制圖、數字成像、數字圖像監控、多媒體索引和基於內容的檢索等領域得到應用。數字水印的認證方面主要ID卡、信用卡、ATM卡等上面數字水印的安全不可見通信將在國防和情報部門得到廣泛的應用。 多媒體技術的飛速發展和Internet的普及帶來了一系列政治、經濟、軍事和文化問題,產生了許多新的研究熱點,以下幾個引起普遍關注的問題構成了數字水印的研究背景。
----1.數字作品的知識產權保護
----數字作品(如電腦美術、掃描圖像、數字音樂、視頻、三維動畫)的版權保護是當前的熱點問題。由於數字作品的拷貝、修改非常容易,而且可以做到與原作完全相同,所以原創者不得不採用一些嚴重損害作品質量的辦法來加上版權標志,而這種明顯可見的標志很容易被篡改。
----「數字水印」利用數據隱藏原理使版權標志不可見或不可聽,既不損害原作品,又達到了版權保護的目的。目前,用於版權保護的數字水印技術已經進入了初步實用化階段,IBM公司在其「數字圖書館」軟體中就提供了數字水印功能,Adobe公司也在其著名的Photoshop軟體中集成了Digimarc公司的數字水印插件。然而實事求是地說,目前市場上的數字水印產品在技術上還不成熟,很容易被破壞或破解,距離真正的實用還有很長的路要走。
----2.商務交易中的票據防偽
----隨著高質量圖像輸入輸出設備的發展,特別是精度超過 1200dpi的彩色噴墨、激光列印機和高精度彩色復印機的出現,使得貨幣、支票以及其他票據的偽造變得更加容易。
----另一方面,在從傳統商務向電子商務轉化的過程中,會出現大量過度性的電子文件,如各種紙質票據的掃描圖像等。即使在網路安全技術成熟以後,各種電子票據也還需要一些非密碼的認證方式。數字水印技術可以為各種票據提供不可見的認證標志,從而大大增加了偽造的難度。
----3.證件真偽鑒別
----信息隱藏技術可以應用的范圍很廣,作為證件來講,每個人需要不只一個證件,證明個人身份的有:身份證、護照、駕駛證、出入證等;證明某種能力的有:各種學歷證書、資格證書等。
國內目前在證件防偽領域面臨巨大的商機,由於缺少有效的措施,使得「造假」、「買假」、「用假」成風,已經嚴重地干擾了正常的經濟秩序,對國家的形象也有不良影響。通過水印技術可以確認該證件的真偽,使得該證件無法仿製和復制。
----4.聲像數據的隱藏標識和篡改提示
----數據的標識信息往往比數據本身更具有保密價值,如遙感圖像的拍攝日期、經/緯度等。沒有標識信息的數據有時甚至無法使用,但直接將這些重要信息標記在原始文件上又很危險。數字水印技術提供了一種隱藏標識的方法,標識信息在原始文件上是看不到的,只有通過特殊的閱讀程序才可以讀取。這種方法已經被國外一些公開的遙感圖像資料庫所採用。
----此外,數據的篡改提示也是一項很重要的工作。現有的信號拼接和鑲嵌技術可以做到「移花接木」而不為人知,因此,如何防範對圖像、錄音、錄像數據的篡改攻擊是重要的研究課題。基於數字水印的篡改提示是解決這一問題的理想技術途徑,通過隱藏水印的狀態可以判斷聲像信號是否被篡改。
----5.隱蔽通信及其對抗
----數字水印所依賴的信息隱藏技術不僅提供了非密碼的安全途徑,更引發了信息戰尤其是網路情報戰的革命,產生了一系列新穎的作戰方式,引起了許多國家的重視。
----網路情報戰是信息戰的重要組成部分,其核心內容是利用公用網路進行保密數據傳送。迄今為止,學術界在這方面的研究思路一直未能突破「文件加密」的思維模式,然而,經過加密的文件往往是混亂無序的,容易引起攻擊者的注意。網路多媒體技術的廣泛應用使得利用公用網路進行保密通信有了新的思路,利用數字化聲像信號相對於人的視覺、聽覺冗餘,可以進行各種時(空)域和變換域的信息隱藏,從而實現隱蔽通信。
7. PS去水印的那個演算法怎麼理解
做水印就是為了保護版權,當然不會無條件的給你源文件了,所以談到去水印,肯定是要在合並後的成圖上去的,一般好像是框出水印的准確選區後慢慢調整色階完成的
8. 圖像水印的LSB演算法,VC++代碼
因為8位像素值的最低位為1或0對整個像素值影響不大,LSB就是把水印信息放入這個最低位,同時保證原始圖像基本無變化
void CDib::Embed()//嵌入
{
unsigned char bmdata;//BMP圖像數據
unsigned char efdata;//嵌入的文件數據
int t = 7;
int x[8];
int s[8];
int last_bit; //記錄位元組最低位本來的bit
for(UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
{ //生產隱藏信息,並逐步嵌入到宿主圖像各像素的最低位上
bmdata = *p;//p指向圖像數據的每個像素,把當前像素值給bmdata
for (int j = 0; j <= 7; j++) //計算各bit位
{
x[j] = bmdata & 1;//提出bmdata最低位放入x[j]
bmdata >>= 1;//右移一位
}
last_bit = x[0];//原始圖像的最低位值存入last_bit中
x[0] = x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];//使最低位值等於其他各位的異或
if (t == 7) //宿主圖片每走過八個位元組,計算一次s[]
{
efdata = *q;//q指向插入的水印數據
for (j = 0; j <= 7; j++)
{
s[j] = efdata & 1;//水印數據依次放入s[j]中
efdata >>= 1;//右移
}
}
x[0] ^= s[t];//隱藏信息,隱藏信息等於原圖像高六位的異或再和文件數據異或
if (last_bit == 0) //嵌入隱藏信息
{
*p |= x[0];//如果該像素原本最低位為0;則將最終得到的異或水印值放入原像素
}
else
{
*p &= 254 + x[0]; //如果該像素原本最低位為1;則將最終得到的異或水印值放入原像素
}
p++;//指向下一個像素
t--;//t用來定時每8個位元組插入一次完整的s
if (t == -1) //需要計算一次s[]
{
t = 7;
q++;//指向下一個作為待插入水印的文件數據
i2++;
}
}
}
void CDib::Pick()//提取
{
m_pFile = new unsigned char [embfile_size];//開辟等於插入文件數據大小的內存
unsigned char *q = m_pFile;//q指向該內存
unsigned char bmdata;//插入了水印的BMP圖像數據
int x[8];
int s[8];
int t = 7;
for (UINT i1 = 0, i2 = 0; i1 <= bitmap_size - 1, i2 <= embfile_size - 1; i1++)
{
bmdata = *p; //p指向插入了水印的圖像數據
for (int j = 0; j <= 7; j++) //計算各bit位
{
x[j] = bmdata & 1;//提取該圖像位元組的0~7位放入X[]數組
bmdata >>= 1;
}
s[t] = x[0] ^ x[1] ^ x[2] ^ x[3] ^ x[4] ^ x[5] ^ x[6] ^ x[7];//提取1~8個位元組中的s[]
t--;
if (t == -1) //s[7]到s[0]組成一個位元組
{
*q = s[7] * 128 + s[6] * 64 + s[5] * 32 + s[4] * 16 +
s[3] * 8 + s[2] * 4 + s[1] * 2 + s[0];//還原原始的圖像數據
t = 7;
i2++;
q++;
}
p++;//指向下一像素
}
}
9. 基於DCT數字水印演算法的Matlab實現源代碼
讀取圖片
讀取水印圖片(二維碼)
原圖片做成灰度
水印圖做成二值圖
原圖做8*8DCT處理
選擇DC成分以外的元素(每個8*8塊里選擇1個元素)
生成偽隨機亂數
根據亂數做成密鑰
將水印圖根據密鑰與演算法嵌入到第6步驟
嵌入後將每個元素替換原來的第6步元素
做反變換
圖片保存,嵌入完畢
提取
讀取嵌入水印後的圖片
生成嵌入時的偽隨機亂數(生成亂數之前可以加一些幾何攻擊)
根據亂數做成密鑰
嵌入水印後的圖片做8*8DCT處理
選擇DC成分以外的元素(選取跟原來嵌入時相同)
根據演算法與密鑰提取水印圖
提取的水印圖與原水印圖做比較
保存提取的水印圖,提取完畢
10. 數字水印和圖像處理
我是做隱寫的,是和水印並行的一種隱藏技術,對水印也有了解。
水印依據載體可以分成三種:音頻水印、圖像水印、視頻水印。圖像水印就是數字水印和圖像處理結合的圖像處理技術。多看水印方面的文章吧,文章從高校學校圖書館的電子資源里可以免費下載。建議先看一些中文、英文關於水印概況介紹的文章,然後再看最近一些流行的水印演算法。總之,沒有幾十篇論文的積累,你對水印還是不夠了解。
想做畢業設計,先從讀論文開始。等理解了什麼是水印,並對當前流行的演算法了解了。你自己可以試著對這些演算法做一些符合你自己想法的改進,從新設計一種演算法,一般就可以完成你的畢業設計了。
個人一點拙見,僅作參考。