?? globaladaptive.m
字號:
%文件名:globaladaptive.m
%程序員:郭遲
%編寫時間:2004.4.7
%函數功能:本函數將完成Watson模型下全局自適應水印
%輸入格式舉例:[result,alf]=globaladaptive('c:\lenna.jpg',0.1,1983,'c:\wm.jpg')
%參數說明:
%image為輸入原始圖像
%equal為期望的感知質量
%seed為隨機數種子
%goal為結果存放的地址
%result為加有水印的結果
%alf為求得的全局強度
function [imagergb,alf]=globaladaptive(image,equal,seed,goal)
%讀取圖像做DCT變換
imagergb=imread(image);
imagergb=double(imagergb);
imagergb1=imagergb;%求基本誤差時使用
imagergb2=imagergb/255;%顯示時使用
r=imagergb(:,:,1);%往R層加水印
T=dctmtx(8);
DCTcoef=blkproc(r,[8 8],'P1*x*P2',T,T');
%生成長度為64的高斯隨機數作為水印模板
rand('seed',seed);
wm=randn(1,64);
%調用子函數,給圖像加α為1時的水印
fun=@wmadd;
result=blkproc(DCTcoef,[8 8],fun,wm,1);
%DCT反變換
T=dctmtx(8);
r=blkproc(result,[8 8],'P1*x*P2',T',T);
imagergb1(:,:,1)=r;
imagergb1=imagergb1/255;%結果歸一化才能存儲
imwrite(imagergb1,'temp.jpg');
%計算α為1時的感知誤差
basic=watsondistorsion(image,'temp.jpg');
disp('(α為1時的基本誤差)');
%計算全局強度因子α
alf=equal/basic;
%正式加水印
fun=@wmadd;
result=blkproc(DCTcoef,[8 8],fun,wm,alf);
T=dctmtx(8);
r=blkproc(result,[8 8],'P1*x*P2',T',T);
imagergb(:,:,1)=r;
imagergb=imagergb/255;%結果歸一化才能存儲
imwrite(imagergb,goal);
imagergb=double(imread(goal))/255;
watsondistorsion(image,goal);
disp('(α經過適應后的感知誤差)');
%輸出結果
disp(['全局強度因子α=',num2str(alf)]);
subplot(121),imshow(imagergb2),title('原始圖像');
subplot(122),imshow(imagergb),title(['加有水印強度α=',num2str(alf),'的圖像']);
%---------------------------------
function block=wmadd(test,wm,alf)
zigdone=zigzag(test,1);%zigzag排列
for i=3:8
for j=1:8
zigdone(i,j)=zigdone(i,j)+alf*(wm((i-1)*8+j));%低頻系數是不加水印的
end
end
block=zigzag(zigdone,2);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -