清理图像分割中未标记的像素

Clean up unlabeled pixels in image segmentation

我的图像分割结果如下所示:

如您所见,分割图中存在小间隙。这些间隙像素已被赋值为 0;所有其他非间隙像素都被分配了一个非 0 class 值。

是否有一种方法(可能在 skimage 中的某处)可以仅对空像素执行 k 最近插值之类的操作,以便为它们分配与其邻域一致的值?我试着自己写这个函数,但对我来说太慢了。

可以使用opencv的形态学闭操作(参考:Link

我试图对你的图片执行相同的操作:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = plt.imread('image path')
plt.imshow(img)

kernel = np.ones((5,5),dtype='uint8')
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel,iterations=1)
plt.imshow(closing)

您可以使用内核大小和迭代次数。对于小图像,可以找到 3 或 5 的内核大小。您可以增加迭代次数以关闭更大的孔。

形态闭合很好,但可以修改对象的形状,它会在边缘添加一些伪像。 对于您的问题,我认为您应该使用 findContour,然后使用 fillpoly 去除孔洞。