Морфологическое отверстие идеально подходит для этой проблемы. Удаляет все белые детали тоньше указанного диаметра.
В 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.