Начинающий, сделав получение изображений программно

Обзор

Этот раздел иллюстрирует основные шаги, требуемые создавать приложение получения изображений путем реализовывания простого приложения обнаружения движения. Приложение обнаруживает перемещение в сцене путем выполнения сравнения от пикселя к пикселю в парах входящих фреймов изображения. Если ничто не перемещается в сцену, пиксельные значения остаются то же самое в каждом кадре. Когда что-то перемещается в изображение, отображения приложения пиксели, которые изменили значения.

Пример подсвечивает, как можно использовать программное обеспечение Image Acquisition Toolbox™, чтобы создать рабочее приложение получения изображений только с несколькими строками кода.

Примечание

Чтобы запустить пример кода в этом примере, необходимо было соединить устройство получения изображений с системой. Устройство может быть устройством получения изображений профессионального уровня, таким как устройство захвата изображения или типичное устройство получения изображений Microsoft® Windows®, такое как веб-камера. Код может использоваться с различными типами устройств только с незначительными изменениями.

Примечание

С предыдущими версиями Image Acquisition Toolbox файлы для всех адаптеров были включены в вашу установку. Начиная с версии R2014a каждый адаптер доступен отдельно через пакеты поддержки. В порядке использовать Image Acquisition Toolbox, необходимо установить адаптер, который использует камера. Смотрите Пакеты Поддержки Получения изображений для Аппаратных Адаптеров для получения информации об установке адаптеров с помощью MATLAB® Add-Ons.

Чтобы использовать программное обеспечение Image Acquisition Toolbox, чтобы получить данные изображения, необходимо выполнить выполняющие основные шаги.

Шаг

Описание

Шаг 1:

Установите и сконфигурируйте свое устройство получения изображений

Шаг 2:

Получите информацию, которая однозначно определяет ваше устройство получения изображений к программному обеспечению Image Acquisition Toolbox

Шаг 3:

Создайте объект ввода видео

Шаг 4:

Предварительно просмотрите видеопоток (Необязательно)

Шаг 5:

Сконфигурируйте свойства объектов получения изображений (Необязательно)

Шаг 6:

Получите данные изображения

Шаг 7:

Очистка

Программное обеспечение Image Processing Toolbox™, необходимое, чтобы использовать программное обеспечение Image Acquisition Toolbox

Продукт Image Acquisition Toolbox, включая Image Acquisition Tool, требует, чтобы у вас была лицензия на продукт 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.

Шаг 1: установите свое устройство получения изображений

Следуйте инструкциям по настройке, которые идут с вашим устройством получения изображений. Setup обычно включает:

  • Установка платы устройства захвата изображения в компьютере.

  • Установка любых программных драйверов требуется устройством. Они предоставляются поставщиком устройства.

  • Соединение камеры к коннектору на плате устройства захвата изображения.

  • Проверка, что камера работает правильно путем выполнения прикладного программного обеспечения, которое шло с камерой и просмотром живого видеопотока.

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

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

Шаг 2: получите информацию об оборудовании

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

В следующей таблице перечислены эту информацию. Вы используете функцию imaqhwinfo, чтобы получить каждый элемент.

Информация об устройстве

Описание

Имя адаптера

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

ID устройства

ID устройства является номером, что присвоения адаптера, чтобы однозначно определить каждое устройство получения изображений, с которым он может связаться. Смотрите Определение ID Устройства для получения дополнительной информации.

Примечание

Определение ID устройства является дополнительным; тулбокс использует первый доступный ID устройства в качестве значения по умолчанию.

VideoFormat

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

Примечание

Определение формата видео является дополнительным; тулбокс использует один из поддерживаемых форматов как значение по умолчанию.

Определение имени адаптера

Чтобы определить имя адаптера, введите функцию imaqhwinfo в посдказке MATLAB без любых аргументов.

imaqhwinfo
ans = 

    InstalledAdaptors: {'dcam'  'winvideo'}
        MATLABVersion: '7.4 (R2007a)'
          ToolboxName: 'Image Acquisition Toolbox'
       ToolboxVersion: '2.1 (R2007a)'

