II Всероссийская конференция пользователей MATLAB, 25-26 мая 2004 года >>
На первую страницу
Рубрика Matlab&Toolboxes
Российские MATLAB-разработки
Вход
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление \ К следующему разделу \ К предыдущему разделу

Измерение радиуса части мотка ленты

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

Содержание
  • Шаг 1: Считывание изображения.
  • Шаг 2: Пороговая обработка изображения.
  • Шаг 3: Определение положения начальной точки границы объекта.
  • Шаг 4: Отслеживание границ.
  • Шаг 5: Подгонка окружности на выделенные границы.

Шаг 1: Считывание изображения.

Считаем изображение из файла tape.png. 

RGB=imread('tape.png');
imshow(RGB);
text(15,15,'Измерение радиуса',...
     'FontWeight','bold','Color','y');

Шаг 2: Пороговая обработка изображения.

Преобразуем изображение в бинарное для последующего получения координат границ с помощью функции bwtraceboundary.

I=rgb2gray(RGB);
threshold=graythresh(I);
BW=im2bw(I, threshold);
imshow(BW)

Шаг 3: Определение положения начальной точки границы объекта.

Для реализации функции bwtraceboundary нужно указать начальную точку определения границы. Эта точка используется для начала отслеживания границы.

dim=size(BW);
col=round(dim(2)/2)-90;
row=min(find(BW(:, col)));

Шаг 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

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

В оглавление \ К следующему разделу \ К предыдущему разделу


О получении локальных копий сайтов
  Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro   
E-mail:    
  Информация на сайте была обновлена 11.05.2004 Copyright 2001-2004 SoftLine Co 
Наши баннеры