用MATLAB将灰度图像Lena 分解成8个位平面,分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码
时间: 2024-03-25 16:40:26 浏览: 21
以下是使用MATLAB实现将灰度图像Lena分解成8个位平面,并分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码:
```matlab
% 读取灰度图像Lena
img = imread('lena.png');
% 将灰度图像转换为二进制图像
bin_img = imbinarize(img);
% 将二进制图像分解成8个位平面
bits = cell(8, 1);
for i = 1:8
bits{i} = bitget(bin_img, i);
end
% 分别去掉从1到7个位平面,与剩余的位平面图像比较
for i = 1:7
removed_bits = [zeros(size(bits{1})), bits{i+1}];
removed_img = uint8(bin2dec(char('0'+removed_bits+'0')));
remaining_bits = [bits{1:i}, zeros(size(bits{8-i}))];
remaining_img = uint8(bin2dec(char('0'+remaining_bits+'0')));
diff_img = abs(img - (removed_img + remaining_img));
figure('Name', ['Removed ' num2str(i) ' bits']);
imshow(removed_img);
figure('Name', ['Remaining ' num2str(8-i) ' bits']);
imshow(remaining_img);
figure('Name', ['Difference with original']);
imshow(diff_img);
end
```
该代码首先使用`imread`函数读取灰度图像Lena,然后使用`imbinarize`函数将灰度图像转换为二进制图像。接着,它使用`bitget`函数将二进制图像分解成8个位平面。然后,使用循环逐个去掉从1到7个位平面,并分别显示剩余的位平面图像、被去掉的位平面图像和与原始图像的差异图像。最后,使用`imshow`函数显示这些图像,并在每个窗口中设置一个名称。
注意:该代码是基于MATLAB R2020a版本编写的,如果您使用的是其他版本,可能需要进行适当的修改。