morphology.remove_small_objects可以用来去除小噪音吗?
Can morphology.remove_small_objects be used to remove small noise?
我的二值图像有很多噪声(小的白色斑点区域大约 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 像素的斑点并将其删除。
当您传入整数图像时,scikit-image 会假定所有具有相同值的像素都属于同一对象,即使它们没有连接。因此,在您的情况下,所有像素都被视为同一(大)对象的一部分,因此 none 被删除。相反,你应该使用
from skimage.measure import label
noise_reduced = morphology.remove_small_objects(label(edges), 2,)
希望对您有所帮助!
我的二值图像有很多噪声(小的白色斑点区域大约 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 像素的斑点并将其删除。
当您传入整数图像时,scikit-image 会假定所有具有相同值的像素都属于同一对象,即使它们没有连接。因此,在您的情况下,所有像素都被视为同一(大)对象的一部分,因此 none 被删除。相反,你应该使用
from skimage.measure import label
noise_reduced = morphology.remove_small_objects(label(edges), 2,)
希望对您有所帮助!