当前位置:   article > 正文

python基于高斯拉普拉斯LoG/高斯差DoG/黑森行列式DoH开发实践图像污点检测_高斯拉普拉斯代码

高斯拉普拉斯代码

污点检测BlobDetection在之前好像还没有怎么听说过,最近因为项目的缘故简单了解了一些,之前对于检测类的问题我大都是会直接定义为目标检测的方式去实现,现在有专门的检测方法就想着简单了解一下,对于我来讲,了解学习最好的方式就是实践,这里也不例外,首先看下效果图。

简单介绍下了解的几种算法:

一、高斯拉普拉斯(LoG)

这是最准确、最慢的方法。它计算高斯图像的拉普拉斯算子,标准差不断增加,并将其叠加在立方体中。Blob是此立方体中的局部格言。由于卷积过程中内核大小较大,检测较大的斑点尤其慢。仅检测到暗背景上的亮斑点。

方法实现:

blob_log(image_gray, max_sigma=30, num_sigma=10, threshold=.1)

二、高斯差(DoG)

这是LoG方法的更快近似。在这种情况下,图像随着标准差的增加而模糊,并且两个连续模糊图像之间的差异被叠加在一个立方体中。该方法与用于检测较大斑点的LoG方法具有相同的缺点。斑点在黑暗中再次被认为是明亮的。

方法实现:

blob_dog(image_gray, max_sigma=30, threshold=.1)

三、黑森行列式(DoH)

这是最快的方法。它通过在图像的黑森行列式矩阵中找到极大值来检测斑点。检测速度与斑点的大小无关,因为在内部实现使用盒滤波器而不是卷积。检测到亮对暗以及亮对暗斑点。缺点是无法准确检测到小斑点(<3px)。

方法实现:

blob_doh(image_gray, max_sigma=30, threshold=.01)

这里我们以经典的哈勃极限深场图像为例看下效果:

三种算法对比效果图如下:

可视化核心实现如下:

  1. fig, axes = plt.subplots(1, 3, figsize=(9, 3), sharex=True, sharey=True)
  2. ax = axes.ravel()
  3. for idx, (blobs, color, title) in enumerate(sequence):
  4. ax[idx].set_title(title)
  5. ax[idx].imshow(image)
  6. for blob in blobs:
  7. y, x, r = blob
  8. c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False)
  9. ax[idx].add_patch(c)
  10. ax[idx].set_axis_off()
  11. plt.tight_layout()
  12. plt.savefig(save_path)

为了进一步查看算法的效果,这里又找来了其他领域的图像如下:

【细菌数据】

效果图如下:

【海底生物数据】

效果图如下:

【文本数据】

效果图如下:

【养殖数据】

效果图如下:

【宇宙星空数据】

效果图如下:

效果图如下:

效果图如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/69768
推荐阅读
相关标签
  

闽ICP备14008679号