上述代码数组索引必须为正整数或逻辑值。
时间: 2023-09-21 15:07:56 浏览: 103
谢谢您指出代码中的问题。确实,索引必须是正整数或逻辑值。如果索引是负数,MATLAB会抛出“Index exceeds matrix dimensions”或“Subscript indices must be either positive integers or logicals”等错误。
以下是修改后的代码:
```MATLAB
% 读入彩色图像
img = imread('color_image.jpg');
% 获取图像大小
[height, width, ~] = size(img);
% 创建一个大小相同的遮罩
mask = ones(height, width);
% 将遮罩中心部分设置为0,形成遮罩效果
x1 = floor(width / 4);
x2 = floor(3 * width / 4);
y1 = floor(height / 4);
y2 = floor(3 * height / 4);
mask(y1:y2, x1:x2, :) = 0;
% 将遮罩应用到图像上
masked_img = img;
mask3d = repmat(mask, [1, 1, size(img, 3)]);
masked_img(mask3d) = 0;
% 显示原图与遮罩后的图像
figure;
subplot(1, 2, 1);
imshow(img);
title('原图');
subplot(1, 2, 2);
imshow(masked_img);
title('遮罩后的图像');
```
这段代码会读入一张彩色图像,然后创建一个大小相同的遮罩,将遮罩中心部分设置为0,形成遮罩效果。在这里,我们使用了三维遮罩(即大小为[height, width, 3]的遮罩),以便在应用到图像上时获得正确的结果。然后将遮罩应用到图像上,生成遮罩后的图像,并将原图和遮罩后的图像显示出来。
阅读全文