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图像处理管道)
我正在尝试使用 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图像处理管道)