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