赞
踩
污点检测BlobDetection在之前好像还没有怎么听说过,最近因为项目的缘故简单了解了一些,之前对于检测类的问题我大都是会直接定义为目标检测的方式去实现,现在有专门的检测方法就想着简单了解一下,对于我来讲,了解学习最好的方式就是实践,这里也不例外,首先看下效果图。
简单介绍下了解的几种算法:
这是最准确、最慢的方法。它计算高斯图像的拉普拉斯算子,标准差不断增加,并将其叠加在立方体中。Blob是此立方体中的局部格言。由于卷积过程中内核大小较大,检测较大的斑点尤其慢。仅检测到暗背景上的亮斑点。
方法实现:
blob_log(image_gray, max_sigma=30, num_sigma=10, threshold=.1)
这是LoG方法的更快近似。在这种情况下,图像随着标准差的增加而模糊,并且两个连续模糊图像之间的差异被叠加在一个立方体中。该方法与用于检测较大斑点的LoG方法具有相同的缺点。斑点在黑暗中再次被认为是明亮的。
方法实现:
blob_dog(image_gray, max_sigma=30, threshold=.1)
这是最快的方法。它通过在图像的黑森行列式矩阵中找到极大值来检测斑点。检测速度与斑点的大小无关,因为在内部实现使用盒滤波器而不是卷积。检测到亮对暗以及亮对暗斑点。缺点是无法准确检测到小斑点(<3px)。
方法实现:
blob_doh(image_gray, max_sigma=30, threshold=.01)
这里我们以经典的哈勃极限深场图像为例看下效果:
三种算法对比效果图如下:
可视化核心实现如下:
- fig, axes = plt.subplots(1, 3, figsize=(9, 3), sharex=True, sharey=True)
- ax = axes.ravel()
- for idx, (blobs, color, title) in enumerate(sequence):
- ax[idx].set_title(title)
- ax[idx].imshow(image)
- for blob in blobs:
- y, x, r = blob
- c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False)
- ax[idx].add_patch(c)
- ax[idx].set_axis_off()
- plt.tight_layout()
- plt.savefig(save_path)
为了进一步查看算法的效果,这里又找来了其他领域的图像如下:
【细菌数据】
效果图如下:
【海底生物数据】
效果图如下:
【文本数据】
效果图如下:
【养殖数据】
效果图如下:
【宇宙星空数据】
效果图如下:
效果图如下:
效果图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。