Начало работы с созданием изображений программно

Обзор

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

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

Примечание

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

Примечание

В предыдущих версиях Image Acquisition Toolbox файлы для всех адаптеров были включены в вашу установку. Начиная с версии R2014a, каждый адаптер доступен отдельно через пакеты поддержки. В порядок использования Image Acquisition Toolbox необходимо установить адаптер, которым пользуется ваша камера. Для получения информации об установке адаптеров с помощью MATLAB смотрите пакеты поддержки Image Acquisition Support Packages for Hardware Adaptors.® Дополнения.

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

Шаг

Описание

Шаг 1:

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

Шаг 2:

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

Шаг 3:

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

Шаг 4:

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

Шаг 5:

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

Шаг 6:

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

Шаг 7:

Очистка

Программное обеспечение 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.

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

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

  • Установка платы захвата системы координат на вашем компьютере.

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

  • Подключение камеры к коннектору на плате захвата системы координат.

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

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

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

Шаг 2: Извлечение аппаратной информации

На этом шаге вы получаете несколько данных, которые тулбокс должен уникально идентифицировать устройство сбора изображений, к которому вы хотите получить доступ. Вы используете эту информацию при создании объекта сбора изображений, описанного в шаге 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'}

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

На этом шаге вы создаете объект входа видео, который тулбокс использует для представления соединения между 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.

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

После того, как вы создаете объект входа видео, 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.

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

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

Типы объектов сбора изображений

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

  • Входы видео

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

Объект входа видео представляет соединение между 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 для функций.

Шаг 6: Получение данных

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

  • Запуск объекта входа видео - Вы начинаете объект с вызова 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 для функций.

Изображение данных в рабочем пространстве 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)

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