Matlab实验实现简单图像水印代码
时间: 2024-02-28 14:56:39 浏览: 98
好的,以下是一份简单的Matlab实验代码,用于实现图像水印的嵌入和提取:
```matlab
% 嵌入水印
img = imread('original_image.jpg'); % 读取原始图像
watermark = imread('watermark_image.jpg'); % 读取水印图像
% 将原始图像和水印图像转换为灰度图像
img_gray = rgb2gray(img);
watermark_gray = rgb2gray(watermark);
% 对水印图像进行离散小波变换(DWT)
[cA, cH, cV, cD] = dwt2(watermark_gray, 'haar');
% 将水印图像的低频分量与原始图像的低频分量进行融合,得到新的低频分量
[cA_img, cH_img, cV_img, cD_img] = dwt2(img_gray, 'haar');
cA_new = (cA_img + cA) / 2;
% 将新的低频分量与原始图像的高频分量进行融合,得到新的图像
img_new = idwt2(cA_new, cH_img, cV_img, cD_img, 'haar');
% 对新的图像进行离散小波反变换(IDWT),得到嵌入水印后的图像
img_watermark = idwt2(cA_new, cH, cV, cD, 'haar');
% 提取水印
[cA_wm, cH_wm, cV_wm, cD_wm] = dwt2(img_watermark, 'haar');
watermark_extract = idwt2(cA_wm, zeros(size(cH)), zeros(size(cV)), zeros(size(cD)), 'haar');
% 显示结果
subplot(2,2,1), imshow(img_gray), title('原始图像');
subplot(2,2,2), imshow(watermark_gray), title('水印图像');
subplot(2,2,3), imshow(img_new, []), title('嵌入水印后的图像');
subplot(2,2,4), imshow(watermark_extract, []), title('提取的水印图像');
```
以上代码实现了将水印图像嵌入到原始图像中,并提取嵌入后的水印图像。其中,使用了离散小波变换(DWT)和离散小波反变换(IDWT)来实现水印的嵌入和提取。
阅读全文