我有一个非常基本的代码,该代码在openCV中使用标准化的HoughCircles命令来检测圆。但是,我的问题是我的数据(图像)是使用一种算法(出于数据模拟目的)生成的,该算法绘制的点在r的+ -15%范围内(随机在该范围内)(其中r是半径的圆角,它是随机生成的,介于5到10(实数)之间,并使用圆的方程进行360度旋转。 (附有样本图片)。
http://imgur.com/a/iIZ1N
现在使用Hough circle命令,我能够通过手动操作参数(通过设置轨迹栏,从具有相同性质的github代码中得到启发)来检测半径近似相同的圆,但是我想自动化该过程我有1000多个图像,要一遍又一遍地执行。有更好的方法吗?或者,如果有人有任何建议,我将不胜感激,因为我是图像处理 Realm 的初学者,并且具有物理背景而非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;
最佳答案
如果所有图像都具有相同的性质(黑色轴和点为圆形),则建议执行以下操作:
1)通过找到黑色元素删除轴并将其替换为背景
2)反转颜色以具有黑色背景
3)执行形态学闭合以填充圆圈并创建更多实心点
4)(可选)如果点的密度较高,则可以尝试应用另一种形态学运算,即扩张以使数据圆变薄
5)申请霍夫圈