Надежное отслеживание BLOB-объектов
У меня проблема с извлечением изображений. Входные изображения являются двоичными (черно-белые) и могут содержать пятна приблизительно известной площади и соотношения сторон. Они должны соответствовать эллипсам с использованием лучшего алгоритма подбора.
Пример ввода:
Желаемый вывод:
Может быть несколько BLOB-объектов (ноль или более), число которых заранее неизвестно. Приблизительная площадь и соотношение сторон всех пятен известны (и являются одинаковыми). Сколько на изображении, их положение, ориентация и фактический размер - вот что я пытаюсь найти. Вывод должен представлять собой эллипс наилучшего соответствия для каждого большого двоичного объекта на основе фактического найденного размера и соотношения сторон.
Что делает это трудным, так это шум и возможные совпадения.
Пример с шумом:
Пример с перекрытием и шумом:
На шумном изображении могут быть дырки в каплях, а также маленькие капли, разбросанные вокруг. Другие мелкие капли не учитываются, потому что они слишком малы и не покрывают какую-либо область достаточно плотно, чтобы считаться настоящим совпадением.
Изображение с наложением следует считать двумя каплями, потому что область слишком велика для того, чтобы одна капля хорошо покрывала его.
Возможная метрика, которая оценивает потенциальное соответствие:
сумма по всем эллипсам (K1 * процентное отклонение от ожидаемого размера + K2 * процентное отклонение от ожидаемого соотношения сторон + K3 * процент эллипса, который не является черным + K4 * процент, перекрывающийся с любым другим эллипсом) + K5 * процент остального изображения который черный
для некоторых подходящих параметров K1..K5. Идеальный матч набирает 0.
Я вижу, как решить эту проблему, используя грубую силу, например, пробуя достаточно много разных подходов, чтобы хорошо пробовать пространство поиска. Я не могу думать о методе намного быстрее, чем грубая сила.
Я бы предпочел примеры в Python и / или OpenCV. Я постараюсь реализовать и опубликовать любые предлагаемые решения в Python. Спасибо!
Постскриптум Нельзя предполагать, что BLOB-объект связан. Там может быть достаточно шума, чтобы разбить его на отдельные части.
P.P.S. Маленькие кусочки шума не могут быть удалены с помощью двоичной эрозии. В некоторых моих изображениях достаточно внутренних отверстий, чтобы из-за эрозии весь (настоящий) шарик исчез, если изображение размыто достаточно, чтобы исчезли и биты шума.
P.P.P.S. Я думаю, что было бы очень трудно решить эту проблему, используя любой подход, основанный на контурах. Данные, которые я вижу на практике, имеют слишком много краевого шума, могут быть (и часто есть) биты шума, которые соединяют отдельные BLOB-объекты или разделяют один BLOB-объект на несколько (кажущихся) связанных компонентов. Я хотел бы подход, основанный на областях, так как охват области, кажется, намного менее любопытен, чем формы края.
P.P.P.P.S. Как и требовалось, вот пример со сквозным срезом из-за шума:
и образец с большим количеством шума, но, тем не менее, с отчетливым блобом:
РЕДАКТИРОВАТЬ Ни один из ответов на самом деле не решает проблему, хотя Бхарат предложил частичное решение, которое хорошо для неперекрывающихся пятен. Больше пожалуйста :) Я буду награждать дополнительную награду за любые актуальные решения.