我有一个非常基本的代码,它使用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;
我将填补圈尽快做到这一点很简单,尽快回复你。 (因为它是一个模拟,我可以控制我给程序的数据,在数据生成过程中,没有填充的圆圈就是我的懒惰)。 至于倒置的颜色,我在印象中二值化图像使图像只有黑色和白色,我在这个假设是错误的吗? – user2918711
这是正确的 - 二值化使图像变成黑白。我只是想确保背景是黑色的,前景是白色的。否则,形态学操作会相反。 – MateuszB
我尝试了所有这一切,虽然它确实改善了前几张图片的结果,但程序未能为更多图像做到这一点。我也想过实现一种搜索算法,以获得累加器阵列的最佳值,以检测最佳单圆,但程序开始检测到的圆比我想要的还要小。 – user2918711