image-processing - 可以使用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 像素的斑点并删除它们。
解决方案
当你传入一个整数图像时,scikit-image 假定所有相同值的像素都属于同一个对象,即使它们没有连接。因此,在您的情况下,所有像素都被视为同一(大)对象的一部分,因此不会删除任何像素。相反,你应该使用
from skimage.measure import label
noise_reduced = morphology.remove_small_objects(label(edges), 2,)
希望这可以帮助!
推荐阅读
- javascript - 模拟 window.performance.getEntriesByType
- sass - 如何从 Vite 中的 node_modules 加载 scss 变量和字体文件
- docker - Gitlab runner - 使用 ECR 注册表作为注册表镜像来减少对 dockerhub 的调用
- go - Go 中的验证器认为正确的请求正文是无效的
- swiftui - 诊断“线程 1:EXC_BREAKPOINT (code=1, subcode=0x195eff214)”错误
- arrays - Kotlin 是否支持像 Rust 和 Swift 这样的引用字符串/数组切片?
- android - 将数据保存在应用程序中,以便稍后在 android studio 中显示
- qemu - QEMU guest如何将数据包发送到主机的NIC?
- plugins - 无法启用 rabbitmq rabbitmq_auth_backend_oauth2 插件
- typescript - 使用 toggleDrawer 导航时出错。ToggleDrawer 不是函数