用MATLABR2016b将灰度图像Lena 分解成8个位平面,分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码
时间: 2024-03-25 10:40:31 浏览: 67
以下是使用MATLAB R2016b实现将灰度图像Lena分解成8个位平面,并分别去掉从1到7个位平面,与剩余的位平面图像比较的源代码:
```matlab
% 读取灰度图像Lena
img = imread('lena.png');
% 将灰度图像转换为二进制图像
bin_img = im2bw(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
```
该代码与上面的代码几乎相同,唯一的区别是使用了`im2bw`函数将灰度图像转换为二进制图像,因为在MATLAB R2016b版本中,没有`imbinarize`函数。其他部分的实现方式都相同。
注意:由于MATLAB R2016b版本不支持`imbinarize`函数和`bitget`函数的三维矩阵输入,因此需要将二进制图像分解成8个位平面并存储在一个单元格数组中。如果您使用的是其他版本,可以直接使用`imbinarize`函数和`bitget`函数进行操作。
阅读全文