我的目标是从显微镜准确测量孔的直径。工作流程是:拍摄图像,进行拟合,拟合,将以像素为单位的半径转换为mm,写入csv
这是我的图像处理脚本的输出,用于测量孔的直径。我遇到一个问题,就是我的圆拟合似乎优先考虑匹配轮廓,而不是像最小二乘法那样。
我也选择了许多类似这样的平均值:
我的问题是我想快速扫描以确保适合的圆。权衡是我拥有的合身性越强,合身性越现实,我拥有的合体性越少,越容易确保数字正确。我的圈子并不总是像这个圈子一样漂亮和圆滑,因此对我来说很重要。
如果您可以看一下并告诉我如何在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
[一种方法是Gaussian blur然后Otsu's threshold图像以获得二进制图像。从这里开始,我们用morphological opening执行elliptical shaped kernel。此步骤将有效去除微小的噪音颗粒。为了获得良好的圆弧估计,我们找到轮廓并使用cv2.minEnclosingCircle()
给出半径。这是可视化效果:
输入图像(截图)
二进制图像
打开形态
结果cv2.minEnclosingCircle()
绘制到蒙版上的圆
->
从这里您可以根据您的校准比例将像素转换为mm
代码
Radius: 122.11396026611328