% 读取Lena.bmp图像lena = imread('Lena.bmp');% 将图像转换为二进制图像lena_bin = de2bi(lena, 8);% 分解成8个位平面bit_planes = cell(1, 8);for i = 1:8 bit_planes{i} = lena_bin(:, :, i);end% 分别去掉从1到7个位平面,并与剩余的位平面图像进行比较for i = 1:7 % 去掉第1到第i个位平面 removed_planes = bit_planes; for j = 1:i removed_planes{j} = zeros(size(removed_planes{j})); end % 重构图像 removed_lena = bi2de(cat(3, removed_planes{:})); % 与剩余的位平面图像进行比较 remaining_planes = bit_planes; for j = i+1:8 remaining_planes{j} = zeros(size(remaining_planes{j})); end remaining_lena = bi2de(cat(3, remaining_planes{:})); diff = abs(removed_lena - remaining_lena); % 显示去掉第1到第i个位平面后的图像和与剩余的位平面图像比较的结果 figure; subplot(1, 3, 1); imshow(removed_lena); title(sprintf('Removed bit planes %d-%d', 1, i)); subplot(1, 3, 2); imshow(remaining_lena); title(sprintf('Remaining bit planes %d-%d', i+1, 8)); subplot(1, 3, 3); imshow(diff, []); title('Difference');end的bit_planes{i} = lena_bin(:,:,i);的索引超出矩阵维度
时间: 2024-03-25 17:41:15 浏览: 101
Assignment1.rar_lena_lena.bmp_matlab 抖动_图像抖动_灰度 抖动
这个错误可能是因为Lena.bmp图像读取后不是一个二维矩阵,而是一个三维矩阵。你可以尝试添加一个判断语句,确认Lena.bmp图像是否为三维矩阵,然后对第三维做处理。下面是修改后的代码:
```matlab
% 读取Lena.bmp图像
lena = imread('Lena.bmp');
% 将图像转换为二进制图像
if ndims(lena) == 3
lena_gray = rgb2gray(lena);
else
lena_gray = lena;
end
lena_bin = de2bi(lena_gray, 8);
% 分解成8个位平面
bit_planes = cell(1, 8);
for i = 1:8
bit_planes{i} = lena_bin(:, :, i);
end
% 分别去掉从1到7个位平面,并与剩余的位平面图像进行比较
for i = 1:7
% 去掉第1到第i个位平面
removed_planes = bit_planes;
for j = 1:i
removed_planes{j} = zeros(size(removed_planes{j}));
end
% 重构图像
removed_lena = bi2de(cat(3, removed_planes{:}));
% 与剩余的位平面图像进行比较
remaining_planes = bit_planes;
for j = i+1:8
remaining_planes{j} = zeros(size(remaining_planes{j}));
end
remaining_lena = bi2de(cat(3, remaining_planes{:}));
diff = abs(removed_lena - remaining_lena);
% 显示去掉第1到第i个位平面后的图像和与剩余的位平面图像比较的结果
figure;
subplot(1, 3, 1);
imshow(removed_lena);
title(sprintf('Removed bit planes %d-%d', 1, i));
subplot(1, 3, 2);
imshow(remaining_lena);
title(sprintf('Remaining bit planes %d-%d', i+1, 8));
subplot(1, 3, 3);
imshow(diff, []);
title('Difference');
end
```
这段代码添加了一个判断语句,如果Lena.bmp图像是一个三维矩阵,就将其转换为灰度图像。这样就可以确保Lena.bmp图像是一个二维矩阵,可以正确地分解成8个位平面。
阅读全文