Open CV琐碎圆检测-如何获得最小二乘而不是轮廓?

问题描述 投票:2回答:2

我的目标是从显微镜准确测量孔的直径。工作流程是:拍摄图像,进行拟合,拟合,将以像素为单位的半径转换为mm,写入csv

skewed hough circle

这是我的图像处理脚本的输出,用于测量孔的直径。我遇到一个问题,就是我的圆拟合似乎优先考虑匹配轮廓,而不是像最小二乘法那样。

我也选择了许多类似这样的平均值:

many fits to avg

我的问题是我想快速扫描以确保适合的圆。权衡是我拥有的合身性越强,合身性越现实,我拥有的合体性越少,越容易确保数字正确。我的圈子并不总是像这个圈子一样漂亮和圆滑,因此对我来说很重要。

如果您可以看一下并告诉我如何在5个圆的数量级上执行更多的最小二乘法,这是我的脚本拟合圆的一部分。我不想使用最小圆周检测,因为流体正在流过此孔,所以我希望它更像液压直径-谢谢!

(thresh, blackAndWhiteImage0) = cv2.threshold(img0, 100, 255, cv2.THRESH_BINARY) #make black + white 
median0 = cv2.medianBlur(blackAndWhiteImage0, 151) #get rid of noise 
circles0 = cv2.HoughCircles(median0,cv2.HOUGH_GRADIENT,1,minDist=5,param1= 25, param2=10, minRadius=min_radius_small,maxRadius=max_radius_small) #fit circles to image
python opencv image-processing hough-transform
2个回答
0
投票

我有一个建议正在看cv2.fitEllipse()

OpenCV fitEllipse example on ballons

OpenCV fitEllipse result

希望您可以使用椭圆机芯/高度之间的长宽比来告诉奇数。


0
投票

[一种方法是Gaussian blur然后Otsu's threshold图像以获得二进制图像。从这里开始,我们用morphological opening执行elliptical shaped kernel。此步骤将有效去除微小的噪音颗粒。为了获得良好的圆弧估计,我们找到轮廓并使用cv2.minEnclosingCircle()给出半径。这是可视化效果:

输入图像(截图)

二进制图像

打开形态

结果cv2.minEnclosingCircle()绘制到蒙版上的圆

->

从这里您可以根据您的校准比例将像素转换为mm

代码

Radius: 122.11396026611328
© www.soinside.com 2019 - 2024. All rights reserved.