Numpy 图像边界查找与填充

Numpy 图像边界查找与填充,numpy,scipy,scikit-image,Numpy,Scipy,Scikit Image,我有一个单波段二值图像,只包含0和1个像素值,如下图所示 我必须将外部白色边界内的所有黑色像素转换为白色。 外部白色边界外的黑色像素应保持黑色 你会怎么做 下面的代码产生以下结果: 我已经对代码进行了内联注释,以解释我所做的工作 从撇渣导入io、img_as_bool、测量、形态学 从scipy导入ndimage 将numpy作为np导入 将matplotlib.pyplot作为plt导入 读取图像,将值转换为真或假; 丢弃除红色通道以外的所有通道,因为它是一个黑白通道 白色图像,它们都是一样的

我有一个单波段二值图像,只包含0和1个像素值,如下图所示

我必须将外部白色边界内的所有黑色像素转换为白色。 外部白色边界外的黑色像素应保持黑色

你会怎么做


下面的代码产生以下结果:

我已经对代码进行了内联注释,以解释我所做的工作

从撇渣导入io、img_as_bool、测量、形态学 从scipy导入ndimage 将numpy作为np导入 将matplotlib.pyplot作为plt导入 读取图像,将值转换为真或假; 丢弃除红色通道以外的所有通道,因为它是一个黑白通道 白色图像,它们都是一样的 image=img_as_boolio.imread'borders.png'[…,0] 计算图像中的连通区域;我们要用这个 为分水岭分割找到质心 labels=measure.labelimage 区域=measure.regionpropslabels 分水岭分割的标记位置;我们选择这些 是图像中不同连接区域的质心 markers=np.数组[r.区域中r的质心].astypenp.uint16 marker\u image=np.zeros\u likeimage,dtype=np.int64 marker_图像[markers[:,0],markers[:,1]=np.arangelenmarkers+1 计算距离地图,它为我们的流域提供了一个景观 分段 距离\u贴图=nImage.distance\u transform\u edt1-图像 计算流域分割;它将对图像进行分段 填充=形态学。流域1-距离\地图,标记=标记\图像 在过度分割的图像中,合并触摸区域 已填充\u已连接=测量值已标记!=1,背景=0+1 在此可选步骤中,过滤掉大小小于25%的所有区域 找到的平均区域面积的 填充的\u区域=measure.regionpropsfilled\u已连接 平均面积=np.平均值[填充面积中r的r.面积] filled\u filtered=filled\u connected.copy 对于填充区域中的r: 如果r.面积<0.25*平均面积: coords=np.arrayr.coords.astypeint 已填充\u已过滤[coords[:,0],coords[:,1]]=0 展示! f、 ax0、ax1、ax2=plt.subplots1、3 ax0.imshowimage,cmap='gray' ax1.imshowfilled\u已过滤,cmap='spectral' ax2.imshowdistance\u映射,cmap='gray' plt.savefig'/tmp/label_filled_regions.png',bbox_inches='tight'
如果您还可以包含一幅图像,描述图像的哪些部分应该填充,哪些部分不应该填充,这将非常有用,即定义图像的内部和外部。用油漆绘制的示意图就足够了,它不需要是解决方案的精确表示。图中白色多边形的定义可能模棱两可,@Stefan van der Walt发现了这一点。恐怕我现在的位置与@hakanc相同。我需要看一个你想要输出的例子。