填充接触图像边界的对象中的孔

问题描述 投票:0回答:2

我正在尝试填补下图中的漏洞。

image to be filled

当我使用 SciPy 的 binary_fill_holes() 时,我通常会成功,但接触图像边框的对象除外。

enter image description here

是否有现有的 Python 函数可以填充接触边框的对象中的孔?我尝试在图像周围添加白色边框,但这只会导致整个图像被填充。

python opencv image-processing scipy image-segmentation
2个回答
8
投票

这假设背景比其他东西更多。它基本上对图像进行连通分量分析。提取最大的组件(假设为背景),并将其他所有内容设置为白色。

import numpy as np
import matplotlib.pyplot as plt
import skimage.morphology, skimage.data

img = skimage.data.imread('j1ESv.png', 1)
labels = skimage.morphology.label(img)
labelCount = np.bincount(labels.ravel())
background = np.argmax(labelCount)
img[labels != background] = 255
plt.imshow(img, cmap=plt.cm.gray)
plt.show()

enter image description here


0
投票

这是设计使然,因为无法知道裁剪后的形状是闭合圆还是开放弧。

来自 binary_fill_holes 的 API 文档

注释

该函数中使用的算法包括入侵 来自外部边界的输入中的形状的互补 图像,使用二值膨胀。孔不与边界相连 因此不会被入侵。结果是互补子集 被入侵的地区。

以下是其余形状的两个示例

Two possible examples of what the rest of the shape could be

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.