斑点(blob)检测

2023-01-07  本文已影响0人  大龙10

一、什么是斑点?

  在下图中,暗连通区域是斑点,斑点检测的目标是识别和标记这些区域。


二、简单的斑点检测器示例

import cv2
import numpy as np
#读图片
im = cv2.imread('blod.jpg', cv2.IMREAD_GRAYSCALE)
#创建一个检测器并使用默认参数
detector = cv2.SimpleBlobDetector()
#检测斑点
keypoints = detector.detect(im)
#将检测到的斑点圈上红色的圆圈
#DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS保证圆的大小和斑点大小一样
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#显示检测到的点
cv2.imshow('keypoints', im_with_keypoints)
cv2.waitKey(0)

三、斑点检测器是如何工作呢?

  顾名思义,SimpleBlobDetector是一种简单的算法,该算法由检测器的参数控制,并由以下几步组成:

1. 阈值处理:

2. 分组:

3. 合并:

4. 中心和半径计算:

四、按颜色,大小和形状来过滤斑点

  可以设置SimpleBlobDetector的参数来过滤我们想要的斑点类型:

1. 按颜色:

2. 按大小:

3. 按形状:

现在形状有三种不同的参数

五、如何设置SimpleBlobDetector参数

#设置SimpleBlodDetector参数
params = cv2.SimpleBlobDetector_Params()
#改变阈值
params.minThreshold = 10
params.maxThreshold = 200
#通过面积滤波
params.filterByArea = True
params.minArea = 1500
#通过圆度滤波
params.filterByCircularity = True
params.minCircularity = 0.1
#通过凸度滤波
params.filterByConvexity = True
params.minConvexity = 0.87
#通过惯性比滤波
params.filterByInertia = True
params.minInertiaRatio = 0.01
#创建一个检测器并使用默认参数
ver = (cv2.version).split(',')
if int(ver[0]) < 3:
    detector = cv2.SimpleBlobDetector(params)
else:
    detector = cv2.SimpleBlobDetector_create(params)

六、资料来源

码农家园:https://www.codenong.com/cs106018683/
上一篇 下一篇

猜你喜欢

热点阅读