我对图像处理很陌生,想要生成一个存储10个图像的数组。之后我想通过一些代码来运行for循环,这些代码识别图像的某些属性,特别是生物样本的表面区域,然后喷出一个包含10个区域的数组。
以下是我到目前为止已经设法废弃的内容,这是随后出现的错误消息:
??? Index exceeds matrix dimensions.
Error in ==> Testing1 at 14
nova(i).img = imread([myDir B(i).name]);
以下是我目前为止所做的代码:
my_Dir = 'AC04/';
ext_img='*.jpg';
B = dir([my_Dir ext_img]);
nfile = max(size(B));
nova = zeros(1,nfile);
for i = 1:nfile
nova(i).img = imread([myDir B(i).name]);
end
areaarray = zeros(1,nfile);
for k = 1:nfile
[nova(k), threshold] = edge(nova(k), 'sobel');
.
.
.
.%code in this area is irrelevant to the problem I think%
.
.
.
areaarray(k) = bwarea(BWfinal);
end
areaarray
答案 0 :(得分:0)
在Matlab中,有几种方法可以将图像存储在一种数组结构中。你可以使用struct
的数组。在这种情况下,你可以像你一样做:
nova(i).img = imread([myDir B(i).name]);
您使用nova(1).img
访问第一张图片,使用nova(2).img
等访问第二张图片
其他方法是使用单元格数组(类似于数组,但在成员可能属于不同类型的意义上更灵活):
nova{i} = imread([myDir B(i).name]);
您使用nova{1}
访问第一张图片,使用nova{2}
等访问第二张图片
[重要] 在这两种情况下,您都应该从代码中删除这一行:
nova = zeros(1,nfile);
我想你已经尝试为图像预先分配内存,因为你是初学者,我建议你不要关心它。如果您遇到一些性能问题,这是一个需要解决的优化问题 - 如果您没有遇到它们,请利用Matlab的自动内存(重新)分配。