Как найти желтые объекты на данной картинке?

У меня есть эта картина:

(это просто изображение большего изображения, но только эта часть для меня важна). Мне нужен алгоритм, чтобы найти все эти желтые объекты на изображении и найти из них объект, который содержит наибольшее количество желтых точек. Это всего лишь одна фотография из тысяч похожих картинок с более или менее желтыми объектами. Как это сделать? Я обнаружил, что алгоритм scanline хорош для этого, но я не нашел пример, который бы мне помог. Если у вас есть какие-то идеи или даже алгоритм, это было бы идеально. Эти цветные линии не важны, я просто поставил их как границу, в которой мне нужно найти желтые объекты.

Большое спасибо за ответы

3 ответа

Решение

Есть два основных шага:

  • Thresholding: генерирует массив желтых и не желтых пикселей. Если все изображения, с которыми вы работаете, похожи на приведенный вами пример, это должно быть очень просто, но попробуйте адаптивный порог, если вам приходится иметь дело с различными оттенками и оттенками. Сохраните, например, значение -1 для пикселей желтого цвета и 0 везде.

  • Сегментация: Инициализируйте значение ID равным 1. Сканируйте каждый пиксель порогового изображения. Когда вы встречаете пиксель со значением -1 (т. Е. Желтый пиксель), используйте процедуру заливки, чтобы записать значение идентификатора в этот пиксель и все желтые пиксели, связанные с ним. Перед выходом из процедуры заливки можно сохранить информацию, такую ​​как количество найденных пикселей и средние координаты X и Y, в массиве, индексированном по значению идентификатора. Затем увеличьте значение идентификатора и продолжите сканирование, пока не закроете все изображение.

Затем выполните поиск данных, сгенерированных процедурой заливки, чтобы найти, какие желтые области были самыми большими и где они были расположены.

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

красные круги вокруг вещей

Похоже, что в OpenCV есть опции обнаружения блобов. Я обнаружил, что в этой статье показано, как определять капли с использованием значения оттенков серого, которое вы должны изменить, чтобы использовать значение цвета целевого цвета. В нем также упоминается использование области большого двоичного объекта в качестве порогового значения, поэтому вы должны иметь возможность использовать ее, чтобы найти самый большой на изображении.

http://www.learnopencv.com/blob-detection-using-opencv-python-c/

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

Другие вопросы по тегам