⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dwt1_recover.m

📁 利用matlab实现的基于离散小波变换的数字水印代码
💻 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 + -