-
大小: 472KB文件类型: .rar金币: 2下载: 1 次发布日期: 2021-04-12
- 语言: Matlab
- 标签: watermarking 数字水印 小波变换 matlab
资源简介
基于小波变换的数字水印算法matlab代码,含有各种攻击的效果对比,对做毕设的同学应该有帮助
代码片段和文件信息
clc
clear all;
k=20;
blocksize=8; % 设置块的大小
% 读入原图像
file_name=‘_lena_std_bw.bmp‘;
cover_object=double(imread(file_name));
% 原图像的行数与列数
Mc=size(cover_object1); %原图像行数
Nc=size(cover_object2); %原图像列数
% 最大嵌入信息量
max_message=Mc*Nc/(blocksize^2);
% 读入水印图像
file_name=‘c.bmp‘;
message=double(imread(file_name));
%%水印图像的行数与列数
Mm=size(message1); %水印行数
Nm=size(message2); %水印列数
message_vector=reshape(message1Mm*Nm);
% 检查水印信息是否过大
if (Mm*Nm> max_message)
error(‘水印太大‘)
end
% 产生watermarked_image并写入原图信息
watermarked_image=cover_object;
% 将图像分块嵌入
% 当 (22) > (23) 且 message_pad(kk)=0
% 当 (22) < (23) 且 message_pad(kk)=1
%%在提取水印时,如果cD1(22)>cD1(23)便是嵌入了水印的黑色像素,
%%反之则是嵌入了白色像素
x=1;
y=1;
h=waitbar(0‘嵌入水印,请等待‘);
for (kk = 1:length(message_vector))
% 对块进行DWT变换
[cA1cH1cV1cD1] = dwt2(cover_object(x:x+blocksize-1y:y+blocksize-1)‘haar‘);
% 如果 message_pad(kk)== 0
if (message_vector(kk) == 0)
% 且(22) < (23) ,交换它们
if (cD1(22) < cD1(23))
temp=cD1(23);
cD1(23)=cD1(22);
cD1(22)=temp;
end
% 如果message_pad(kk) == 1
elseif (message_vector(kk) == 1)
% 且(22) > (23) ,交换它们
if (cD1(22) >= cD1(23))
temp=cD1(23);
cD1(23)=cD1(22);
cD1(22)=temp;
end
end
% 检查(22) , (23)的差是否>= k
if cD1(22) > cD1(23)
if cD1(22) - cD1(23) < k
cD1(22)=cD1(22)+(k/2);
cD1(23)=cD1(23)-(k/2);
end
else
if cD1(23) - cD1(22) < k
cD1(23)=cD1(23)+(k/2);
cD1(22)=cD1(22)-(k/2);
end
end
%IDWT
watermarked_image(x:x+blocksize-1y:y+blocksize-1)= idwt2(cA1cH1cV1cD1‘haar‘[McNc]);
% 移动到下一块
if (x+blocksize) >= Nc
x=1;
y=y+blocksize;
else
x=x+blocksize;
end
waitbar(kk/length(message_vector)h);
end
close(h);
% 转换为uint8并写入dwt_watermarked.bmp
watermarked_image_uint=uint8(watermarked_image);
imwrite(watermarked_image_uint‘dwt_watermarked.bmp‘‘bmp‘);
% 计算psnr值
psnr=psnr(cover_objectwatermarked_image)
% 显示图像
%figure(1)
%imshow(message[]);
%title(‘水印‘);
figure(2)
subplot(121);
imshow(watermarked_image[])
title(‘嵌入水印图像‘)
subplot(122);
imshow(cover_object[]);
title(‘原图‘);
%提取源码
clear all;
blocksize=8; % 设置块的大小
% 读入嵌入水印图像
file_name=‘dwt_watermarked.bmp‘;
watermarked_image=double(imread(file_name));
% 嵌入水印图像的行数与列数
Mw=size(watermarked_image1); %嵌入水印图像的行数
Nw=size(watermarked_image2); %嵌入水印图像的列数
% 最大嵌入信息量
max_message=Mw*Nw/(blocksize^2);
% 读入原始水印
file_name=‘c.bmp‘;
orig_watermark=double(imread(file_name));
% 原始水印的行数与列数
Mo=size(orig_watermark1); %原始水印的行数
No=size(orig_watermark2); %原始水印的列数
% 将图像分块提取水印
x=1;
y=1;
h=waitbar(0‘水印提取中,请等待‘);
for (kk = 1:max_message)
% 对块进行dwt变换
[cA1cH1cV1cD1] = dwt2(watermarked_im
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 263222 2009-04-03 14:02 算法代码\attack.bmp
文件 14877 2008-05-28 12:51 算法代码\attackf.jpg
文件 574 2008-05-23 15:33 算法代码\c.BMP
文件 969 2008-05-23 15:26 算法代码\c.jpg
文件 190 2008-05-23 15:31 算法代码\d.BMP
文件 7205 2008-05-27 23:54 算法代码\dwt.asv
文件 7172 2008-05-30 10:18 算法代码\dwt.m
文件 263222 2009-04-03 14:01 算法代码\dwt_watermarked.bmp
文件 44465 2008-05-23 14:58 算法代码\lina.jpg
文件 572 2008-05-12 11:03 算法代码\psnr.m
..A.SH. 27648 2010-01-16 15:28 算法代码\Thumbs.db
文件 263222 2008-05-23 14:58 算法代码\_lena_std_bw.bmp
目录 0 2010-01-16 15:28 算法代码
----------- --------- ---------- ----- ----
893338 13
相关资源
- 同步挤压小波变换分离混沌干扰 mat
- matlab数字水印dwtGUI+psnr+mse
- 基于DWT的数字水印的嵌入与提取
- 小波变换工具箱
- matlab实现一维和二维离散小波变换,
- 基于运动想象脑电信号的多特征融合
- MATLAB(DCT DWT)图像数字水印的方案毕
- 基于DWT数字水印算法研究和实现.pdf
- 小波变换图像融合的matlab实现
- 小波变换法图像融合MATLAB代码
- MATLAB图像数字水印方案论文+源码
- 使用Matlab7.3开发的使用整数小波变换
- MATLAB数字水印 源代码+毕业论文
- 小波变换及其MATLAB工具的应用.pdf
- 小波变换及其MATLAB工具的应用电子书
- MATLAB小波变换图像拼接技术GUI版.zip
- matlab 实现一维和二维离散小波变换,
- 图片二维小波变换的分解与重构_mat
- 用MATLAB实现基于小波变换的图像融合
- dct域数字水印MATLAB代码及实验报告
- MATLAB图像数字水印方案毕业论文论文
- MATLAB小波变换图像处理总结
- DCT+DWTmatlab数字水印代码
- 基于行列像素置乱和DWT小波变换的图
- MATLAB数字水印dwt+dct+多攻击+GUI界面.
- 小波分析理论与matlab7实现(pdf扫描)
- matlab数字音频水印的研究与实现
- EWT 经验小波变换matlab源程序
- MATLAB小波变换.pdf
- 基于小波变换的图像压缩与matlab仿真
评论
共有 条评论