首页 > 解决方案 > 可以使用morphology.remove_small_objects 去除小噪声吗?

问题描述

我的二值图像有很多噪点(面积约 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 像素的斑点并删除它们。

在此处输入图像描述

标签: image-processingcomputer-visionscikit-image

解决方案


当你传入一个整数图像时,scikit-image 假定所有相同值的像素都属于同一个对象,即使它们没有连接。因此,在您的情况下,所有像素都被视为同一(大)对象的一部分,因此不会删除任何像素。相反,你应该使用

from skimage.measure import label

noise_reduced = morphology.remove_small_objects(label(edges), 2,)

希望这可以帮助!


推荐阅读