在Matlab中查找结构内矩阵的位置

时间:2018-06-26 18:28:20

标签: matlab struct

我正在导入星星的RGB图像U,并执行以下操作:

im=rgb2gray(U);
img=(im>200);
BW=im2bw(img,0);
L=bwlabeln(BW,18);
b=regionprops(L,'PixelList');

该程序的目标是在这张数百颗恒星的图中找到最大和最突出的恒星。 b是一个2566x1结构数组,其中包含所有大于200的点。如果图像中的某个连接区域包含多个200以上的值,则b将存储这些点的坐标矩阵。否则,它将仅存储单个坐标对。

我需要一种方法来找到b中包含矩阵的所有行吗?如果可能,是否可以找到b中包含矩阵的所有行的矩阵,这些矩阵包含30个或更多点?

2 个答案:

答案 0 :(得分:0)

您可以使用arrayfun函数将函数应用于数组中的每个元素。请注意,这只是编写循环的一种较短方法。

在这种情况下,您需要将函数size(b(i).PixelList, 1) > 30应用于结构数组i的每个元素b

m = arrayfun(@(x)size(x.PixelList, 1) > 1, b)

这等同于:

m = false(size(b));
for i=1:numel(b)
   m(i) = size(b(i).PixelList, 1) > 30;
end

矩阵m是一个逻辑数组,您可以将其用作b(m)的索引。您也可以使用find(m)获取索引。

答案 1 :(得分:0)

如果在由'Area'计算的properties中也包含regionprops,则每个分量中已经有像素数:

b=regionprops(L,'PixelList','Area');
idx = [b.Area] >= 30;