В данных, возвращенных imaqhwinfo, cписки полей InstalledAdaptors адаптеры, которые доступны на вашем компьютере. В этом примере imaqhwinfo нашел два адаптера доступными на компьютере: 'dcam' и 'winvideo'. Листинг на вашем компьютере может содержать только одно имя адаптера. Выберите имя адаптера, которое обеспечивает доступ к вашему устройству получения изображений. Для получения дополнительной информации смотрите Определение Имени Адаптера устройства.

Определение ID устройства

Чтобы найти ID устройства конкретного устройства получения изображений, введите функцию 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. Поле DeviceInfo является массивом структур, где каждая структура предоставляет информацию о конкретном устройстве. Чтобы просмотреть информацию об устройстве для конкретного устройства, можно использовать ID устройства в качестве ссылки в массив структур. Также можно просмотреть информацию для конкретного устройства путем вызывания функции imaqhwinfo, определения имени адаптера и ID устройства в качестве аргументов.

Чтобы получить список форматов видео, поддержанных устройством, посмотрите на поле SupportedFormats в структуре информации об устройстве. Поле 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'}

Шаг 3: создайте объект ввода видео

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

Чтобы создать объект ввода видео, используйте функцию videoinput в посдказке MATLAB. Структура DeviceInfo, возвращенная функцией imaqhwinfo, содержит синтаксис функций videoinput по умолчанию для устройства в поле VideoInputConstructor. Для получения дополнительной информации структура информации об устройстве, смотрите Определение Поддерживаемых Форматов видео.

Следующий пример создает объект ввода видео для адаптера DCAM. Замените именем адаптера устройства получения изображений, доступного в вашей системе.

vid = videoinput('dcam',1,'Y8_1024x768')

Функция videoinput принимает три аргумента: имя адаптера, ID устройства и формат видео. Вы получили эту информацию на шаге 2. Имя адаптера является единственным обязательным аргументом; функция videoinput может использовать значения по умолчанию для ID устройства и формата видео. Чтобы определить формат видео по умолчанию, посмотрите на поле DefaultFormat в структуре информации об устройстве. Смотрите Определение Поддерживаемых Форматов видео для получения дополнительной информации.

Вместо того, чтобы задать формат видео, можно опционально задать имя файла конфигурации устройства, также известного как файл камеры. Файлы конфигурации устройства обычно предоставляются поставщиками устройства захвата изображения. Эти файлы содержат все необходимые параметры конфигурации, чтобы использовать конкретную камеру с устройством. Смотрите Используя Файлы конфигурации устройства (Файлы Камеры) для получения дополнительной информации.

Просмотр сводных данных объекта ввода видео

Чтобы просмотреть сводные данные ввода видео возражают, что вы только создали, введите имя переменной 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.

Шаг 4: предварительно просмотрите видеопоток (Необязательно)

После того, как вы создадите объект ввода видео, MATLAB может получить доступ к устройству получения изображений и готов получить данные. Однако, прежде чем вы начинаете, вы можете хотеть видеть предварительный просмотр видеопотока, чтобы убедиться, что изображение является удовлетворительным. Например, вы можете хотеть сменить положение камеры, изменить подсветку, исправить особое внимание или внести некоторое другое изменение в вашу настройку получения изображений.

Примечание

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

Чтобы предварительно просмотреть видеопоток в этом примере, введите функцию preview в посдказке MATLAB, задав объект ввода видео, созданный на шаге 3 в качестве аргумента.

preview(vid)

Функция preview создает окно фигуры Предварительного просмотра видео на вашем экране, содержащем живой видеопоток. Чтобы остановить поток живого видео, можно вызвать функцию stoppreview. Чтобы перезапустить поток предварительного просмотра, вызовите preview снова на том же объекте ввода видео.

В то время как окно предварительного просмотра открыто, объект ввода видео устанавливает значение свойства Previewing к 'on'. Если вы изменяете характеристики изображения путем установки свойств объектов получения изображений, изображение, отображенное в окне предварительного просмотра, отражает изменение.

Следующие данные показывают Окно просмотра видео для примера.

Окно просмотра видео

Чтобы закрыть Окно просмотра видео, нажмите кнопку Close в строке заголовка или используйте функцию closepreview, задавая объект ввода видео в качестве аргумента.

closepreview(vid)

Вызов closepreview без любых аргументов закрывает все открытые Окна просмотра видео.

