matlab仿真实现基于DWT的邻近值水印算法代码
时间: 2023-09-11 22:11:22 浏览: 162
以下是基于DWT的邻近值水印算法的 MATLAB 仿真代码,供参考:
```matlab
% 加载需要嵌入水印的图像
I = imread('lena.jpg');
I = rgb2gray(I);
I = imresize(I,[256 256]);
% 加载水印图像
w = imread('watermark.jpg');
w = imresize(w,[32 32]);
% 将图像矩阵转换为向量
I = double(I(:));
w = double(w(:));
% 进行离散小波变换
[cA,cH,cV,cD] = dwt2(reshape(I,256,256),'haar');
% 将水印嵌入到LL子带
alpha = 0.01; % 水印强度系数
cA_new = cA + alpha*w;
% 将经过修改的LL子带合并回原始图像的小波系数中
c = {cA_new,cH,cV,cD};
I_new = uint8(idwt2(c,'haar'));
% 显示原始图像和嵌入水印后的图像
figure;
subplot(1,2,1);
imshow(uint8(reshape(I,256,256)));
title('原始图像');
subplot(1,2,2);
imshow(I_new);
title('嵌入水印后的图像');
% 提取水印
[cA,cH,cV,cD] = dwt2(reshape(I_new,256,256),'haar');
w_extract = (cA - cA_new)/alpha;
% 显示提取出的水印
figure;
imshow(reshape(w_extract,32,32),[]);
title('提取出的水印');
```
注意:在运行此代码之前,需要将 `lena.jpg` 和 `watermark.jpg` 按照代码中的路径放置在 MATLAB 当前工作目录下。同时,还需要安装 MATLAB 的 Image Processing Toolbox 才能运行此代码。
阅读全文