В этом примере показано, как получить изображения в реальном времени от веб-камеры, обработайте изображения с помощью анализа блоба фиксированной точки и определите мировые координаты, чтобы выиграть лазерную цель пистолета.
Технология, показанная в этом примере, используется в широком спектре приложений, таких как оценка расстояний до объектов перед автомобилем и медицинского анализа изображения ячеек. Ключевые возможности этого примера включают:
Анализ блоба фиксированной точки для сбора измерений
Получение изображений в реальном времени
Калибровка фотоаппарата, чтобы определить мировые координаты точек изображений
Правильные образы для искажения объектива, чтобы гарантировать точность собранных измерений в мировых единицах измерения
Определите мировые координаты точек изображений путем отображения пиксельных местоположений с местоположениями в реальных модулях
Весь код для этого примера хранится в папке в качестве примера. Чтобы отредактировать код, перейдите к этой папке.
cd(fullfile(docroot,'toolbox','fixpoint',... 'examples','laser_target_example'));
+LaserTargetExample
папка к writeable местоположению.Image Acquisition Toolbox™ позволяет вам получить изображения и видео от камер и устройств захвата изображения непосредственно в MATLAB® и Simulink®. Используя Пакет Поддержки Image Acquisition Toolbox для Оборудования GigE Vision® или MATLAB® Support Package для Веб-камер 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, чтобы обнаружить шаблон шахматной доски в конце цели и удалить любое искажение. Определите порог рассеянного света на цели. Вы, возможно, должны настроить настройки камеры или подсветку так, чтобы изображение не насыщалось. Используйте 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 или веб-камеру. Пример затем предлагает вам вводить расстояние от стрелка к цели (метры) и имя стрелка.
Чтобы настроить пример с помощью собственной камеры, используйте приложение Camera Calibrator, чтобы обнаружить шахматную доску в конце цели и удалить искажение. Сохраните калибровочные переменные в MAT-файле. Калибровочные переменные для камеры Видения GigE и веб-камеры сохранены в следующих 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
| pointsToWorld
| undistortImage
| vision.BlobAnalysis