?? dwt1_recover.m
字號:
%DWT源碼
%提取源碼
clear all;
% 保存開始時間
start_time=cputime;
blocksize=8; % 設置塊的大小
% 讀入嵌入水印圖像
file_name='dwt_watermarked.bmp';
watermarked_image=double(imread(file_name));
% 嵌入水印圖像的行數與列數
Mw=size(watermarked_image,1); %嵌入水印圖像的行數
Nw=size(watermarked_image,2); %嵌入水印圖像的列數
% 最大嵌入信息量
max_message=Mw*Nw/(blocksize^2);
% 讀入原始水印
file_name='c.bmp';
orig_watermark=double(imread(file_name));
% 原始水印的行數與列數
Mo=size(orig_watermark,1); %原始水印的行數
No=size(orig_watermark,2); %原始水印的列數
% 將圖像分塊提取水印
x=1;
y=1;
h=waitbar(0,'水印提取中,請等待');
for (kk = 1:max_message)
% 對塊進行dwt變換
[cA1,cH1,cV1,cD1] = dwt2(watermarked_image(x:x+blocksize-1,y:y+blocksize-1),'haar');
% 如果cD1(2,2) > cD1(3,3) 那么 message_vector(kk)=0
% 否則 message_vector(kk)=1
if cD1(2,2)>cD1(3,3)
message_vector(kk)=0;
else
message_vector(kk)=1;
end
% 移動到下一塊
if (x+blocksize) >= Mw
x=1;
y=y+blocksize;
else
x=x+blocksize;
end
waitbar(kk/max_message,h);
end
close(h);
% 將message重新排列
message_vector=message_vector(1,1:Mo*No); %%只需前Mo*No個
message=reshape(message_vector,Mo,No);
% 顯示運行時間
elapsed_time=cputime-start_time,
% 顯示提取水印與原始水印
figure(3)
subplot(1,2,1);
imshow(message,[]);
title('提取水印')
subplot(1,2,2);
imshow(orig_watermark,[])
title('原始水印');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -