用matlab代码将灰度图像 Lena 分解成 8 个位平面
时间: 2024-03-25 16:40:32 浏览: 96
好的,以下是Matlab代码实现:
```matlab
% 读入灰度图像 Lena
lena = imread('lena_gray.jpg');
% 将灰度图像 Lena 分解成 8 个位平面
bit_planes = zeros(size(lena,1),size(lena,2),8);
for k = 1:8
bit_plane = bitget(lena,k);
bit_planes(:,:,k) = 2^(k-1)*bit_plane;
end
% 显示分解后的位平面图像
figure;
for k = 1:8
subplot(2,4,k);
imshow(uint8(bit_planes(:,:,k)));
title(['Bit plane ',num2str(k)]);
end
```
运行后,会显示出分解后的 8 个位平面图像。
相关问题
用matlab代码将灰度图像 Lena 分解成 8 个位平面并验证结论,即将数字水印信息嵌入 Lena 图像的第 1 至 3 个位平面中,可以达到不易察觉的目的。
下面是实现该功能的 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 个位平面中,最后合成位平面得到嵌入数字水印后的图像。代码还验证了结论,如果数字水印嵌入成功,输出“数字水印嵌入成功!”;否则,输出“数字水印嵌入失败!”。
用MATLAB将灰度图像Lena 分解成8 个位平面,将数字水印信息嵌入Lena图像的第1 至3 个位平面中的源代码
可以使用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个位平面加权求和,得到一幅灰度图像。
阅读全文