如何移除小于给定半径的岛屿并指定岛屿之间的最小间隙

How to remove islands smaller than a given radius and specify minimum gap between islands

我有一些数据在 Python 3.5 中被分割成多个 类。生成的图像如下

原图

我要删除的数据中有很多小岛。我在下面圈出一些来给出一个想法,但是有很多。

带有一些噪点的原图

我的想法是,我希望能够指定一个最小半径,低于该半径应删除噪声岛。

我尝试了几种使用 scikit 图像形态过滤器的不同方法。我已经尝试组合灰度关闭和打开过滤器(如下图所示),我也尝试使用 remove_small_objects 过滤器并分别处理每对 类 并在最后组合它们。他们确实致力于消除噪声岛(如下所示),但这会产生一个新问题。一些岛屿之间的边界很薄,我也不想要!

应用了灰度开放并圈出薄区域的图像

基本上,我想移除噪声岛,但每个岛之间的间隙也要最小。

如有任何帮助,我们将不胜感激。

编辑:

对预期结果的一些说明: 期望的结果是获得一个图像,其中没有小于特定半径的斑点,并且填充或去除了特定厚度以下的斑点之间的细边界。此处显示了我正在寻找的模型:

想要的结果

膨胀和腐蚀(通过打开和关闭执行的过程)是过滤小噪声块的标准方法,但对于长而弯曲的区域,它们可能会导致您在创建薄区域时遇到的问题,并且界限。您可以尝试根据显式连接组件大小进行过滤,而不是膨胀和腐蚀。 Skimage 的函数 skimage.morphology.label 可以标记连接的组件,而 skimage.morphology.remove_small_objects 可以删除任何尺寸低于特定阈值的连接组件。