У меня есть изображение, которое имеет простые точки, разбросанные по всему. Точки имеют одинаковый размер и они твердые (я могу прочитать цвет, чтобы определить, находится ли точка внутри или нет). Каков наиболее эффективный алгоритм для поиска точного числа точек? Я думал о Монте-Карло, но я не знаю достаточного количества случайных точек, которые я должен использовать. Любой совет? Редактировать: это белое изображение, содержащее только точки.Количество точек на картинке
ответ
Это хороший вариант для алгоритмов обработки изображений. Например, с использованием библиотеки OpenCV, вы можете использовать следующий подход:
Если формат изображения цветов, конвертировать его в оттенки серого (cvtColor)
Сделать изображение бинарное (чистый черный и белый) с инверсии цвета (cvThreshold с THRESH_BINARY_INV), чтобы сделать белые пятна на черном фоне
Найти связные компоненты (findContours) - после того, что contours.size дает количество точек
Если вы не хотите использовать какую-либо библиотеку, ключевой момент is connected components labeling
Самый простой способ сделать CCL для небольших точек - с использованием алгоритма Floodfill.
Make заливка фоновых пикселей, помечать их с 0.
сканирования всех пикселей. Когда вы встретите немаркированный (в X, Y), начните новую заливку заливки с последующим значением маркера K (1,2 и т. Д.).
После каждой заливки возвращайтесь к следующей координате (X + 1, Y) и продолжайте сканирование.
Последнее значение K - количество пятен.
Это было полезно. Спасибо –
@ D.Badawi Я добавил еще один простой подход для подсчета (своего рода маркировка компонентов, подходящая для точек) – MBo