當前位置:首頁 » 操作系統 » 圖像水印演算法

圖像水印演算法

發布時間: 2024-02-06 00:44:06

Ⅰ 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文件
夠詳細吧,希望對你有用。

Ⅱ 基於餘弦變換的數字圖像水印演算法有什麼特點

典型數字水印演算法
近年來,數字水印技術研究取得了很大的進步,下面對一些典型的演算法進行了分析,除特別指明外,這些演算法主要針對圖像數據(某些演算法也適合視頻和音頻數據)。
空域演算法
該類演算法中典型的水印演算法是將信息嵌入到隨機選擇的圖像點中最不重要的像素位 (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)轉化為相應的頻域系數;其次,根據待隱藏的信息類型,對其進行適當編碼或變形;再次,根據隱藏信息量的大小和其相應的安全目標,選擇某些類型的頻域系數序列(如高頻或中頻或低頻);再次,確定某種規則或演算法,用待隱藏的信息的相應數據去修改前面選定的頻域系數序列;最後,將數字圖像的頻域系數經相應的反變換轉化為空間域數據。該類演算法的隱藏和提取信息操作復雜,隱藏信息量不能很大,但抗攻擊能力強,很適合於數字作品版權保護的數字水印技術中。

Ⅲ 水印演算法的分類

1.空域演算法 2.Patchwork演算法 3.變換域演算法
4.壓縮域演算法 5.NEC演算法 6.生理模型演算法

詳細的:
空域演算法:該類演算法中典型的水印演算法是將信息嵌入到隨機選擇的圖像點中最不重要的像素位 (LSB:least significant bits)上,這可保證嵌入的水印是不可見的。但是由於使用了圖像不重要的像素位,演算法的魯棒性差,水印信息很容易為濾波、圖像量化、幾何變形的操作破壞。另外一個常用方法是利用像素的統計特徵將信息嵌入像素的亮度值中。

這里還有很多關於水印的,有興趣的可以去看看(找了很久的)
http://digi.it.sohu.com/s2006/zbqd/

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)描述來確定在圖象的各個部分所能容忍的數字水印信號的最大強度,從而能避免破壞視覺質量。也就是說,利用視覺模型來確定與圖象相關的調制掩模,然後再利用其來插入水印。這一方法同時具有好的透明性和強健性。

Ⅳ 基於Arnold置亂的數字水印圖像加密演算法的設計,基於Matlab語言編程,完成Arnold置亂演算法,並用Matlab GUI工

clc
clear all;
iTimes=10; %置亂次數
% 讀入水印圖像
file_name='3232水印.bmp';
message=double(imread(file_name));
%水印圖像矩陣的行數與列數
Mm=size(message,1);
Nm=size(message,2);
%對水印圖像進行arnold置亂
if Mm~=Nm
error('水印矩陣必須為方陣');
end
if Mm~=90
error('必須為90*90大小,或者修改置亂次數');
end
tempImg=message; %圖像矩陣賦給tempImg
for n=1:iTimes %置亂次數
for u=1:Mm
for v=1:Nm
temp=tempImg(u,v);
ax=mod((u-1)+(v-1),Mm)+1; %新像素行位置
ay=mod((u-1)+2*(v-1),Nm)+1; %新像素列位置
outImg(ax,ay)=temp;
end
end
tempImg=outImg;
end
% 顯示水印,嵌入水印圖像與原始圖像
figure(1)
subplot(1,3,1);
imshow(message,[]);
title('原始水印');
subplot(1,3,2)
imshow(outImg,[]);
title('置亂水印');
% arnold反置亂
message_arnold=tempImg;
iTimes1=60-iTimes
%置亂後水印圖像矩陣的行數與列數
Mo=size(outImg,1);
No=size(outImg,2);
for n=1:iTimes1 % 次數
for u=1:Mo
for v=1:No
temp1=tempImg(u,v);
bx=mod((u-1)+(v-1),Mo)+1;
by=mod((u-1)+2*(v-1),No)+1;
outImg1(bx,by)=temp1;
end
end
tempImg=outImg1;
end
message=outImg1;
% 顯示反置亂後水印
%figure(3)
%subplot(1,3,1);
%imshow(message_arnold,[]);
%title('提取的置亂水印');
subplot(1,3,3);
imshow(message,[]);
title('反置亂(恢復)水印');
%subplot(1,3,3);
%imshow(orig_watermark,[])
%title('原始水印')

gui 自己學學吧 matlab中文論壇 gui板塊

Ⅳ 數字水印的水印演算法

