用matlab代码将灰度图像 Lena 分解成 8 个位平面并验证结论,即将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中,可以达到不易察觉的目的。
时间: 2024-03-25 17:40:27 浏览: 65
下面是实现该功能的 MATLAB 代码:
```matlab
% 读取 Lena 灰度图像
img = imread('lena_gray.bmp');
% 分解成 8 个位平面
for i = 1:8
bit_plane{i} = bitget(img, i);
end
% 将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中
watermark = [1 0 1 1 0 1 0 1 0 1]; % 数字水印信息
for i = 1:3
bit_plane{i} = bitset(bit_plane{i}, 1, watermark(i)); % 将数字水印信息嵌入第 1 至 3 个位平面中
end
% 合成位平面
watermarked_img = uint8(zeros(size(img)));
for i = 1:8
watermarked_img = watermarked_img + bit_plane{i} * 2^(i-1);
end
% 显示结果
subplot(1,2,1);
imshow(img);
title('原图');
subplot(1,2,2);
imshow(watermarked_img);
title('嵌入数字水印后的图像');
% 验证结论
diff = imabsdiff(watermarked_img, img); % 计算两幅图像的差异
diff_sum = sum(diff(:)); % 计算差异的总和
if diff_sum == 0
fprintf('数字水印嵌入成功!\n');
else
fprintf('数字水印嵌入失败!\n');
end
```
该代码将 Lena 灰度图像分解成 8 个位平面,然后将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中,最后合成位平面得到嵌入数字水印后的图像。代码还验证了结论,如果数字水印嵌入成功,输出“数字水印嵌入成功!”;否则,输出“数字水印嵌入失败!”。
阅读全文