matlab图像的位平面分解实验。 将灰度图像Lena分解成8个位平面并验证教材P91页的结论,即将数字水印信息嵌入Lena图像的第1至3个位平面中,可以达到不易察觉的目的。给出代码
时间: 2024-03-25 21:40:00 浏览: 131
好的,以下是 MATLAB 代码实现:
```matlab
% 读取 Lena 图像
lena = imread('lena.png');
% 将 Lena 转换为灰度图
lena_gray = rgb2gray(lena);
% 显示原图像
subplot(3, 3, 1);
imshow(lena_gray);
title('Original Image');
% 将 Lena 分解成 8 个位平面并显示
lena_planes = cell(1, 8);
for i = 1:8
lena_planes{i} = bitget(lena_gray, i);
subplot(3, 3, i + 1);
imshow(logical(lena_planes{i}));
title(['Bit Plane ' num2str(i)]);
end
% 读取数字水印信息
watermark = imread('watermark.png');
% 将数字水印信息转换为二值图像
watermark = imbinarize(watermark);
% 将数字水印信息嵌入 Lena 的第 1 至 3 个位平面中
for i = 1:3
lena_planes{i} = bitset(lena_planes{i}, 1, watermark);
end
% 合并嵌入数字水印信息后的位平面并显示
lena_watermark = uint8(0);
for i = 1:8
lena_watermark = lena_watermark + lena_planes{i} * 2^(i - 1);
end
subplot(3, 3, 9);
imshow(lena_watermark);
title('Watermarked Image');
```
代码解释:
1. 读取 Lena 图像并转换为灰度图像。
2. 将 Lena 分解为 8 个位平面并显示。
3. 读取数字水印图像并转换为二值图像。
4. 将数字水印信息嵌入 Lena 的第 1 至 3 个位平面中。
5. 合并嵌入数字水印信息后的位平面并显示。
运行该程序,可以得到原图像和分解后的 8 个位平面,以及数字水印信息嵌入后的图像,可以验证教材 P91 页的结论。
阅读全文