仿真实现基于DWT的邻近值水印算法源代码
时间: 2023-12-17 07:05:14 浏览: 52
以下是基于DWT的邻近值水印算法的Matlab源代码:
```matlab
% 读入原始图像
I = imread('lena.bmp');
I = rgb2gray(I);
% 分解水印图像
W = imread('watermark.bmp');
W = im2bw(W,0.5);
W = double(W);
W = imresize(W,[256 256]);
[cA,cH,cV,cD] = dwt2(W,'haar');
% 分解原始图像
[cA1,cH1,cV1,cD1] = dwt2(I,'haar');
% 水印嵌入
alpha = 0.05; % 嵌入强度
cA2 = cA1 + alpha*cA;
I2 = idwt2(cA2,cH1,cV1,cD1,'haar');
% 水印提取
cA3 = (cA2 - cA1)/alpha;
W1 = idwt2(cA3,cH,cV,cD,'haar');
W1 = W1(1:size(W,1),1:size(W,2));
W1 = W1 > 0;
% 显示结果
subplot(2,2,1),imshow(I),title('原始图像');
subplot(2,2,2),imshow(W),title('水印图像');
subplot(2,2,3),imshow(I2),title('嵌入水印后的图像');
subplot(2,2,4),imshow(W1),title('提取的水印图像');
```
该代码实现了将水印图像嵌入到原始图像中,并提取出水印图像的过程。其中,使用了DWT分解和逆DWT重构的方法,通过调整嵌入强度alpha控制水印的嵌入质量。
阅读全文