小言_互联网的博客

图像处理:斑点检测和连接的组件

319人阅读  评论(0)

点击上方“小白学视觉”,选择加"星标"或“置顶


   
  1. 重磅干货,第一时间送达

蝴蝶与检测到的斑点

结合并补充图像中发现的每个单独的成分,可以绘制所需的部分内容。但是,如果只想独立检查每个单独的组件怎么办?从整个图片中分离出来,并创建一个不同的部分,这时就可以使用斑点检测技术和连接的分量算法分别分析图像分量。

斑点检测

它是为模型建立准备图像数据的最后步骤之一,通常在颜色检测和降噪之后执行操作,以最终从图像中找到所需的对象以进行进一步分析。以下汇总了斑点检测在图像处理中必不可少的原因:

  • 寻找特征

  • 描述要素周围的区域

  • 比较功能以查找匹配项

  • 兼容后使用这些匹配项

进行斑点检测的方法有三种:高斯的拉普拉斯算子(LoG),高斯的差分算子(DoG)和黑森州的行列式(DoH)。我们将不深入研究这些算法背后的数学原理,而是将讨论这些概念的python实现。为了说明起见,我们将使用此图像查看实际的斑点检测。

但是如果不导入必要的python库来完成所有这些工作,我们该如何编码?


   
  1. from skimage.io import imread, imshow
  2. from skimage.color import rgb2gray
  3. from skimage.feature import blob_dog, blob_log, blob_doh
  4. from math import sqrt
  5. import matplotlib.pyplot as plt
  6. import numpy as np

三种Blob检测方法的代码实现:


   
  1. blobs_log = blob_log(im_bw, max_sigma=30, num_sigma=10, threshold=.1)
  2. # Compute radii in the 3rd column.
  3. blobs_log[:, 2] = blobs_log[:, 2] * sqrt(2) #normalizing and scaling parameter so that it matches the
  4. blobs_dog = blob_dog(im_bw, max_sigma=30, threshold=.1)
  5. blobs_dog[:, 2] = blobs_dog[:, 2] * sqrt(2)
  6. blobs_doh = blob_doh(im_bw, max_sigma=30, threshold=.01)
  7. blobs_list = [blobs_log, blobs_dog, blobs_doh]
  8. colors = ['yellow', 'lime', 'red']
  9. titles = ['Laplacian of Gaussian', 'Difference of Gaussian',
  10. 'Determinant of Hessian']
  11. sequence = zip(blobs_list, colors, titles)
  12. fig, axes = plt.subplots(1, 3, figsize=(9, 3), sharex=True, sharey=True)
  13. ax = axes.ravel()
  14. for idx, (blobs, color, title) in enumerate(sequence):
  15. ax[idx].set_title(title)
  16. ax[idx].imshow(im_bw, interpolation='nearest')
  17. for blob in blobs:
  18. y, x, r = blob
  19. c = plt.Circle((x, y), r, color=color, linewidth=2, fill=False)
  20. ax[idx].add_patch(c)
  21. ax[idx].set_axis_off()
  22. plt.tight_layout()
  23. plt.show()

从左到右,可以观察到物体的检测变得更加灵敏。至于LoG,在某些情况下会将不同的对象聚集成一个检测对象。对于DoG和DoH,情况恰恰相反,对于DoH而言,检测更加精细。假定只检测一次的对象,被多次检测到。尽管我们成功地对特定图像实现了斑点检测,但在大多数情况下,在现实生活中,我们不仅关注本质上是圆形的斑点。

连接的组件

相反,我们将连接的组件视为分析中关注的焦点。这种方法的明显缺点是,它严重依赖于数据的干净程度。因此,通过调整颜色空间和进行形态学运算就可以解决问题,让我们回到我们的图像。

在使用所连接组件的skimage的label和region_properties函数之前,必须首先执行彻底的图像清理。下面是用户定义的功能,以执行此操作:


   
  1. def multi_dil(im,num):
  2. for i in range(num):
  3. im = dilation(im)
  4. return im
  5. def multi_ero(im,num):
  6. for i in range(num):
  7. im = erosion(im)
  8. return im

我们使用此链式操作来清洁图像:


   
  1. im_cleaned = multi_ero(multi_dil(im_bw,5),5)
  2. imshow(im_cleaned)

现在这是相对干净的,让我们获取该图像的标签和属性!


   
  1. label_im = label(im_cleaned)
  2. imshow(label_im)

注意:有连接的糖果(意味着它们将被视为单个对象)。因此,它们将具有相同的标签。必须执行形态学操作以分离图像。但是,请注意,这将影响其他对象,这意味着你们将删除或添加信息。

现在,让我们使用regionprops并查看以下属性:

  1. 区域

  2. 周长

  3. bbox —边界框尺寸

  4. bbox_area —边界框的面积

  5. 质心—质心的坐标

  6. 凸面图像— Blob的凸面外壳

  7. 凸面区域—凸面船体的面积

  8. 偏心率—测量其如何适合圆的椭圆(0)(对象的伸长程度)

  9. major_axis_length —拟合的椭圆的主要矩的长度

  10. minor_axis_length —拟合的椭圆的次要矩的长度

让我们尝试一下第一个糖果的区域:


   
  1. props=regionprops(label_im)
  2. props[0].area #area (zero) 0th object in the image

输出:4453

第五糖果的边框坐标如何?

props[5].bbox #bounding box of 5th image

输出:(118、473、209、521)

使用label和region_props函数可以完成更多工作。对这个主题有深入的了解,因为它将在图像处理的更高级的主题中派上用场。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


转载:https://blog.csdn.net/qq_42722197/article/details/114650553
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场