Нахождение толстых объектов на бинарном изображении - PullRequest
2 голосов
/ 16 мая 2019

В контексте анализа изображений, чтобы найти зоны с движением, вот что я получил в качестве промежуточного результата, используя opencv с python (предположим, что они на 100% двоичные):

Binary image

Итак, мой вопрос: есть ли способ найти пятна белого цвета с определенным порогом "толщины"?

Вот как это может выглядеть примерно:

Resulting image

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

1 Ответ

3 голосов
/ 17 мая 2019

Морфологическое отверстие идеально подходит для этой проблемы. Удаляет все белые детали тоньше указанного диаметра.

В OpenCV это реализовано в cv2.morphologyEx с использованием op=cv2.MORPH_OPEN:

kernel = cv2.getStructuringElement(cv2.cv.MORPH_ELLIPSE, diameter)
output = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

Но обратите внимание, что это удаляет части объектов, которые являются тонкими, и не оставляет полного объекта, если его часть достаточно широка. Это можно сделать с помощью вскрытия путем реконструкции, эрозии с последующей морфологической реконструкцией (также известной как геодезическая дилатация).

OpenCV не имеет этого алгоритма. В этом разделе «Вопросы и ответы» дается приблизительная схема того, как реализовать его в OpenCV, но это очень дорогой алгоритм, есть гораздо более эффективные.

Возможно, в Scikit-образе есть реализация, я ее не искал.

DIPlib (с привязками Python, называемыми PyDIP) (также я являюсь автором) имеет dip.OpeningByReconstruction , однако вам придется собирать библиотеку из источников, поскольку у нас пока нет простой готовый дистрибутив для Python.

...