我正在嘗試對一組灰度圖像執行圖像分析,如下圖所示:主要目標是能夠測量橢圓形液滴的尺寸并確定其中心坐標。我已經在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()
結果:
您可以從這里繼續。
添加回答
舉報
0/150
提交
取消