4

我有一個非常基本的代碼,它使用openCV中的標準化HoughCircles命令來檢測圓。但是,我的問題是,我的數據(圖像)是使用一種算法(用於數據模擬)生成的,該算法繪製了一個點,該點位於r的±15%(在此範圍內隨機)範圍內(其中r是半徑(隨機生成的數值在5到10之間(實數)),然後使用圓的方程對360度進行計算。 (附上示例圖片)。 http://imgur.com/a/iIZ1N 現在使用Hough circle命令,我可以通過手動使用參數(通過設置軌跡條,靈感來自同一性質的github代碼)來檢測大約相同半徑的圓,但我想自動化這個過程就像我有1000多張圖片一樣,我想反覆做這個。有沒有更好的方法來做到這一點?或者如果有人有任何建議,我會非常感謝他們,因爲我是圖像處理領域的初學者,並且擁有物理背景而非CS。 我的代碼粗略樣品(不含trackbars等低於):如何改進霍夫圓變換以檢測由散點構成的圓

Mat img = imread("C:\\Users\\walee\\Documents\\MATLAB\\plot_2 .jpeg", 0); 
Mat cimg,copy; 
copy = img; 
medianBlur(img, img, 5); 
GaussianBlur(img, img, Size(1, 5), 1.1, 0); 

cvtColor(img, cimg, COLOR_GRAY2BGR); 
vector<Vec3f> circles; 
HoughCircles(img, circles, HOUGH_GRADIENT,1, 10, 94, 57, 120, 250); 
for (size_t i = 0; i < circles.size(); i++) 
{ 
    Vec3i c = circles[i]; 
    circle(cimg, Point(c[0], c[1]), c[2], Scalar(0, 0, 255), 1, LINE_AA); 
    circle(cimg, Point(c[0], c[1]), 2, Scalar(0, 255, 0), 1, LINE_AA); 
} 
imshow("detected circles", cimg); 
waitKey(); 
return 0; 

回答

0

如果所有圖像具有相同的性質(黑軸和點爲界),我會建議做以下幾點:

1)通過發現黑色元素除去軸線並與背景替換它們

2)反轉的顏色有黑色背景

3)執行形態學閉以填充的圓圈,並創造更多的固體分

4)(可選),如果點的密度高,你可以嘗試申請另一個形態操作,即擴張使數據圓薄

5)申請霍夫圈

+0

我將填補圈儘快做到這一點很簡單,儘快回覆你。 (因爲它是一個模擬,我可以控制我給程序的數據,在數據生成過程中,沒有填充的圓圈就是我的懶惰)。 至於倒置的顏色,我在印象中二值化圖像使圖像只有黑色和白色,我在這個假設是錯誤的嗎? – user2918711

+0

這是正確的 - 二值化使圖像變成黑白。我只是想確保背景是黑色的,前景是白色的。否則,形態學操作會相反。 – MateuszB

+0

我嘗試了所有這一切,雖然它確實改善了前幾張圖片的結果,但程序未能爲更多圖像做到這一點。我也想過實現一種搜索算法,以獲得累加器陣列的最佳值,以檢測最佳單圓,但程序開始檢測到的圓比我想要的還要小。 – user2918711