为了账号安全,请及时绑定邮箱和手机立即绑定

无法通过 remove_small_objects 去除噪音

无法通过 remove_small_objects 去除噪音

万千封印 2021-11-30 10:23:15
我有一个黑白图像。我尝试通过 消除噪音remove_small_objects。import cv2 as cvimport numpy as npfrom skimage import morphologyimg = 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:        breakcv.destroyAllWindows()然而,它并没有像我预期的那样工作。中间的白色像素 255 仍然存在。我做错什么了吗?谢谢
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

从文档(强调我的):


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 np

from skimage import io, morphology

import matplotlib.pyplot as plt


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]])


arr = img > 0

cleaned = 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)

//img1.sycdn.imooc.com//61a58b370001350f03660170.jpg

查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信