❶ dwt數字水印中頻嵌入位置 誰能告訴我下,是進行3層小波變換的。怎麼嵌入啊。。。
中頻你所說的,其實就是對dwt小波的相關系統的大小 ,是中間的那些值,也可以是對圖像進行3層分解後的,選擇第2次分解中的得到的值,一般人們會把信息嵌入到後者之中,方法:就是對你的水印進行量化,新系數=原系數+a*水印量化值;
有什麼問題在問我。
❷ 基於DCT域數字水印有幾種方法 , 基於小波域數字水印方法有幾種
DCT域水印演算法
基於DCT的水印演算法的最大優點就是其與國際壓縮標准(JPEG}MPEG,H.261/263)兼容,
水印的嵌入和檢測都能夠在數據的壓縮域中直接進行。但在壓縮域中直接進行水印嵌入和
檢測所帶來的問題是:在量化後的DCT系數上添加的水印(系數的變換)可能在解壓縮的過
程中被放大,從而引起水印和圖像的失真。好的水印演算法必須綜合水印的嵌入和圖像壓縮
技術使失真維持到最小。
Cox等提出在圖像全局DCT變換域中除Dc分量外系數幅值最大的n個系數中嵌入水印信
息,由於圖像的主要能量均集中在圖像低頻區域(故低頻區域具有較大的系數幅值),因此
相當於在圖像的重要分量中嵌入水印信息。另一方面,人類視覺系統對圖像的低頻、高頻
能量比較敏感,而對圖像的高頻區域變化不敏感,一般的處理都保留圖像的重要分量(低
頻區域),而改變非重要分量(高頻區域),所以水印信息對圖像處理的魯棒性較好。
目前,大部分的DCT水印方法採用的是基於DCT的8x8圖像塊。E.Koch和J.Zhao從所有
圖像塊中隨機選取一系列圖像塊,對其進行8x8分塊DCT變換,然後將二進制的水印序列添
加到變換矩陣的中頻系數來實現水印的嵌入,同時他們在水印嵌入時引入了密鑰機制,實
現了水印技術與密碼技術的結合:A.GBors和I.Pitas基於高斯網狀分類器來抽取圖像塊,
採用兩種方法來添加水印。一種是通過在選定圖像塊的DCT變換的中頻系數中添加線性限
制來加入水印:另一種是在DCT系數中定義一個固定的圓形區域來進行水印嵌入,這種方法
不需要原始圖像就可以進行水印的檢測。
C.T.Hsu和J.L.wu等071利用可視化模型,在8x8分塊DCT系數中按Zig—Zag掃描順序選擇
4x4個中頻系數組成小塊,通過比較相鄰兩個小中頻系數塊中相應位置上系數的大小進行
標志圖像水印的嵌入。Bami等從整幅圖像的DCT系數中選擇中頻系數作為水印的嵌入位置。
這些演算法選擇DCT的中頻或低頻系數對水印的不可見性和魯棒性加以折衷,難以抵抗
壓縮編碼及其他一些圖像處理的攻擊,而且水印的不可見性極大的依賴於不同圖像的特
性。並且他們無一例外地將Dc分量排除在外。黃繼武等指出DC分量比任何AC分量都具有更
大的感覺容量,從魯棒性出發,Dc分量最適合用來嵌入水印,結合圖像照度掩蔽特性和紋
理掩蔽特性可得到不可見性和魯棒性較好的水印演算法。
dwt水印演算法
自從小波技術成為MPEG-4及JPEG--2000壓縮標準的核心技術以來,基於小波域的水印
演算法越來越多。在小波域嵌入水印的原因是:可以防止由於JPEG-2000有損壓縮而造成的水
印消除:可以利用信源編碼領域對圖像失真的可見性研究成果來控制水印的嵌入位置和強
度:可以實現在壓縮域直接嵌入水印。此外,利用小波多解析度分析可以更好地控制水印
在宿主圖像中的分布,更好地解決魯棒性和可見性之間的矛盾。
❸ 求matlab代碼 要求基於DWT的數字水印嵌入 水印為二維碼 要求水印嵌入提取 並且壓縮 剪切 加噪後再提取
clc
[a type]=myfunction(0.7,0);/a嵌入強度,type攻擊類型
x=imread('E:\ori1.bmp');
subplot(2,3,1);
image(x);
title('初始待加入水印圖像');
w=imread('E:\water1.bmp');
subplot(2,3,2);
imshow(w);
title('待用水印圖像');
w=w/255;
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 對原始圖像x進行小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
[width,height,cnums]=size(w);% w為水印序列
for i=1:width
for j=1:height
waterdata(i,j)=double(cD3(i,j))+a*double(w(i,j));
end
end
cD3=waterdata;
X3=idwt2(cA3,cH3,cV3,cD3,'db1'); % 小波反變換,重構圖像
X2=idwt2(X3,cH2,cV2,cD2,'db1');
Y=idwt2(X2,cH1,cV1,cD1,'db1');
subplot(2,3,3);
image(Y); % 顯示水印結果圖像
title('加入水印後的圖像');
if type==0
A='無攻擊'
Y=Y;
end
if type==1
A='放大2倍後的圖像'
%(1)放大兩倍的操作,(當然提取之前要先縮小兩倍)
xxx1=imresize(Y,2,'bicubic');
xxx2=imresize(xxx1,1/2,'bicubic');
Y= double(xxx2);
end
if type==2
%(2)縮1/2
A='縮1/2的圖像'
xxx1=imresize(Y,2/4,'bicubic');
xxx2=imresize(xxx1,4/2,'bicubic');
Y= double(xxx2);
end
%(3) 3×3空域低通濾波
if type==3
A='3×3空域低通濾波攻擊'
B=(1/9)*ones(3,3);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(4) 4領域平均
if type==4
A='4領域平均攻擊'
B=[0 1 0;1 0 1;0 1 0]*(1/4);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(5) 3*3窗口中值濾波:
if type==5
A='3*3窗口中值濾波攻擊'
xxx2=medfilt2(Y);%默認3*3
Y= double(xxx2);
end
%%(6)裁減1/16
if type==6
A='裁減1/16攻擊'
for i=128-44:128+45
for j=128-45:128+44
Y(i,j)=0;
end
end
Y=double(Y);
end
%(7) 高斯雜訊的情況
if type==7
A='高斯雜訊攻擊 強度=0.01'
Y=imnoise(uint8(round(Y)),'gaussian',0,0.01);
end
%(8) JPEG壓縮
if type==8
A='JPEG壓縮,強度=10'
imwrite(uint8(round(Y)),'jpeg_n.jpg','jpg','Quality',10);%按壓縮因子Quality的比例,將J2壓縮到jpeg_n.jpg中。
[Y,map]=imread('jpeg_n.jpg','jpg');
end
%(9) 其他為無攻擊
if type>8
A='無攻擊'
Y=Y;
end
subplot(2,3,4);
image(Y); % 顯示攻擊後水印結果圖像
title(A);
% 水印提取部分
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 對原始圖像進行三級小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
olddata=cD3;
[ccA1,ccH1,ccV1,ccD1]=dwt2(Y,'haar');% 對含水印圖像進行三級小波分解
[ccA2,ccH2,ccV2,ccD2]=dwt2(ccA1,'haar');
[ccA3,ccH3,ccV3,ccD3]=dwt2(ccA2,'haar');
[width,height]=size(ccD3);
newdata=ccD3;
waterdata=zeros(width,height);
for i=1:width
for j=1:height
watermark(i,j)=(double(newdata(i,j))-double(olddata(i,j)))/a; %提取演算法
end
end
watermark=watermark*255;
subplot(2,3,5);
imshow(watermark);
title('提取結果');
原圖像512*512 水印64*64
函數聲明為function [a type]=myfunction(a,type)
❹ 幫忙解釋一段基於DWT的數字水印的MATLAB代碼
a是把圖像做小波分解後的低頻分量再做一次小波分解的結果。
c是把a中的高頻分量減掉a的平均值得到的結果。這樣減的目的是使得c中的數值相對於0基本保持平均。
s是c中數值的幾何平均值,其目的是根據圖像的特點,達到自適應的嵌入強度。
C就是把c加了水印的系數了。
同志,在這里能碰到搞水印的真是不容易啊……
以上。
專業路過的老狼
❺ 請問基於DWT的圖像數字水印演算法和基於DCT的圖像數字水印演算法哪個簡單點
DCT 比較流行而且演算法比較簡單
❻ matlab DWT數字水印程序
首先,不知道你會不會用Matlab。如果,你會用,應該有一個簡單的DWT水印嵌入程序了。
讀取圖片,DWT變換著都不用說了吧?
有個不太明白的地方,就是,預處理是在什麼時候做?在原圖片上做完後,在做DWT變換後嵌入?
那麼,這個字元串的信息量與原圖信息量一樣多。水印效果就。。。。。。
如果要嵌入,也要與原圖一樣,做DWT變換。不然,嵌入信息太多了。如果這樣做了,就和後一種嵌入方法一樣了。
也就是,先做DWT變換,假設最後DWT變換後的4個圖片為A,B,C,D.
A圖不動,B和C可嵌入,D圖壓縮就沒了.所以,A圖做直方圖處理,然後與水印一起嵌入到,B和C圖.
你要求裡面,直方圖壓縮到[N,255-N]。N=G/2;?
直方圖灰度范圍[N,255-N],我們設定:
Oimg=A圖;
WMKimg=水印;
Zimg=直方圖調整後的圖片;%%也就是說,色數范圍是[N,255-N].
也就是說,[0,255]的圖片,現在要用[N,255]的灰色度來顯示。(這個直方圖變化直接可以做出來)
分析到這里之後,就比較容易了。
Wimg=Oimg與Zimg差值矩陣。
然後,Wimg和WMKimg按照隨機密鑰做處理,嵌入就可以了
最上面的是A圖.
❼ matlab編程實現一種簡單的數字水印嵌入與提取方法
DCT嵌入水印圖片與DWT是擦不多的。在Matlab上直接用函數的話值是一樣的,應該說DWT包含DCT。下面我說一下嵌入過程,程序就不寫了。網上很多的。給你一個嵌入思路。
DWT方法。原圖大小為(512,512)嵌入圖片大小為(64,64)
嵌入:
讀取原圖片。
讀取水印圖片。
原圖片要處理為灰圖。
水印圖片要處理為2值圖。
生成偽隨機亂數(記住是怎麼生成的,提取時用到)。
隨機亂數做成2值圖K與水印圖生成密鑰WK的2值圖(方法有很多種)。
原圖片做3次DWT處理(Matlab里函數是dwt2)得到圖片DA,DB,DC,DD。
取出DB或DC,或者DB,DC都用上,設一個嵌入強度Q,與密鑰K一起嵌入到DB,DC中(方法有很多種)。
將嵌入後的DB,DC與沒有嵌入的DA,DD一起(DA,DB,DC,DD順序不要錯了)進行反DWT處理。
得到嵌入水印後的圖片進行保存。
提取:
讀取嵌入水印後的圖片。
嵌入水印後的圖片做3次DWT,並得到DA,DB,DC,DD。
定義Q(嵌入時的強度,比如5)。
生成嵌入水印時的偽隨機亂數並做成2值圖K。
取出,嵌入水印的成分(嵌入到DB的話取出DB,兩個都用了就兩個都取出,在這里用DB代替)。
進行嵌入時的反計算。
提取後的水印圖片進行保存。
❽ 一種基於DWT的非自適應數字水印演算法及其MATLAB實現
你這個很簡單啊,提取時有原始圖像,在圖片在網上搜索《lena圖像》應該能搜到。
至於水印圖,自己可以用畫圖工具,做一個32x32的,在matlab上處理一下做成2值圖。
至於代碼部分,開始段,[cA1,cH1,cV1,cD1]=dwt2(x,'db1') % x 是原圖處理過的灰度圖。
這就沒什麼了啊。已經都告訴你了。
流程是這樣的。
嵌入過程:
讀取原圖。
對原圖做灰度處理。
讀取水印。
對水印圖做2值處理。
對灰度圖做3次DWT。
設置嵌入強度。
根據嵌入演算法將水印嵌入到需要的部分。
將嵌入後的部分,替換原來的部分後做IDWT。
提取過程:
讀取原圖,做3次DWT。
讀取嵌入水印的圖片,做3次DWT。
取出原來嵌入的部分,和原圖為嵌入的部分根據演算法提取水印。
大體是這樣,奉勸你一句,不要抄他的,這個演算法很小白,抄也要抄有前途的啊。這個很白痴啊。嵌入水印在[cA3,cH3,cV3,cD3]中,哪有嵌入到cD3中的?白痴啊。一般選擇嵌入也是選中間的cH3或cV3或這兩個都選。還有,提取時還需要原圖片,很無語了,需要原圖片還需要做什麼別的演算法嗎?簡單的加減乘除就搞定了。裡面還添加了for運算,matlab里for的運算速度是最慢了。