为了账号安全,请及时绑定邮箱和手机立即绑定

稳固且可自动滴定

稳固且可自动滴定

精慕HU 2021-03-31 17:11:21
我正在尝试对一组灰度图像执行图像分析,如下图所示:主要目标是能够测量椭圆形液滴的尺寸并确定其中心坐标。我已经在openCV和scikit-image中尝试了霍夫循环变换。与openCV相比,到目前为止,我所看到的所有scikit图像示例的运行速度都非常慢。我在这段代码中取得了一定的成功(摘自示例):img = read_img[600:,:]img = cv2.medianBlur(img,5)cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,30,            param1=45,param2=20,minRadius=1,maxRadius=45)circles = np.uint16(np.around(circles))for i in circles[0,:]:    # draw the outer circle    cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)    # draw the center of the circle    cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)cv2.imshow('detected circles',cimg)fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(20, 20))ax.imshow(cimg)可以检测主要液滴,但无法捕获三个较小的液滴。我能够构建的最佳阈值是针对openCV的这些参数th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\cv2.THRESH_BINARY,15,5)但是,我仍然无法使用上面的代码找到较小的液滴。我有两千张要处理的图像。我需要该算法能够自动找到用于变换或阈值的最佳参数。到目前为止,我还不知道如何实现这样的目标。任何建议的适当实施将不胜感激!
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

我只是建议了可能的预处理步骤,而不是完整的解决方案。您可以在图像的绿色通道上执行自适应阈值处理。


代码:


img = cv2.imread('C:/Users/Jackson/Desktop/droplet.jpg', 1)


#--- Resized the image to half of its original dimension --

img = cv2.resize(img, (0, 0), fx = 0.5, fy = 0.5)


#--- I narrowed down to these values after some rigorous trial-and-error ---

th3 = cv2.adaptiveThreshold(img[:,:,1], 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\

            cv2.THRESH_BINARY, 63, 5)


cv2.namedWindow('Original', 0)

cv2.imshow('Original', img) 

cv2.namedWindow('th3', 0)

cv2.imshow('th3', th3)         

cv2.waitKey()

cv2.destroyAllWindows()

结果:

//img1.sycdn.imooc.com//607ea5af0001ebba05990805.jpg

您可以从这里继续。


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号