在二值图像上寻找厚物体

Finding thick objects on binary image

在分析图像以查找运动区域的上下文中,这是我得到的中间结果,使用 opencv 和 python(假设这些是 100% 二进制):

所以我的问题是:有没有办法找到具有特定 "thickness" 阈值的白色斑点?

大致如下所示:

我一直在寻找转换和操作,例如连接组件和形态转换,但这些都行不通,除此之外我不知道从哪里开始。

形态学开运算非常适合这个问题。它会去除所有比给定直径更细的白色部分。

在 OpenCV 中,它是在 cv2.morphologyEx 中使用 op=cv2.MORPH_OPEN:

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

但请注意,这会删除较薄的对象部分,如果对象的一部分足够宽,则不会保留完整的对象。这可以通过重建开口、侵蚀和形态重建(也称为测地线膨胀)来完成。

OpenCV 没有该算法。 This Q&A 给出了如何在 OpenCV 中实现它的粗略概述,但这是一个非常昂贵的算法,还有更高效的算法。

Scikit-image中可能有实现,我没找。

DIPlib(具有 Python 称为 PyDIP 的绑定)(另外,我是作者)有一个 dip.OpeningByReconstruction。使用 pip install diplib.

安装 Python 模块