我正在尝试使用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)
虽然这些结果可以接受
这些肯定需要改进
如何改善我的代码?
答案 0 :(得分:0)
我建议使用 GRIP软件来实现两个图像处理管道:
一个执行阈值查找中心点,另一个执行所有其他圆。
然后可以将这些管道生成为Python OpenCV代码,您可以将它们导入到您的代码中(我已经为您完成了)。
以下是中心管道:
它执行一个简单的HSV阈值,然后执行find blob命令
以下是圆形管道:
它执行Laplacian transform(这是一种单面傅立叶变换,用于检测代表圆的边缘的对比度变化),然后执行Canny边缘检测以找到圆的边缘,然后找到并过滤轮廓的圈子。要找到圆的数量,可以将轮廓的数量除以2(与每个Laplacian环相关的内圈和外圈)
这是link,用于下载GRIP软件
这是我所有文件(包括自动生成的Python图像处理管道)的link