Как подсчитать количество объектов в изображении по цвету в Matlab - PullRequest
0 голосов
/ 03 ноября 2011

Я хочу посчитать количество объектов в изображении, идентифицированных по каждому цвету.

Пример: я хочу посчитать желтые или зеленые рисы на изображении.

enter image description here

Не могли бы вы дать мне совет, чтобы сделать это?

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

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

Что касается подсчета количества зерен, имеющих определенный цвет, таких как желтый или зеленый, еще раз прочитайте демонстрацию: ясно, что зерна риса не окрашены небольшим набором отдельных цветов, таких как желтый или зеленый (или оранжевый или розовый). Скорее, цвета рисовых зерен были специально созданы таким образом, чтобы они были равномерно распределены по всей карте цветов spring.

Таким образом, чтобы приступить к выполнению вашей задачи, вам нужно будет дать некоторое определение «желтого» или «зеленого», возможно, с точки зрения нахождения в определенном диапазоне значений RGB.

Сделав это, вы можете затем использовать переменную labeled (которая создана для вас в демоверсии) вместе с командой regionprops, чтобы получить список пикселей, которые находятся внутри каждой границы рисового зерна. Просто сравните эти пиксели с вашими определениями желтого или зеленого, и вы на месте.

0 голосов
/ 03 ноября 2011

Лучше всего это сделать, работая в другом цветовом пространстве, чем RGB (например, HSV, L a b *, ..).

Стив Эддинс опубликовал серию статей, показывающихпример того, как сегментировать объекты определенного цвета из изображения (в его случае зеленые M & M):

mms

0 голосов
/ 03 ноября 2011

при условии, что у вас есть изображение в матрице a (размер m*n*3), и вы хотите сначала найти количество объектов с цветом [r,g,b].

, выберите только пиксели с правильным цветом:

bb = (a(:,:,1) == r & a(:,:,2) == g &a(:,:,3) == b);

Чем:

[~,num] = bwlabel(bb,8)

num - количество объектов.

...