清理图像分割中未标记的像素
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 去除孔洞。
我的图像分割结果如下所示:
如您所见,分割图中存在小间隙。这些间隙像素已被赋值为 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 去除孔洞。