Этот пример показывает, как получить изображения в реальном времени от веб-камеры, обработать изображения с помощью анализа больших двоичных объектов с фиксированной точкой и определить мировые координаты для оценки лазерной пистолетной цели.
Технология, представленная в этом примере, используется в широкой области значений применений, таких как оценка расстояний до объектов перед автомобилем и медицинский анализ изображений камер. Ключевые возможности этого примера включают:
Анализ больших двоичных объектов с фиксированной точкой для сбора измерений
Сбор изображений в реальном времени
Калибровка камеры для определения мировых координат точек изображения
Правильные изображения для искажения объектива, чтобы гарантировать точность собранных измерений в мировых единицах измерения
Определите мировые координаты точек изображения путем отображения пиксельных местоположений в местоположения в реальных модулях
Весь код для этого примера хранится в папке examples. Для редактирования кода перейдите к этой папке.
cd(fullfile(docroot,'toolbox','fixpoint',... 'examples','laser_target_example'));
+LaserTargetExample
папка в место с возможностью записи.Image Acquisition Toolbox™ позволяет вам получать изображения и видео с камер и кадровых захватов непосредственно в MATLAB ® и Simulink ®. Использование пакета поддержки Image Acquisition Toolbox для GigE Vision® Оборудование или MATLAB® Пакет поддержки для веб-камер USB, настройте камеру, чтобы получить изображения в реальном времени, чтобы выполнить анализ.
Дополнительные сведения о настройке камеры см. в разделе Подключение устройства (Image Acquisition Toolbox).
Используйте следующие команды для создания целевого объекта для печати для использования в упражнении. Код генерирует файл постскрипта, который можно открыть и распечатать двусторонним образом, с целью на одной стороне, и шахматной доской для калибровки камеры на другой стороне.
distance = 10; % meters offset_mm = 0; % mm print_target = true; LaserTargetExample.make_target_airpistol10m(distance, ... offset_mm, print_target)
Вы можете найти предустановленные цели в +LaserTargetExample/targets_for_printing
папка.
Установите камеру так, чтобы она обращена к шахматной стороне цели. Стрелок сталкивается с целью. Можно сохранить цель и камеру в фиксированных положениях, установив их на плате.
Калибровка камеры - это процесс оценки параметров объектива и датчика изображения. Эти параметры измеряют объекты, захваченные камерой. Используйте приложение Camera Calibrator (Computer Vision Toolbox), чтобы обнаружить шахматный шаблон на задней панели цели и удалить любые искажения. Определите порог окружающего света на цели. Возможно, потребуется настроить настройки камеры или подсветку так, чтобы изображение не было насыщено. Используйте pointsToWorld
функция для определения мировых координат точек изображения.
Для получения дополнительной информации смотрите Что такое калибровка камеры? (Computer Vision Toolbox).
Алгоритм забивает выстрелы, обнаруживая яркий свет лазерного пистолета. Во время съемки получайте систему координат и обнаруживайте, есть ли яркое пятно. Если существует яркое пятно над заданным порогом, обработайте эту систему координат.
Используйте анализ больших двоичных объектов, чтобы найти центр яркого пятна и переместить положение от пиксельных координат к мировым координатам. Анализ больших двоичных объектов выполняется в фиксированной точке, потому что изображение сохранено в виде 8-битного целого числа со знаком. Найдя центр яркого пятна в мировых координатах, вычислите его расстояние от бульсея в источник и присвойте значение точки выстрелу.
Добавьте пример кода к пути.
addpath(fullfile(docroot,'toolbox','fixpoint',... 'examples','laser_target_example'));
Запустите симуляцию, выполнив run
скрипт, сохраненный в +LaserTargetExample
папка.
LaserTargetExample.run
(1) gigecam (2) webcam (3) simulation Enter the number of the source type:
Скрипт предлагает вам выбрать источник для использования в симуляции. Введите 3
для просмотра симуляции ранее записанного сеанса. Доступно восемь ранее зарегистрированных симуляций. Введите число (от 1 до 8), чтобы начать симуляцию.
(1) saved_shots_20170627T201451 (2) saved_shots_20170627T201814 (3) saved_shots_20170702T153245 (4) saved_shots_20170702T153418 (5) saved_shots_20170702T162503 (6) saved_shots_20170702T162625 (7) saved_shots_20170702T162743 (8) saved_shots_20170702T162908 Enter number of file from list:
Ввод 1
или 2
предлагает вам настроить камеру GigE Vision или веб-камеру. Пример затем предлагает вам ввести расстояние от стрелка до цели (метров) и имя стрелка.
Чтобы настроить пример с помощью собственной камеры, используйте приложение Camera Calibrator (Computer Vision Toolbox), чтобы обнаружить шахматную доску на задней панели цели и удалить искажения. Сохраните переменные калибровки в MAT-файле. Переменные калибровки для камеры GigE Vision и веб-камеры сохраняются в следующих MAT-файлах.
+LaserTargetExample/gigecam_240x240_calibration_parameters.mat
+LaserTargetExample/webcam_LifeCam_480x480_camera_parameters.mat
Отредактируйте один из следующих файлов, подстановив настройки соответствующими значениями для вашей камеры.
+LaserTargetExample/gigecam_setup.m
+LaserTargetExample/webcam_setup.m
Каждый раз, когда вы снимаете, хиты записываются в файл с именем ShotDatabase.csv
. Можно загрузить данные в объект таблицы с помощью readtable
чтобы визуализировать его. Например, после съемки, которая заполняет ShotDatabase.csv
файл, следующий код строит график центра группы многих снимков.
T = readtable('ShotDatabase.csv'); LaserTargetExample.make_target_airpistol10m; LaserTargetExample.plot_shot_points(T.X, T.Y); ax = gca; line(mean(T.X)*[1,1], ax.YLim); line(ax.XLim, mean(T.Y)*[1,1]); grid on;
Каждый раз, когда вы снимаете, видеокадры, в которых были обнаружены кадры, хранятся в файлах в папке с именем simulation_recordings
. Можно загрузить эти файлы и исследовать необработанные данные из снимков. Можно также отредактировать алгоритм.
Переменная frames
содержит первую систему координат, который использовался для калибровки, плюс десять систем координат для каждого обнаруженного кадра. Первая система координат в каждом запуске из десяти - это место, где был обнаружен кадр. Вы можете увидеть движение руки в последующих системах координат. Можно сделать короткую анимацию данных с помощью следующего кода.
d = dir(fullfile('simulation_recordings','*.mat')); record = load(fullfile(d(1).folder, d(1).name)); t = LaserTargetExample.SerialDateNumber_to_seconds(... record.times); t = t-t(1); figure for k = 1:size(record.frames, 3) imshow(record.frames(:,:,k), ... 'InitialMagnification','fit'); title(sprintf('Time since beginning of round: %.3f seconds',... t(k))) drawnow end
detectCheckerboardPoints
(Computer Vision Toolbox) | pointsToWorld
(Computer Vision Toolbox) | undistortImage
(Computer Vision Toolbox) | vision.BlobAnalysis
(Computer Vision Toolbox)