Этот раздел иллюстрирует основные шаги, необходимые для создания приложения для сбора изображений путем реализации простого приложения для обнаружения движения. Приложение обнаруживает движение в сцене путем выполнения сравнения пикселей с пикселями в парах входящих систем координат изображения. Если в сцене ничего не перемещается, значения пикселей остаются одинаковыми в каждой системе координат. Когда что-то перемещается в изображении, приложение отображает пиксели, которые изменили значения.
В примере показано, как можно использовать программное обеспечение Image Acquisition Toolbox™ для создания рабочего приложения для сбора изображений с несколькими строками кода.
Примечание
Чтобы запустить пример кода в этом примере, вы должны иметь устройство сбора изображений, подключенное к вашей системе. Устройство может быть профессиональным устройством для сбора изображений, таким как система координат grabber или типовой Microsoft® Windows® устройство для сбора изображений, такое как веб-камера. Код может использоваться с различными типами устройств с лишь незначительными изменениями.
Примечание
В предыдущих версиях Image Acquisition Toolbox файлы для всех адаптеров были включены в вашу установку. Начиная с версии R2014a, каждый адаптер доступен отдельно через пакеты поддержки. В порядок использования Image Acquisition Toolbox необходимо установить адаптер, которым пользуется ваша камера. Для получения информации об установке адаптеров с помощью MATLAB смотрите пакеты поддержки Image Acquisition Support Packages for Hardware Adaptors.® Дополнения.
Чтобы использовать программное обеспечение Image Acquisition Toolbox для сбора данных, необходимо выполнить следующие основные шаги.
Шаг | Описание |
---|---|
Установите и сконфигурируйте устройство сбора изображений | |
Найдите информацию, которая уникально идентифицирует ваше устройство для сбора изображений, в программном обеспечении Image Acquisition Toolbox | |
Создайте объект входа видео | |
Предварительный просмотр видеопотока (необязательно) | |
Сконфигурируйте свойства объекта сбора изображений (необязательно) | |
Получите данные изображения | |
Очистка |
Программное обеспечение Image Processing Toolbox™, необходимое для использования программного обеспечения Image Acquisition Toolbox
Продукт Image Acquisition Toolbox, включая Image Acquisition Tools, требует, чтобы у вас была лицензия на продукт Image Processing Toolbox, начиная с R2008b.
Если у вас уже есть продукт Image Processing Toolbox™, вам не нужно ничего делать.
Если у вас нет продукта Image Processing Toolbox, программное обеспечение Image Acquisition Toolbox™ R2008a и более ранние версии будет продолжать работать. Если вы хотите использовать R2008b или будущие релизы, и у вас есть текущая активная лицензия для программного обеспечения Image Acquisition Toolbox, можно скачать продукт Image Processing Toolbox бесплатно. Новые клиенты должны будут приобрести оба продукта, чтобы использовать продукт Image Acquisition Toolbox.
Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь со службой поддержки клиентов MathWorks.
Следуйте инструкциям по настройке, которые поставляются с вашим устройством для сбора изображений. Setup обычно включает в себя:
Установка платы захвата системы координат на вашем компьютере.
Установка всех драйверов программного обеспечения, требуемых устройством. Они поставляются поставщиком устройств.
Подключение камеры к коннектору на плате захвата системы координат.
Проверка правильности работы камеры путем запуска прикладного программного обеспечения, поставляемого с камерой, и просмотра видеопотока в реальном времени.
Типовые устройства для сбора изображений Windows, такие как веб-камеры и цифровые видеокамеры, обычно не требуют установки платы захвата систем координат. Вы подключаете эти устройства непосредственно к компьютеру через порт USB или FireWire.
После установки и настройки оборудования для сбора изображений запустите MATLAB на компьютере, дважды щелкнув значок на рабочем столе. Вам не нужно выполнять какое-либо специальное строение MATLAB, чтобы выполнить сбор изображений.
На этом шаге вы получаете несколько данных, которые тулбокс должен уникально идентифицировать устройство сбора изображений, к которому вы хотите получить доступ. Вы используете эту информацию при создании объекта сбора изображений, описанного в шаге 3: Создайте объект входа видео.
В следующей таблице перечислены эти сведения. Вы используете imaqhwinfo
функция для извлечения каждого элемента.
Информация об устройстве | Описание |
---|---|
Имя адаптера | Адаптер является программным обеспечением, которое тулбокс использует для связи с устройством сбора изображений через драйвер своего устройства. Тулбокс включает адаптеры для определенных продавцов оборудования для сбора изображений и для конкретных классов устройств для сбора изображений. Дополнительные сведения см. в разделе Определение имени адаптера. |
Идентификатор устройства | Идентификатор устройства является номером, который адаптер присваивает для уникальной идентификации каждого устройства сбора изображений, с которым он может общаться. Для получения дополнительной информации см. раздел «Определение идентификатора устройства». Примечание Установка идентификатора устройства опциональна; тулбокс использует первый доступный идентификатор устройства как значение по умолчанию. |
Формат видео | Формат видео задает разрешение изображения (ширину и высоту) и другие аспекты видеопотока. Устройства для сбора изображений обычно поддерживают несколько видео форматов. Дополнительные сведения см. в разделе «Определение поддерживаемых форматов видео». Примечание Установка формата видео опциональна; тулбокс использует один из поддерживаемых форматов по умолчанию. |
Чтобы определить имя адаптера, введите imaqhwinfo
функция в подсказке MATLAB без каких-либо аргументов.
imaqhwinfo ans = InstalledAdaptors: {'dcam' 'winvideo'} MATLABVersion: '7.4 (R2007a)' ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '2.1 (R2007a)'
В данных, возвращенных imaqhwinfo
, а InstalledAdaptors
в поле перечислены адаптеры, доступные на вашем компьютере. В этом примере imaqhwinfo
найдено два адаптера, доступных на компьютере: 'dcam'
и 'winvideo'
. Список на вашем компьютере может содержать только одно имя адаптера. Выберите имя адаптера, которое обеспечивает доступ к вашему устройству для сбора изображений. Для получения дополнительной информации смотрите Определение имени адаптера устройства.
Чтобы найти идентификатор устройства конкретного устройства для сбора изображений, введите imaqhwinfo
функция в подсказке MATLAB, задающая имя адаптера в качестве единственного аргумента. (Вы нашли имя адаптера в первом вызове imaqhwinfo
, описан в разделе «Определение имени адаптера».) В возвращенных данных DeviceIDs
поле является массивом ячеек, содержащим идентификаторы устройств всех устройств, доступных через указанный адаптер.
Примечание
В этом примере используется адаптер DCAM. Необходимо заменить имя адаптера, который необходимо использовать.
info = imaqhwinfo('dcam') info = AdaptorDllName: [1x77 char] AdaptorDllVersion: '2.1 (R2007a)' AdaptorName: 'dcam' DeviceIDs: {[1]} DeviceInfo: [1x1 struct]
Чтобы определить, какие форматы видео поддерживает устройство сбора изображений, смотрите в DeviceInfo
поле данных, возвращаемых imaqhwinfo
. The DeviceInfo
поле является массивом структур, где каждая структура предоставляет информацию о конкретном устройстве. Чтобы просмотреть информацию об устройстве для конкретного устройства, можно использовать идентификатор устройства в качестве ссылки в массиве структур. Также можно просмотреть информацию для конкретного устройства, вызвав imaqhwinfo
функция, задающая имя адаптера и идентификатор устройства в качестве аргументов.
Чтобы получить список видео форматов, поддерживаемых устройством, смотрите SupportedFormats
поле в информационной структуре устройства. The SupportedFormats
поле является массивом ячеек векторов символов, где каждый вектор символов является именем формата видео, поддерживаемого устройством. Дополнительные сведения см. в разделе Определение поддерживаемых форматов видео.
dev_info = imaqhwinfo('dcam',1) dev_info = DefaultFormat: 'F7_Y8_1024x768' DeviceFileSupported: 0 DeviceName: 'XCD-X700 1.05' DeviceID: 1 VideoInputConstructor: 'videoinput('dcam', 1)' VideoDeviceConstructor: 'imaq.VideoDevice('dcam', 1)' SupportedFormats: {'F7_Y8_1024x768' 'Y8_1024x768'}
На этом шаге вы создаете объект входа видео, который тулбокс использует для представления соединения между MATLAB и устройством сбора изображений. Используя свойства объекта входа видео, можно управлять многими аспектами процесса получения изображения. Дополнительные сведения об объектах сбора изображений см. в разделе Создание объектов сбора изображений.
Чтобы создать объект входа видео, используйте videoinput
функция в подсказке MATLAB. The DeviceInfo
структура, возвращенная imaqhwinfo
функция содержит значение по умолчанию videoinput
синтаксис функции для устройства в VideoInputConstructor
поле. Дополнительные сведения об информационной структуре устройства см. в разделе Определение поддерживаемых форматов видео.
В следующем примере создается объект входа видео для адаптера DCAM. Замените имя адаптера устройства сбора изображений, доступного в вашей системе.
vid = videoinput('dcam',1,'Y8_1024x768')
The videoinput
функция принимает три аргумента: имя адаптера, идентификатор устройства и формат видео. Вы получили эту информацию на шаге 2. Имя адаптера является единственным необходимым аргументом; а videoinput
функция может использовать значения по умолчанию для идентификатора устройства и формата видео. Чтобы определить формат видео по умолчанию, посмотрите на DefaultFormat
поле в информационной структуре устройства. Дополнительные сведения см. в разделе «Определение поддерживаемых форматов видео».
Вместо определения формата видео можно опционально задать имя файла строения устройства, также известного как файл камеры. Файлы строения устройств обычно поставляются поставщиками системы координат grabber. Эти файлы содержат все необходимые настройки строения для использования конкретной камеры с устройством. Дополнительные сведения см. в разделе Использование файлов строении устройства (файлы камеры).
Чтобы просмотреть сводные данные только что созданного объекта входа видео, введите имя переменной vid
в командной строке MATLAB. Отображаемая сводная информация показывает многие характеристики объекта, такие как количество систем координат, которые будут захвачены каждым триггером, тип триггера и текущее состояние объекта. Можно использовать свойства объекта входа видео, чтобы управлять многими из этих характеристик. Для получения дополнительной информации смотрите Шаг 5 «Настройка свойств объекта (необязательно)».
vid Summary of Video Input Object Using 'XCD-X700 1.05'. Acquisition Source(s): input1 is available. Acquisition Parameters: 'input1' is the current selected source. 10 frames per trigger using the selected source. 'Y8_1024x768' video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA.
После того, как вы создаете объект входа видео, MATLAB может получить доступ к устройству сбора изображений и готов получить данные. Однако, прежде чем вы начнете, вы можете увидеть предварительный просмотр видеопотока, чтобы убедиться, что изображение удовлетворительно. Например, можно хотеть изменить положение камеры, изменить подсветку, исправить особое внимание или внести некоторые другие изменения в настройку захвата изображения.
Примечание
Этот шаг является необязательным на данной точке процедуры, поскольку вы можете предворительно просмотреть видеопоток в любое время после создания объекта входа видео.
Чтобы просмотреть видеопоток в этом примере, введите preview
функция в подсказке MATLAB, задающая в качестве аргумента объект входа видео, созданный на шаге 3.
preview(vid)
The preview
функция открывает окно рисунка Video Preview на экране, содержащую прямой видеопоток. Чтобы остановить поток живого видео, можно вызвать stoppreview
функция. Чтобы перезапустить поток предварительного просмотра, вызовите preview
снова на том же видео входа объекта.
В то время как окно предварительного просмотра открыто, объект входа видео устанавливает значение Previewing
свойство к 'on'
. Если вы изменяете характеристики изображения путем установки свойств объекта сбора изображений, изображение, отображаемое в окне предварительного просмотра, отражает изменение.
Следующий рисунок показывает окно Video Preview для примера.
Окно предварительного просмотра видео
Чтобы закрыть окно Video Preview, нажмите кнопку Close в строке заголовка или используйте closepreview
функция, задающая объект входа видео как аргумент.
closepreview(vid)
Вызывающие closepreview
без аргументов закрывает все открытые окна Video Preview.
После создания объекта входа видео и предварительного просмотра видеопотока, можно хотеть изменить характеристики изображения или других аспектов процесса сбора. Это достигается путем установки значений свойств объекта сбора изображений. Этот раздел
Описывает типы объектов сбора изображений, используемых тулбоксом
Описывает, как просмотреть все свойства, поддерживаемые этими объектами, с их текущими значениями
Описывает, как задать значения свойств объекта
Тулбокс использует два типа объектов, чтобы представлять соединение с устройством сбора изображений:
Входы видео
Объекты источника видео
Объект входа видео представляет соединение между MATLAB и устройством сбора видео на высоком уровне. Свойства, поддерживаемые объектом входа видео, одинаковы для каждого типа устройства. Вы создали объект входа видео с помощью videoinput
функция на шаге 3.
Когда вы создаете объект входа видео, тулбокс автоматически создает один или несколько объектов источника видео, сопоставленных с объектом входа видео. Каждый объект источника видео представляет набор из одного или нескольких источников физических данных, которые обрабатываются как одна сущность. Количество объектов-источников видео, созданных тулбоксом, зависит от устройства и заданного формата видео. В любой момент времени может быть активен только один из объектов источника видео, называемый выбранным источником. Это источник, используемый для приобретения. Дополнительные сведения об этих объектах сбора изображений см. в разделе Создание объектов сбора изображений.
Чтобы просмотреть полный список всех свойств, поддерживаемых объектом входа видео или объектом источника видео, используйте get
функция. Чтобы перечислить свойства объекта входа видео, созданного в шаге 3, введите этот код в подсказке MATLAB.
get(vid)
The get
функция перечисляет все свойства объекта с их текущими значениями.
General Settings: DeviceID = 1 DiskLogger = [] DiskLoggerFrameCount = 0 EventLog = [1x0 struct] FrameGrabInterval = 1 FramesAcquired = 0 FramesAvailable = 0 FramesPerTrigger = 10 Logging = off LoggingMode = memory Name = Y8_1024x768-dcam-1 NumberOfBands = 1 Previewing = on ReturnedColorSpace = grayscale ROIPosition = [0 0 1024 768] Running = off Tag = Timeout = 10 Type = videoinput UserData = [] VideoFormat = Y8_1024x768 VideoResolution = [1024 768] . . .
Чтобы просмотреть свойства текущего выбранного объекта источника видео, связанного с этим объектом входа видео, используйте getselectedsource
функция в сочетании с get
функция. The getselectedsource
функция возвращает текущий активный источник видео. Чтобы перечислить свойства текущего выбранного объекта источника видео, связанного с объектом входа видео, созданным на шаге 3, введите этот код в подсказке MATLAB.
get(getselectedsource(vid))
The get
функция перечисляет все свойства объекта с их текущими значениями.
Примечание
Свойства объекта источника видео зависят от устройства. Список свойств, поддерживаемых устройством, подключенным к вашей системе, может отличаться от списка, показанного в этом примере.
General Settings: Parent = [1x1 videoinput] Selected = on SourceName = input1 Tag = Type = videosource Device Specific Properties: FrameRate = 15 Gain = 2048 Shutter = 2715
Чтобы задать значение свойства объекта входа видео или свойства объекта источника видео, вы ссылаетесь на свойство объекта как на поле в структуре, используя запись через точку.
Некоторые свойства доступны только для чтения; вы не можете задать их значения. Эти свойства обычно предоставляют информацию о состоянии объекта. Другие свойства считываются только при выполнении объекта. Чтобы просмотреть список всех свойств, которые вы можете задать, используйте set
функция, задающая объект как единственный аргумент.
Чтобы реализовать непрерывное получение изображения, пример устанавливает TriggerRepeat
свойство к Inf
. Чтобы задать это свойство, введите этот код в подсказке MATLAB.
vid.TriggerRepeat = Inf;
Чтобы помочь приложению идти в ногу с входящим видеопотоком во время обработки данных, пример устанавливает FrameGrabInterval
свойство к 5
. Это задает, что объект получает каждую пятую систему координат в видеопотоке. (Вам может потребоваться экспериментировать со значением FrameGrabInterval
свойство, чтобы найти значение, которое обеспечивает лучший ответ при настройке сбора изображений.) В этом примере показано, как можно задать значение свойства объекта путем ссылки на свойство, так как вы бы ссылались на поле в структуре MATLAB.
vid.FrameGrabInterval = 5;
Чтобы задать значение свойства объекта источника видео, необходимо сначала использовать getselectedsource
функция для извлечения объекта. (Вы также можете получить выбранный источник путем поиска объекта входа видео Source
свойство для объекта источника видео, который имеет Selected
значение свойства установлено в 'on'
.)
Чтобы проиллюстрировать, пример присваивает значение Tag
свойство.
vid_src = getselectedsource(vid); vid_src.Tag = 'motion detection setup';
Примечание
Чтобы получить список опций, которые можно использовать для функции, нажмите клавишу Tab после ввода функции в командной строке MATLAB. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой расширенной функции заполнения клавишей Tab, смотрите Использование заполнения клавишей Tab для функций.
После того, как вы создаете объект входа видео и конфигурируете его свойства, можно получить данные. Обычно это ядро любого приложения для сбора изображений, и это включает в себя следующие шаги:
Запуск объекта входа видео - Вы начинаете объект с вызова start
функция. Запуск объекта готовит объект к сбору данных. Например, запуск объекта блокирует значения определенных свойств объекта (они становятся доступными только для чтения). Запуск объекта не инициирует получение систем координат изображения, однако. Инициирование логгирования данных зависит от выполнения триггера.
Следующий пример вызывает start
функция для запуска объекта входа видео. Объекты останавливаются, когда они получили требуемое количество систем координат. Поскольку пример задает непрерывное поступление, необходимо вызвать stop
функция, чтобы остановить объект.
Запуск сбора - Чтобы получить данные, объект входа видео должен выполнить триггер. Триггеры могут возникнуть несколькими способами, в зависимости от того, как TriggerType
свойство сконфигурировано. Например, если вы задаете немедленный триггер, объект выполняет триггер автоматически, сразу после его запуска. Если вы задаете триггер вручную, объект ожидает вызова trigger
функция перед тем, как она инициирует сбор данных. Для получения дополнительной информации смотрите Приобретение Изображения Данных.
В примере, потому что TriggerType
для свойства задано значение 'immediate'
(по умолчанию) и TriggerRepeat
для свойства задано значение Inf
объект автоматически начинает выполнение триггеров и получение систем координат данных, постоянно.
Перенос данных в рабочее пространство MATLAB - тулбокс хранит полученные данные в буфере памяти, файле диска или обоих, в зависимости от значения объекта входа видео LoggingMode
свойство. Чтобы работать с этими данными, вы должны поместить их в рабочее пространство MATLAB. Чтобы перенести несколько систем координат в рабочую область, используйте getdata
функция. Когда данные находятся в рабочем пространстве MATLAB, вы можете манипулировать ими так же, как и любыми другими данными. Для получения дополнительной информации смотрите Работа с данными изображений в Рабочем пространстве MATLAB.
Примечание
Тулбокс предоставляет удобный способ получить одну систему координат данных изображений, который не требует запуска или запуска объекта. Для получения дополнительной информации см. раздел «Перенос одной системы координат в рабочую область».
Чтобы запустить пример, введите следующий код в подсказке MATLAB. Пример зацикливается до тех пор, пока не будет получено заданное количество систем координат. В каждой итерации цикла, пример вызывает getdata
для переноса двух последних систем координат в рабочее пространство MATLAB. Чтобы обнаружить движение, пример вычитает одну систему координат из другого, создавая различное изображение, а затем отображает его. Пиксели, которые изменили значения в полученных системах координат, будут иметь ненулевые значения в различном изображении.
The getdata
функция удаляет системы координат из буфера памяти, когда помещает их в рабочее пространство MATLAB. Важно своевременно перемещать системы координат из буфера памяти в рабочее пространство MATLAB. Если вы не перемещаете полученные системы координат из памяти, можно быстро исчерпать всю доступную в вашей системе память.
Примечание
Пример использует функции в программном обеспечении Image Processing Toolbox.
% Create video input object. vid = videoinput('dcam',1,'Y8_1024x768') % Set video input object properties for this application. vid.TriggerRepeat = 100; vid.FrameGrabInterval = 5; % Set value of a video source object property. vid_src = getselectedsource(vid); vid_src.Tag = 'motion detection setup'; % Create a figure window. figure; % Start acquiring frames. start(vid) % Calculate difference image and display it. while(vid.FramesAvailable >= 2) data = getdata(vid,2); diff_im = imabsdiff(data(:,:,:,1),data(:,:,:,2)); imshow(diff_im); drawnow % update figure window end stop(vid)
Обратите внимание, что drawnow
используется после вызова, чтобы imshow
в порядок для обеспечения обновления окна рисунка. Это является хорошей практикой при обновлении графический интерфейс пользователя или рисунка внутри цикла.
Следующий рисунок показывает, как в примере отображается обнаруженное движение. На рисунке отображаются области, представляющие движение.
Окно фигуры, отображаемое примером
Примечание
Чтобы получить список опций, которые можно использовать для функции, нажмите клавишу Tab после ввода функции в командной строке MATLAB. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой расширенной функции заполнения клавишей Tab, смотрите Использование заполнения клавишей Tab для функций.
В примере getdata
функция возвращает системы координат изображения в переменной data
как массив 480 на 640 на 1 на 10 8-битных данных (uint8
).
whos Name Size Bytes Class data 4-D 3072000 uint8 array dev_info 1x1 1601 struct array info 1x1 2467 struct array vid 1x1 1138 videoinput object vid_src 1x1 726 videosource object
Высота и ширина массива в основном определяются разрешением видео видео формата. Однако можно использовать ROIPosition
Свойство, чтобы задать значения, которые заменяют разрешение видео. Устройства обычно выражают разрешение видео как столбец за строкой; MATLAB выражает матричные размерности как строку за столбцом.
Третья размерность представляет количество цветовых полос в изображении. Поскольку данные примера являются полутоновым изображением, третья размерность равна 1. Для форматов RGB системы координат изображений имеют три полосы: красный - первый, зеленый - второй, а синий - третий. Четвертая размерность представляет количество систем координат, которые были получены из видеопотока.
Когда вы закончите использовать объекты сбора изображений, можно удалить их из памяти и очистить рабочее пространство MATLAB от переменных, связанных с этими объектами.
delete(vid) clear close(gcf)
Для получения дополнительной информации см. раздел «Удаление объектов сбора изображений».