无法通过 remove_small_objects 去除噪音

我有一个黑白图像。我尝试通过 消除噪音remove_small_objects。


import cv2 as cv

import numpy as np

from skimage import morphology


img = np.array([[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

                [255, 255,   0, 255,   0,   0,   0,   0, 255, 255, 255],

                [255, 255, 255, 255,   0,   0,   0,   0, 255,   0,   0],

                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],

                [255, 255,   0,   0,   0,   0,   0, 255,   0,   0,   0],

                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],

                [255, 255, 255,   0,   0,   0,   0,   0,   0,   0,   0],

                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],

                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0]])


cleaned = morphology.remove_small_objects(img, min_size=10, connectivity=1)

print(cleaned)


while True:

    cv.imshow('Demo', cleaned.astype(np.uint8))

    if cv.waitKey(1) & 0xFF == 27:

        break


cv.destroyAllWindows()

然而,它并没有像我预期的那样工作。中间的白色像素 255 仍然存在。


我做错什么了吗?谢谢

http://img4.mukewang.com/61a58b2600012a3209150288.jpg

万千封印
浏览 151回答 1
1回答

守候你守候我

从文档(强调我的):skimage.morphology.remove_small_objects(ar, min_size=64, connectivity=1, in_place=False)删除小于指定大小的对象。期望 ar 是一个带有标记对象的数组,并删除小于 min_size 的对象。如果 ar 为 bool,则首先标记图像。这导致 bool 和 0-and-1 数组的行为可能不同。import numpy as npfrom skimage import io, morphologyimport matplotlib.pyplot as pltimg = np.array([[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],                [255, 255,   0, 255,   0,   0,   0,   0, 255, 255, 255],                [255, 255, 255, 255,   0,   0,   0,   0, 255,   0,   0],                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],                [255, 255,   0,   0,   0,   0,   0, 255,   0,   0,   0],                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],                [255, 255, 255,   0,   0,   0,   0,   0,   0,   0,   0],                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0],                [255, 255,   0,   0,   0,   0,   0,   0,   0,   0,   0]])arr = img > 0cleaned = morphology.remove_small_objects(arr, min_size=2)cleaned = morphology.remove_small_holes(cleaned, min_size=2)fig, axs = plt.subplots(1, 2)axs[0].imshow(img, cmap='gray')axs[0].set_title('img')axs[1].imshow(cleaned, cmap='gray')axs[1].set_title('cleaned')plt.show(fig)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python