У меня есть очень простой код, который использует стандартную команду HoughCircles в openCV для обнаружения круга. Однако моя проблема заключается в том, что мои данные (изображения) генерируются с использованием алгоритма (для целей моделирования данных), который отображает точку в диапазоне + -15% (случайным образом в этом диапазоне) r (где r - радиус круга, который был случайным образом сгенерирован между 5 и 10 (действительные числа)) и делает это на 360 градусов, используя уравнение круга. (Прикреплено образ образца). http://imgur.com/a/iIZ1N Теперь, используя команду Hough circle, мне удалось обнаружить круг примерно такого же радиуса, ручно поиграв с параметрами (настройками трекбаров, вдохновленными кодом github того же характера), но я хочу автоматизировать процесс, поскольку у меня есть более 1000 изображений, которые я хочу делать снова и снова. Есть ли лучший способ сделать это? Или, если у кого-то есть какие-то предложения, я бы очень оценил их, поскольку я начинаю работать в области обработки изображений и имею физический фон, а не CS. Грубый пример моего кода (без trackbars и т.д. ниже):Как улучшить преобразование Hough Circle для определения круга, состоящего из разбросанных точек
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