用MATLABR2016b将灰度图像Lena.bmp图像 分解成8个位平面,分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码
时间: 2024-03-25 17:40:56 浏览: 120
以下是用MATLAB R2016b实现对灰度图像Lena.bmp的位平面分解,并比较不同位平面图像的源代码:
```matlab
% 读取灰度图像 Lena.bmp
I = imread('Lena.bmp');
% 将图像转换为double类型的矩阵,并归一化到0~1之间
I = im2double(I);
% 获取图像的行数和列数
[M, N] = size(I);
% 初始化8个位平面的矩阵
bit_plane = zeros(M, N, 8);
% 将图像分解成8个位平面,从最低位平面到最高位平面
for i = 1:8
% 获取当前位平面的二进制表示
bit_mask = bitshift(1, i-1);
% 用位运算获取当前位平面的图像
bit_plane(:,:,i) = bitand(I, bit_mask);
end
% 初始化比较不同位平面图像的矩阵
compare_plane = zeros(M, N, 7);
% 从第1个位平面到第7个位平面,分别去掉该位平面并重构图像
for i = 1:7
% 将当前位平面及之后的所有位平面置0
bit_mask = bitcmp(bitshift(1, i-1), 'int8');
% 去掉当前位平面并重构图像
compare_plane(:,:,i) = bitand(I, bit_mask);
end
% 显示原始图像
subplot(3, 3, 1);
imshow(I);
title('Original Image');
% 显示8个位平面图像
for i = 1:8
subplot(3, 3, i+1);
imshow(bit_plane(:,:,i));
title(['Bit Plane ' num2str(i)]);
end
% 显示去掉不同位平面后的图像
for i = 1:7
subplot(3, 3, i+9);
imshow(compare_plane(:,:,i));
title(['Remove Bit Plane ' num2str(i)]);
end
```
运行上述代码,会生成一个显示原始图像、8个位平面图像以及去掉不同位平面后的图像的子图像窗口。可以通过比较不同位平面图像的区别,来观察不同位平面的作用和重要性。
阅读全文