У мене є зображення, схоже на наведене нижче:
Я намагаюся знайти радіус (або діаметр) кола. Я спробував використовувати кругову трансформацію Хоффа (через matlab's imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
) і підлаштовуючись до кола або еліпса (домашня функція, яка працює досить добре для менш галасливих даних, див. Нижче).
Я також спробував обробити зображення, щоб отримати більш чітке коло, наприклад, див. Нижче:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
Однак, коли я подаю оброблене зображення будь-якою технікою (підганяння Хофа і кола \ еліпса), жодна з них не вдається виявити коло гідним способом.
Ось фрагмент коду пошуку кола, який я написав (matlab) [рядок col] = find (bw); contour = bwtraceboundary (bw, рядок (1), col (1)], 'N', підключення, num_points);
x = contour(:,2);
y = contour(:,1);
% solve for parameters a, b, and c in the least-squares sense by
% using the backslash operator
abc = [x y ones(length(x),1)] \ -(x.^2+y.^2);
a = abc(1); b = abc(2); c = abc(3);
% calculate the location of the center and the radius
xc = -a/2;
yc = -b/2;
radius = sqrt((xc^2+yc^2)-c);
Альтернативні підходи будуть оцінені ...