Поиск длины маятника в движении

Проведем захват серии изображений с помощью пакета Image Acquisition Toolbox и затем проанализируем их с помощью Image Processing Toolbox. Рассмотрим это на примере задачи по вычислению длины маятника в движении.
Содержание

  • Шаг 1: Захват изображений.
  • Шаг 2: Выбор области колебания маятника.
  • Шаг 3: Сегментация маятника в каждом фрейме.
  • Шаг 4: Поиск центра сегментированного маятника в каждом фрейме.
  • Шаг 5: Вычисление радиуса колебания маятника.
Шаг 1: Захват изображений.Считываем кадры изображений маятника в движении. Кадры изображений, после их захвата с помощью Image Acquisition Toolbox, хранятся в виде MAT-файла pendulum.mat. % Доступ к захваченным изображениям (видеообъектам).% vidobj=videoinput('winvideo', 1, 'RGB24_352x288');% Формирование объекта на основе пяти фреймов.% set(vidobj, 'FrameGrabInterval', 5);% Формирование большего числа фреймов.% nFrames=50;% set(vidobj, 'FramesPerTrigger', nFrames);% Доступ к видеоустройству.% src=getselectedsource(vidobj);% Настройка исходного устройства на формирование 30 кадров в секунду.% set(src, 'FrameRate', '30');% Открытие окна просмотра.% preview(vidobj);% Начало захвата изображений.% start(vidobj);% Определение окончания захвата данных.% wait(vidobj, 10);% Извлечение фреймов из памяти.% frames=getdata(vidobj);% Удаление рабочих переменных.% delete(vidobj)% clear vidobj% Считывание MAT-файла.load pendulum;immovie(frames);

Поиск длины маятника в движении - student2.ru

Шаг 2: Выбор области колебания маятника. Мы можем наблюдать колебания маятника в верхней половине каждого кадра в серии изображений. Создадим новую серию кадров, которая содержит только область с колеблющимся маятником.При создании новой серии изображений используем функцию imcrop. nFrames=size(frames, 4);first_frame=frames(:, :, :, 1);first_region=imcrop(first_frame, rect);frame_regions=repmat(uint8(0), [size(first_region) nFrames]);for count=1:nFrames frame_regions(:, :, :, count)=imcrop(frames(:, :, :, count), rect);endimmovie(frame_regions);

Поиск длины маятника в движении - student2.ru

Шаг 3: Сегментация маятника в каждом фрейме.
Отметим, что маятник представлен в виде потемнения на фоне. Операцию сегментирования можно провести, преобразив фрейм в полутоновое изображение и далее использовать функцию im2bw с некоторым порогом. Далее нужно удалить фон с помощью функций imopen и imclearborder.

% Получение массива, содержащего сегментированное изображение маятника. seg_pend=false([size(first_region, 1) size(first_region, 2) nFrames]);centroids=zeros(nFrames, 2);se_disk=strel('disk', 3);for count=1:nFrames fr=frame_regions(:, :, :, count); imshow(fr) pause(0.2) gfr=rgb2gray(fr); gfr=imcomplement(gfr); imshow(gfr) pause(0.2) bw=im2bw(gfr, .7); % пороговая обработка bw=imopen(bw, se_disk); bw=imclearborder(bw); seg_pend(:, :, count)=bw; imshow(bw) pause(0.2)end

Поиск длины маятника в движении - student2.ru

Наши рекомендации