Python 如何删除小于给定半径的孤岛并指定孤岛之间的最小间隙

Python 如何删除小于给定半径的孤岛并指定孤岛之间的最小间隙,python,image-processing,scikit-image,Python,Image Processing,Scikit Image,在Python3.5中,我将一些数据分割成若干类。生成的图像如下所示 原始图像 我想删除的数据中有很多小岛屿。我在下面圈出了其中的一些,给出了一个想法,但是有很多 带一些噪声的原始图像 我的想法是,我希望能够指定一个最小半径,在该半径之下,应删除噪声岛 我尝试了几种使用scikit图像形态学过滤器的不同方法。我尝试过组合灰度关闭和打开过滤器(如下图所示),我也尝试过使用remove_small_objects过滤器,分别处理每对类,并在最后组合它们。他们确实致力于消除噪声岛(如下所示),但这

在Python3.5中,我将一些数据分割成若干类。生成的图像如下所示

原始图像

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

带一些噪声的原始图像

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

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

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

因此,基本上,我想消除噪音岛,但每个岛之间的间距也最小

任何帮助都将不胜感激

编辑:

关于预期结果的一些澄清: 理想的结果是获得图像,其中没有小于某个半径的斑点,并且填充或移除低于某个厚度的斑点之间的薄边界。我正在寻找的模型如下所示:

期望结果


膨胀和侵蚀(通过打开和关闭执行的过程)是过滤小噪波块的标准方法,但对于长而弯曲的区域,它们可能会导致创建薄区域和边界时遇到的问题。您可以尝试基于显式连接的组件大小进行过滤,而不是膨胀和侵蚀。Skimage具有标记连接组件的功能
Skimage.morphology.label
,以及
Skimage.morphology.remove_小对象
,该功能删除大小低于特定阈值的任何连接组件

你能更具体地描述一下形态学过滤器使用的方法吗?你能描述一下好的结果应该是什么样的吗?如果有帮助的话,你甚至可以用手画一幅。@StefanvanderWalt谢谢,我已经发布了一张理想效果的图片(用MS paint制作)@Mozglubov我已经在帖子中添加了一些关于我使用形态学过滤器的方法的说明。这些图片让问题更加清晰,谢谢!不过,似乎您可以使用形态运算符来解决这个问题?还可以查看
skimage.measure.regionprops
以计算区域上的其他属性。