Нахождение местоположения матриц в структуре в Matlab - PullRequest
0 голосов
/ 26 июня 2018

Я импортирую 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 голосов
/ 26 июня 2018

Если вы также включите 'Area' в свойствах , рассчитанных по regionprops, у вас уже будет количество пикселей в каждом компоненте:

b=regionprops(L,'PixelList','Area');
idx = [b.Area] >= 30;
0 голосов
/ 26 июня 2018

Вы можете использовать функцию arrayfun, чтобы применить функцию к каждому элементу в массиве. Обратите внимание, что это просто более короткий способ написания цикла.

В этом случае вам необходимо применить функцию size(b(i).PixelList, 1) > 30 к каждому элементу i массива struct 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...