У меня есть изображение, которое выглядит как показано ниже:
Я пытаюсь найти радиус (или диаметр) круга. Я попытался использовать круговое преобразование Хафа (с помощью 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);
Будут оценены альтернативные подходы ...
Ответы:
Вот мое решение, оно близко к идее @ Йоды, но я изменил некоторые шаги.
Вот соответствующий код Matlab. Я использую преобразование Хафа для файла .m в моем коде.
источник
Это довольно просто сделать с помощью обработки изображений. Следующее является доказательством концепции в Mathematica . Вам придется перевести его на MATLAB.
img
.Бинаризируйте изображение и расширяйте его, а затем заполняющее преобразование. Я также удаляю паразитные мелкие компоненты, которые не связаны с основным объектом. Это должно дать вам что-то вроде следующего:
Затем найдите центр тяжести этого большого двоичного объекта и эквивалентный радиус диска большого двоичного объекта (openCV, MATLAB имеют эквивалентные команды для этого)
Это оно! Теперь нарисуйте исходное изображение и круг с указанным выше центром и радиусом, чтобы увидеть, как оно подходит:
источник