我有一个非常基本的代码,它使用openCV中的标准化HoughCircles命令来检测圆圈。然而,我的问题是我的数据(图像)是使用算法(用于数据模拟的目的)生成的,该算法绘制r的+ -15%(在此范围内随机)范围内的点(其中r是半径)圆圈的,随机生成的,在5到10之间(实数)),并使用圆的方程式360度。 (附图片样本)。 http://imgur.com/a/iIZ1N 现在使用Hough circle命令,我能够通过手动播放参数来检测大致相同半径的圆(通过设置轨迹栏,灵感来自相同性质的github代码),但我希望将过程自动化为我有超过1000张图像,我想一遍又一遍地做这件事。有没有更好的方法呢?或者如果有人有任何建议,我会非常感谢他们,因为我是图像处理领域的初学者,并且拥有物理背景而不是CS。 我的代码的粗略样本(没有轨道栏等):
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 :(得分:0)
如果所有图像都具有相同的性质(黑轴和点为圆圈),我建议您执行以下操作:
1)通过查找黑色元素来移除轴并将其替换为背景
2)将颜色反转为黑色背景
3)执行形态学闭合以填充圆圈并创建更多实心点
4)(可选)如果点的密度很高,你可以尝试应用另一种形态学操作,即扩张使数据圈更薄
5)应用Hough圈