Шаг 5: сконфигурируйте свойства объектов (Необязательно)

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

Типы объектов получения изображений

Тулбокс использует два типа объектов представлять связь с устройством получения изображений:

  • Объекты ввода видео

  • Объекты источника видеосигнала

Объект ввода видео представляет связь между MATLAB и видео устройством приобретения на высоком уровне. Свойства, поддержанные объектом ввода видео, являются тем же самым для каждого типа устройства. Вы создали объект ввода видео использование функции videoinput на шаге 3.

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

Просмотр свойств объектов

Чтобы просмотреть полный список всех свойств, поддержанных объектом ввода видео или объектом источника видеосигнала, используйте функцию get. Чтобы перечислить свойства объекта ввода видео, созданного на шаге 3, введите этот код в посдказке MATLAB.

get(vid)

Функция 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. Функция getselectedsource возвращает в настоящее время активный источник видеосигнала. Чтобы перечислить свойства в настоящее время выбранного объекта источника видеосигнала, сопоставленного с объектом ввода видео, созданным на шаге 3, введите этот код в посдказке MATLAB.

get(getselectedsource(vid))

Функция 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 для Функций.

Шаг 6: получите данные изображения

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

  • При запуске объекта ввода видео — Вы запускаете объект путем вызывания функции start. Запуск объекта готовит объект к сбору данных. Например, запуск объекта блокирует значения определенных свойств объектов (они становятся только для чтения). Запуск объекта не инициирует получение фреймов изображения, как бы то ни было. Инициирование регистрации данных зависит от выполнения триггера.

    Следующий пример вызывает функцию start, чтобы запустить объект ввода видео. Объекты останавливаются, когда они получили требуемое количество кадров. Поскольку пример задает непрерывное приобретение, необходимо вызвать функцию stop, чтобы остановить объект.

  • Инициировав приобретение — Чтобы получить данные, объект ввода видео должен выполнить триггер. Триггеры могут произойти несколькими способами, в зависимости от того, как свойство TriggerType сконфигурировано. Например, если вы задаете мгновенный триггер, объект выполняет триггер автоматически, сразу после того, как он запускается. Если вы задаете ручной триггер, объект ожидает вызова функции trigger, прежде чем это будет инициировать сбор данных. Для получения дополнительной информации смотрите Данные изображения Получения.

    В примере, потому что свойство TriggerType установлено в 'immediate' (значение по умолчанию) и свойство TriggerRepeat, установлен в Inf, объект автоматически начинает выполнять триггеры и получать кадры данных, постоянно.

  • Обеспечение данных в рабочее пространство MATLAB — тулбокс хранит полученные данные в буфере памяти, дисковом файле или обоих, в зависимости от значения свойства объекта LoggingMode ввода видео. Чтобы работать с этими данными, необходимо принести его в рабочее пространство MATLAB. Чтобы принести несколько кадров в рабочую область, используйте функцию getdata. Если данные находятся в рабочем пространстве MATLAB, можно управлять им, когда вы были бы любые другие данные. Для получения дополнительной информации смотрите Работу с Данными изображения в рабочем пространстве MATLAB.

Примечание

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

Выполнение примера

Чтобы запустить пример, введите следующий код в посдказке MATLAB. Циклы в качестве примера до конкретного количества кадров были получены. В каждой итерации цикла пример вызывает getdata, чтобы принести два новых кадра в рабочее пространство MATLAB. Чтобы обнаружить движение, пример вычитает один кадр из другого, создавая изображение различия, и затем отображает его. Пиксели, которые изменили значения в полученных кадрах, будут иметь ненулевые значения в изображении различия.

Функция 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 для Функций.

Данные изображения в рабочем пространстве MATLAB

В примере функция 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 фреймы изображения имеют три полосы: красный является первым, зеленый является вторым, и синий является третьим. Четвертая размерность представляет количество кадров, которые были получены от видеопотока.

Шаг 7: Очистка

Когда вы закончили использовать свои объекты получения изображений, можно удалить их из памяти и очистить рабочее пространство MATLAB переменных, сопоставленных с этими объектами.

delete(vid)
clear
close(gcf)

Для получения дополнительной информации смотрите Объекты Получения изображений Удаления.