如何在OpenCV中获取轮廓检测的动态阈值

5
在我的图像数据库中,需要进行以下两个操作:1)检测图像中是否存在黑色轮廓,即flake;2)找到最小闭合圆以测量flake的半径。然而,这些图像的光照略有不同。以下是一些示例。第一个示例非常容易检测和测量。

enter image description here

但这些更难:

enter image description here enter image description here enter image description here

我的初步想法是使用与图像像素平均值相关的阈值。
在OpenCV中是否有其他计算这种动态阈值的方法?
2个回答

5
我认为你所需要的是 cv2.adaptiveThreshold() 或者 Otsu's thresholding,以满足您对第一个要求的需求,我们可以使用最小阈值面积来确定颗粒是否存在。 对于第二个要求,一旦检测到轮廓,我们就可以使用矩来确定半径。以下是一种简单方法:
  • 将图像转换为灰度并进行中值模糊处理
  • 自适应阈值
  • 形态学闭运算以平滑图像
  • 膨胀以增强轮廓
  • 查找并按轮廓面积排序

主要思想是使用大的中值模糊去噪声,然后进行自适应阈值处理。 以下是每个图像的结果。 对于您的一些图片,黑点实际上不是圆形,而是更像椭圆形状。 您可以决定如何处理这种情况。

enter image description here enter image description here enter image description here enter image description here

import cv2

image = cv2.imread('4.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
blur = cv2.medianBlur(gray, 25)
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,27,6)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=1)
dilate = cv2.dilate(close, kernel, iterations=2)

cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:10]

minimum_area = 500
for c in cnts:
    area = cv2.contourArea(c)
    if area > minimum_area:
        # Find centroid
        M = cv2.moments(c)
        cX = int(M["m10"] / M["m00"])
        cY = int(M["m01"] / M["m00"])
        cv2.circle(image, (cX, cY), 20, (36, 255, 12), 2) 
        x,y,w,h = cv2.boundingRect(c)
        cv2.putText(image, 'Radius: {}'.format(w/2), (10,20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36,255,12), 2)
        break

cv2.imshow('thresh', thresh)
cv2.imshow('close', close)
cv2.imshow('image', image)
cv2.waitKey()

1

您必须从阈值处理开始。

这里有一些阈值处理方法,您可以选择其中一个,并使用良好的参数,大多数噪声将会消失。

然后,您可以进行边缘检测。

最后,霍夫变换似乎是检测圆形的最佳方法(通过霍夫圆形变换的参数去除噪声)。

您可以设置最小和最大半径,因此,如果您有平均半径的想法,可以通过此方式进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接