0

我对图像处理很陌生,想生成一个存储 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
4

1 回答 1

0

在 Matlab 中,有几种方法可以将图像存储在一种数组结构中。您可以使用structs 数组。在这种情况下,您可以这样做:

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 的自动内存(重新)分配。

于 2013-06-13T16:31:43.890 回答