我的二进制图像有很多噪点(面积约3-6像素的白色小斑点)。可以使用函数skimage.morphology.remove_small_objects()删除这些小斑点吗?
在我的实验中,该功能使图像保持不变。我使用的功能不正确吗?或者该功能不适合我想要实现的功能?
src = cv2.imread('plan4.png')
src = cv2.GaussianBlur(src, (3,3), 1)
edges = get_edges(src.copy())
noise_reduced = morphology.remove_small_objects(edges .copy(), 2,)
cv2.imshow('src', src)
cv2.imshow('noise_reduced', noise_reduced)
cv2.imshow('edges ', edges )
下面是带有小白色斑点(我要删除)的原稿,remove_small_objects()
的结果显示它们相同,并且没有删除任何斑点。 *注意:形态学上关闭或打开图像会去除这些小斑点,但也会使我的线条退化太多。我真的更喜欢找到面积约为6像素的斑点并将其删除。
答案 0 :(得分:3)
当您传递整数图像时,scikit-image假定所有值相同的像素都属于同一对象,即使它们没有连接也是如此。因此,在您的情况下,所有像素均被视为同一(大)对象的一部分,因此不会删除任何像素。相反,您应该使用
from skimage.measure import label
noise_reduced = morphology.remove_small_objects(label(edges), 2,)
希望这会有所帮助!