matlab仿真实现基于DWT的邻近值水印算法代码
时间: 2023-09-11 20:11:22 浏览: 65
以下是一个基于DWT的邻近值水印算法的matlab实现代码,代码中包括了图像读取、DWT变换、水印嵌入、水印提取、图像显示等步骤:
```matlab
% 图像读取
img = imread('lena.bmp');
img = imresize(img,[256,256]);
% 水印信息
watermark = 'hello,world!';
% 小波变换
[LL,HL,LH,HH] = dwt2(img,'haar');
% 水印嵌入
watermark_bin = dec2bin(watermark,8);
watermark_bin = watermark_bin(:);
watermark_len = length(watermark_bin);
HL_vec = reshape(HL,[],1);
HL_len = length(HL_vec);
if watermark_len > HL_len
error('水印信息过大,无法嵌入');
end
HL_bin = dec2bin(HL_vec,8);
HL_bin(end-watermark_len+1:end) = watermark_bin;
HL_vec_new = uint8(bin2dec(HL_bin));
HL_new = reshape(HL_vec_new,size(HL));
img_new = idwt2(LL,HL_new,LH,HH,'haar');
% 水印提取
[LL_new,HL_new,LH_new,HH_new] = dwt2(img_new,'haar');
HL_vec_new = reshape(HL_new,[],1);
HL_bin_new = HL_bin(end-watermark_len+1:end);
watermark_bin_new = HL_bin_new(:);
watermark_new = char(bin2dec(reshape(watermark_bin_new,8,[]).')).';
% 图像显示
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(img_new);
title('带水印图像');
```
其中,'lena.bmp'是一个常用的图像文件,可以替换成其他图像文件。需要注意的是,这段代码仅供参考,实际应用中需要根据具体情况进行调整和优化。
阅读全文