近年來,數字水印技術研究取得了很大的進步,下面對一些典型的演算法進行了分析,除特別指明外,這些演算法主要針對圖像數據(某些演算法也適合視頻和音頻數據)。 該類演算法中,大部分水印演算法採用了擴展頻譜通信(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)轉化為相應的頻域系數;其次,根據待隱藏的信息類型,對其進行適當編碼或變形;再次,根據隱藏信息量的大小和其相應的安全目標,選擇某些類型的頻域系數序列(如高頻或中頻或低頻);再次,確定某種規則或演算法,用待隱藏的信息的相應數據去修改前面選定的頻域系數序列;最後,將數字圖像的頻域系數經相應的反變換轉化為空間域數據。該類演算法的隱藏和提取信息操作復雜,隱藏信息量不能很大,但抗攻擊能力強,很適合於數字作品版權保護的數字水印技術中。
1. 基於離散餘弦變換的數字水印
最早的基於分塊DCT水印技術出現於E Koch,J Zhao的文獻。針對靜止圖像和視頻壓縮標准(JPEG和MPEG),他們的水印方案中圖像也被分成8×8的塊,由一個密鑰隨機的選擇圖像的一些分塊,在頻域的中頻上稍微改變一個三元組以隱藏二進序列信息。選擇在中頻分量編碼是因為在高頻編碼易於被各種信號處理方法破壞,而在低頻編碼則由於人的視覺對低頻分量很敏感,對低頻分量的改變易於被察覺。未經授權者由於不知道水印嵌入的區域,因此是很難測出水印的,此外,該水印演算法對有損壓縮和低通濾波是魯棒的。將圖像分割成8×8塊,並對每個塊做DCT變換,然後隨機選擇構造所有塊的一個子集,對子集的每一個塊,選擇一組頻率並嵌入二進制水印信息。由於頻率組的選擇不是基於最顯著分量,並且頻率系數的方差較小,因此該方法對雜訊、幾何變形以及多文檔攻擊比較敏感。
Cox等人於1995年提出了基於圖像全局變換的水印方法,稱之為擴頻法。這也是目前大部分變換域水印演算法中所用到的技術。它將滿足正態分布的偽隨機序列加入到圖像的DCT變換後視覺最重要系數中,利用了序列擴頻技術(SS)和人類視覺特性(HVS)。演算法原理為先選定視覺重要系數,再進行修改,最常用的嵌入規則如下:
其中分別是修改前和修改後的頻域系數,α是縮放因子,是第i個信息位水印。
一般說來,乘法准則的抗失真性能要優於加法准則。水印的檢測是通過計算相關函數實現的。從嵌入水印的圖像中提取出是嵌入規則的逆過程,把提取出來的水印與原水印作相似性運算,與制定的閾值比較,可確定是否存在水印。這是穩健性水印的奠基性演算法。
Chiou-Ting Hsu等人提出一種基於分塊DCT的水印,他們的水印是可辨識的圖像,而不是簡單的一個符號或一個隨機數。通過有選擇地修改圖像的中頻系數來嵌入水印。驗證時,衡量提取出的水印同原水印之間的相似性來判斷是否加入了水印
2. 基於離散小波變換的數字水印
與傳統的DCT變換相比,小波變換是一種變解析度的,將時域與頻域相聯合的分析方法,時間窗的大小隨頻率自動進行調整,更加符合人眼視覺特性。小波分析在時、頻域同時具有良好的局部性,為傳統的時域分析和頻域分析提供了良好的結合[6]。
目前,小波分析已經廣泛應用於數字圖像和視頻的壓縮編碼、計算機視覺、紋理特徵識別等領域。由於小波分析在圖像處理上的許多特點可用於信息隱藏的研究,所以這種分析方法在信息隱藏和數字水印領域的應用也越來越受到廣大研究者的重視,目前已經有很多比較典型的基於離散小波變換的數字水印演算法。
除了上述有代表性的變換域演算法外,還有一些變換域水印演算法,它們中有相當一部分是上述演算法的改進及發展。
總的來說,與空域的方法相比,變換域的方法具有如下優點:
(1) 在變換域中嵌入的水印信號能量可以分布到空域的所有像素上,有利於保證水印的不可見性;
(2) 在變換域,人類視覺系統(HVS) 的某些特性(如頻率掩蔽特性)可以更方便地結合到水印編碼過程中,因而其隱蔽性更好;
(3) 變換域的方法可與國際數據壓縮標准兼容,從而易實現在壓縮域(compressed domain) 內的水印演算法,同時也能抵抗相應的有損壓縮。 人的生理模型包括人類視HVS(HumanVisualSystem)和人類聽覺系統HAS。該模型不僅被多媒體數據壓縮系統利用,同樣可以供數字水印系統利用。利用視覺模型的基本思想均是利用從視覺模型導出的JND(Just Noticeable Difference)描述來確定在圖像的各個部分所能容忍的數字水印信號的最大強度,從而能避免破壞視覺質量。也就是說,利用視覺模型來確定與圖像相關的調制掩模,然後再利用其來插入水印。這一方法同時具有好的透明性和強健性。

Ⅵ 數字圖像水印演算法有哪些

有很多,dct,dwt,svd,mod.等等。。。。。
數字水印大分,頻域與空間嵌入法。
現,大多都用頻域嵌入。相關文章網上很多。

Ⅶ 圖像水印的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++;//指向下一像素
}

}

熱點內容
腳本六要素 發布:2024-11-28 19:41:07 瀏覽:985
linuxoralce 發布:2024-11-28 19:39:51 瀏覽:607
4k存儲量 發布:2024-11-28 19:39:36 瀏覽:824
php動態鏈接 發布:2024-11-28 19:34:16 瀏覽:150
手機上的安卓系統在哪裡看 發布:2024-11-28 19:29:06 瀏覽:788
空調外機壓縮機聲音大 發布:2024-11-28 19:27:28 瀏覽:312
中國密碼箱哪裡的好 發布:2024-11-28 19:23:01 瀏覽:309
低配伺服器如何搭建網站 發布:2024-11-28 19:08:46 瀏覽:923
zenly為什麼不能下載安卓機 發布:2024-11-28 18:59:05 瀏覽:295
怎麼把輔助放入伺服器 發布:2024-11-28 18:53:06 瀏覽:598