Python opencv 最佳阈值

Python opencv optimal thresholding

我正在尝试使用 Otsu 阈值检测图像数据集中的 roi。虽然在某些情况下结果是正确的,但有些情况并不是那么好。我正在使用下面的代码。

import cv2 as cv
import numpy as np

path  = "./images/{}.png".format

for num in range(1000):
    filename  = path(num)
    img       = cv.imread(filename, cv.IMREAD_GRAYSCALE)
    res       = cv.threshold(img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)[1]
    res       = np.hstack((img, res))
    cv.imwrite(filename.replace(".png", "_.png"), res)

虽然这些结果是可以接受的

这些肯定需要改进

如何改进我的代码?

我建议使用 GRIP 软件 来实现两个图像处理管道: 一个执行阈值以找到中心点,另一个执行阈值以找到所有其他圆。
然后可以将这些管道生成为 Python OpenCV 代码,您可以将它们导入到您的代码中(我已经为您完成了)。

这里是中心点管道: 它执行简单的 HSV 阈值,然后执行查找 blob 命令


这里是圆形管道:
它执行一个Laplacian transform(这是一个one-sided傅里叶变换来检测代表圆圈边缘的对比度变化),然后Canny边缘检测找到圆圈的边缘,然后找到并过滤圆的轮廓。要找到圆的数量,您可以将轮廓的数量除以 2(与每个拉普拉斯环相关联的内圆和外圆)


这里是link下载GRIP软件

这是我所有文件的link(包括auto-generatedPython图像处理管道)