用MATLAB将灰度图像Lena 分解成8 个位平面,将数字水印信息嵌入Lena图像的第1 至3 个位平面中的源代码
时间: 2024-03-25 10:40:19 浏览: 58
可以使用MATLAB中的bitget函数将灰度图像Lena分解成8个位平面。代码如下:
```matlab
lena = imread('lena.png'); % 读取灰度图像Lena
lena_binary = zeros(size(lena,1), size(lena,2), 8); % 创建8个位平面
for i = 1:8
lena_binary(:,:,i) = bitget(lena, i); % 将每个像素点的第i位存储到对应的位平面中
end
```
接下来,可以使用位运算将数字水印信息嵌入Lena图像的第1至3个位平面中。假设数字水印信息为watermark,代码如下:
```matlab
watermark = [1 0 1 0 1 0 1 0 1 0]; % 假设数字水印信息为1010101010
lena_watermark = lena_binary; % 复制一份灰度图像Lena的8个位平面
for i = 1:3
lena_watermark(:,:,i) = bitset(lena_watermark(:,:,i), 1, watermark(i)); % 将数字水印信息嵌入Lena图像的第1至3个位平面中
end
lena_watermark = uint8(sum(lena_watermark .* repmat([128 64 32 16 8 4 2 1], size(lena,1), size(lena,2), 1), 3)); % 将8个位平面合并为一幅图像
```
最后一行代码将8个位平面合并为一幅图像。由于每个像素点有8个位,因此需要将8个位平面加权求和,得到一幅灰度图像。
阅读全文