Шаг 4: Отслеживание границ

Результатом работы функции bwtraceboundary является поиск (X, Y) - координат точек границ исследуемого объекта. Для более точного определения радиуса исследуемого объекта нужно использовать максимальное число точек, которые принадлежат границе.

connectivity=8;
num_points=180;
contour=bwtraceboundary(BW, [row, col], 'N', connectivity, num_points);
imshow(RGB);
hold on;
plot(contour(:, 2), contour(:, 1), 'g', 'LineWidth', 2);

Шаг 5: Подгонка окружности на выделенные границы. Отобразим основное уравнение окружности: (x-xc)^2+(y-yc)^2=radius^2, где (xc, yc) - центр окружности. Это же уравнение можно представить в другом виде через параметры a, b, c x^2+y^2+a*x+b*y+c=0, где a=-2*xc, b=-2*yc, c=xc^2+yc^2-radius^2 Параметры a, b, c нужны для вычисления радиуса. x=contour(:, 2);y=contour(:, 1); % при вычислении радиуса будет% использоваться метод наименьших квадратов abc=[x y ones(length(x), 1)]\[-(x.^2+y.^2)];a=abc(1); b=abc(2); c=abc(3); % вычислим положение центра и радиус xc=-a/2;yc=-b/2;radius=sqrt((xc^2+yc^2)-c) % отобразим вычисленный центр plot(xc, yc, 'yx', 'LineWidth', 2); % отобразим полную окружность theta=0:0.01:2*pi; % используем параметрическое представление% окружности для получения координат точек Xfit=radius*cos(theta)+xc;Yfit=radius*sin(theta)+yc;plot(Xfit, Yfit);message=sprintf('Вычисленный радиус равен %2.3f пикселей', radius);text(15, 15, message, 'Color', 'y', 'FontWeight', 'bold'); radius= 80.7567

В работе приведен пример решения задачи определения радиуса окружности мотка ленты. Следует отметить, что представленная задача находит свое применение в реальных системах управления различными автоматизированными технологическими процессами. Такое внедрение компьютерных технологий приводит к повышению эффективности производства. Приведенные выше подходы также нашли свое применение в различных системах дистанционного контроля. Однако точность измерений во многом зависит от качества используемой аппаратуры.