首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鲁棒自动液滴装配

鲁棒自动液滴装配
EN

Stack Overflow用户
提问于 2018-07-01 15:43:05
回答 1查看 169关注 0票数 1

我试图对一组灰度图像进行图像分析,如以下图像:

主要目标是能够测量椭圆液滴的尺寸并识别它们的中心坐标。我尝试过openCV和scikit图像中的Hough循环变换。到目前为止,我所看到的关于scikit的所有例子都比openCV运行得慢。

我在这段代码中取得了一定的成功(摘自本例):

代码语言:javascript
复制
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的这些参数。

代码语言:javascript
复制
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\cv2.THRESH_BINARY,15,5)

然而,我仍然无法找到更小的液滴使用上面的代码。

我有几千张图像要处理。我需要该算法能够自动找到最优参数的转换或阈值。到目前为止,我还不知道如何实现这样的东西。

任何正确执行的建议将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 18:49:19

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

代码:

代码语言:javascript
复制
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()

结果:

你可以从这里继续下去。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51124738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档