У меня есть изображение, которое выглядит как показано ниже:
Я пытаюсь найти радиус (или диаметр) круга. Я попытался использовать круговое преобразование Хафа (с помощью Matlab's imfindcircles(bw,[rmin rmax],'ObjectPolarity','bright')
) и подгонку к кругу или эллипсу (домашняя функция, которая работает довольно хорошо для менее шумных данных, см. Ниже).
Я также попробовал некоторую обработку изображений, чтобы получить более четкий круг, например, см. Ниже:
se = strel('disk', 2);
bw = imdilate(bw, se);
bw = bwareaopen(bw,100000);
bw = edge(bw);
Однако, когда я передаю обработанное изображение любым из методов (аппроксимация Хафа и круга \ эллипса), ни одному из них не удается обнаружить круг достойным образом.
Вот фрагмент кода искателя круга, который я написал (matlab) [row col] = find (bw); contour = bwtraceboundary (bw, row (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);
Будут оценены альтернативные подходы ...