将灰度图像 Lena 分解成 8 个位平面并验证教材 P91 页的结论,即将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中,可以达到不易察觉的目的。matlab代码
时间: 2024-03-25 20:40:05 浏览: 153
好的,这里是将灰度图像 Lena 分解成 8 个位平面的 Matlab 代码:
```matlab
lena = imread('lena_gray.bmp'); % 读入灰度图像 Lena
bits = cell(8, 1); % 用于保存每个位平面的二进制数
for i = 1 : 8
bits{i} = bitget(lena, i); % 分解第 i 个位平面
end
```
接下来是将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中的 Matlab 代码:
```matlab
watermark = [0 1 0 1 1 0 0 1 1 0]; % 数字水印信息
for i = 1 : 3
bits{i}(1 : length(watermark)) = bitset(bits{i}(1 : length(watermark)), 1, watermark); % 在第 i 个位平面中嵌入数字水印信息
end
watermarked_lena = uint8(0); % 用于保存加入数字水印信息后的 Lena 图像
for i = 1 : 8
watermarked_lena = watermarked_lena + bits{i} * 2^(i - 1); % 合成加入数字水印信息后的 Lena 图像
end
```
需要注意的是,这里的数字水印信息为 10 位二进制数,可以根据需要进行修改。另外,为了方便起见,这里将加入数字水印信息后的 Lena 图像保存为 8 位无符号整数类型。最后,为了验证教材 P91 页的结论,可以对比加入数字水印信息前后的 Lena 图像,看是否有明显的差异。
阅读全文