在matlab中查找结构中矩阵的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在matlab中查找结构中矩阵的位置相关的知识,希望对你有一定的参考价值。

我正在导入星星的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个或更多点的矩阵的所有行的方法?

答案

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

在这种情况下,您需要将函数size(b(i).PixelList, 1) > 30应用于struct array 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)获取指数。

另一答案

如果你还在'Area'计算的properties中包含regionprops,那么你已经拥有每个组件中的像素数:

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

以上是关于在matlab中查找结构中矩阵的位置的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵-MATLAB代码详解

求大神解答find函数

matlab如何统计矩阵中大于或小于某数的元素个数?

matlab中如何交换矩阵的行或者列

[Matlab] 如何在矩阵中查找特定的字符串

matlab 怎么找出二维矩阵中最大值的位置