Обеспечение данных изображения в рабочее пространство MATLAB

Обзор

Тулбокс обеспечивает три способа переместить системы координат от буфера памяти в MATLAB® рабочая область:

  • При удалении нескольких систем координат из буфера — Чтобы переместить конкретное количество систем координат от буфера памяти в рабочую область, используйте getdata функция. getdata функция удаляет системы координат из буфера памяти, когда это перемещает их в рабочую область. Функциональные блоки командная строка MATLAB до всех требуемых систем координат доступна, или до значения тайм-аута, истекают. Для получения дополнительной информации смотрите Перемещение Нескольких Систем координат в Рабочую область.

  • При просмотре последний раз полученных систем координат в буфере — Чтобы принести последний раз полученные системы координат в буфере памяти в рабочую область, не удаляя их из буфера, используйте peekdata функция. При возврате систем координат, peekdata запускается с последний раз полученной системы координат и работает назад в буфере памяти. В отличие от этого getdata запускается в начале буфера, возвращая самую старую полученную систему координат сначала. peekdata не блокирует командную строку и, как гарантируют, не возвратит все системы координат, которые вы запрашиваете. Для получения дополнительной информации смотрите Системы координат Просмотра в Буфере памяти.

  • Принося одну систему координат данных в рабочую область — Как удобство, тулбокс обеспечивает getsnapshot функция, которая возвращает одну систему координат данных в рабочее пространство MATLAB. Поскольку getsnapshot функция не требует запуска объекта или инициирования захвата, это - самый легкий способ принести данные изображения в рабочую область. getsnapshot независимо от буфера памяти; это может возвратить систему координат, даже если буфер памяти пуст, и возвращенная система координат не влияет на значение FramesAvailable свойство. Для получения дополнительной информации смотрите Обеспечение Одной Системы координат в Рабочую область. Для примера использования getsnapshot, смотрите, что пример Image Acquisition Toolbox™ Получает Одно Изображение в Цикле в списке Examples наверху Image Acquisition Toolbox основная страница Documentation Center или откройте файл demoimaq_GetSnapshot.m в редакторе MATLAB.

Перемещение нескольких систем координат в рабочую область

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

Примечание

Когда getdata функционируйте системы координат перемещений от буфера памяти в рабочую область, он удаляет системы координат из буфера памяти.

В этом рисунке, getdata заходится T1 с запросом о 15 системах координат, но только шесть систем координат доступны в буфере памяти. getdata блоки до конкретного количества систем координат становятся доступными, в T2, в который точка getdata перемещает системы координат в рабочее пространство MATLAB и возвращает управление в командную строку.

Блоки getdata До Систем координат Становятся Доступными

Получение 10 секунд данных изображения

В этом примере показано, как можно сконфигурировать аппроксимированный основанный на времени захват с помощью FramesPerTrigger свойство:

  1. Создайте объект получения изображений — Этот пример создает объект ввода видео для Windows® устройство получения изображений. Чтобы запустить этот пример в вашей системе, используйте imaqhwinfo функция, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.

    vid = videoinput('winvideo',1);
  2. Сконфигурируйте свойства — Чтобы получить 10 секунд данных, определить частоту кадров вашего устройства получения изображений и затем умножить частоту кадров на номер секунд данных, которые вы хотите получить. Продуктом этого умножения является значение FramesPerTrigger свойство.

    В данном примере примите частоту кадров 30 кадров в секунду (фут в секунду). Умножаясь 30 10, необходимо установить FramesPerTrigger свойство к значению 300.

    vid.FramesPerTrigger = 300;
  3. Запустите объект получения изображений — Вызов start функционируйте, чтобы запустить объект получения изображений.

    start(vid)

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

  4. Принесите полученные данные в рабочую область — Чтобы проверить, что вы получили объем данных, который вы хотели, используйте дополнительный getdata синтаксис, который возвращает метку времени каждой полученной системы координат. Различие между первой меткой времени и последней меткой времени должно аппроксимировать объем данных, который вы ожидали.

    [data time] = getdata(vid,300);
    
    elapsed_time = time(300) - time(1)
    
         10.0467
  5. Вымойтесь — Всегда удаляют объекты получения изображений из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они.

    delete(vid)
    clear vid

Просмотр систем координат в буфере памяти

Чтобы просмотреть демонстрационные системы координат от буфера памяти, не удаляя их, используйте peekdata функция.

peekdata функционируйте всегда возвращает последний раз полученные системы координат в буфере памяти. Например, если вы запрашиваете три системы координат, peekdata возвращает последний раз полученную систему координат в буфере во время запроса и две системы координат, которые сразу предшествуют ему.

Следующая фигура иллюстрирует этот процесс. Команда peekdata(vid,3) называется в три различных раза (T1, T2 и T3). Теневые системы координат указывают на системы координат, возвращенные peekdata в каждом вызове. (peekdata возвращает системы координат, не удаляя их из буфера памяти.)

Обратите внимание на рисунке, что в T3 только две системы координат стали доступными начиная с последней возможности к peekdata. В этом случае, peekdata возвращает только две системы координат, с предупреждением, что это возвратило меньше данных, чем требовалось.

Системы координат Возвращены peekdata

Примечание

peekdata функция не возвращает данных при выполнении если в дисковом режиме логгирования.

Следующий пример иллюстрирует, как использовать peekdata:

  1. Создайте объект получения изображений — Этот пример создает объект ввода видео для Перевода Данных® устройство получения изображений. Чтобы запустить этот пример в вашей системе, используйте imaqhwinfo функция, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.

    vid = videoinput('dt',1);
  2. Сконфигурируйте свойства — В данном примере конфигурируют ручной триггер. Необходимо использовать triggerconfig функция, чтобы задать триггерный тип.

    triggerconfig(vid,'manual')

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

    vid.FramesPerTrigger = 300;
  3. Запустите объект получения изображений — Вызов start функционируйте, чтобы запустить объект получения изображений.

    start(vid)

    Видео объект теперь запускает, но не регистрирует.

    isrunning(vid)
    
    ans =
    
         1
    
    islogging(vid)
    
    ans =
    
         0
  4. Используйте peekdata, чтобы просмотреть системы координат перед триггером — Если вы вызываете peekdata прежде чем вы инициируете захват, peekdata может только возвратить одну систему координат данных, потому что регистрация данных не инициировалась, и буфер памяти пуст. Если больше чем одну систему координат требуют, peekdata выдает предупреждение, что оно возвращает меньше, чем требуемое количество кадров.

    pdata = peekdata(vid,50);
    Warning: PEEKDATA could not return all the frames requested.

    Проверьте тот peekdata возвращенный одна система координат. Одна система координат данных должна иметь ту же ширину и высоту, как задано ROIPosition свойство и то же количество полос, как задано NumberOfBands свойство. В этом примере формат видео данных является RGB так значение NumberOfBands свойство равняется 3.

    whos
      Name        Size                   Bytes  Class
    
      pdata       96x128x3               36864  uint8 array
      vid          1x1                    1060  videoinput object

    Проверьте, что объект не получил систем координат.

    vid.FramesAcquired
    ans = 
    	0
  5. Инициируйте захват — Вызов trigger функционируйте, чтобы инициировать захват.

    trigger(vid)

    Объект начинает регистрировать системы координат к буферу памяти.

  6. Просмотрите последний раз полученные системы координат — В то время как захват происходит, вызовите peekdata несколько раз просматривать последние системы координат в буфере памяти. В зависимости от количества кадров вы запрашиваете, и синхронизация этих запросов, peekdata может возвратить меньше, чем количество кадров, которое вы задаете.

    pdata = peekdata(vid,50);

    Проверять тот peekdata возвращенный системы координат, которые вы запросили, проверяют размерности pdata. peekdata возвращает четырехмерный массив систем координат, где последняя размерность указывает на возвращенное количество кадров.

    whos
      Name        Size                  Bytes   Class
    
      pdata       4-D                 1843200   uint8 array
      vid         1x1                    1060   videoinput object
    
    size(pdata)
    
    ans =
    
        96   128     3    50
  7. Вымойтесь — Всегда удаляют объекты получения изображений из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они.

    delete(vid)
    clear vid

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

Чтобы принести одну систему координат данных изображения в рабочее пространство MATLAB, используйте getsnapshot функция. Можно вызвать getsnapshot функционируйте в любое время после создания объекта.

Этот пример иллюстрирует, как простой это должно использовать getsnapshot функция.

  1. Создайте объект получения изображений — Этот пример создает объект ввода видео для Matrox® устройство. Чтобы запустить этот пример в вашей системе, используйте imaqhwinfo функция, чтобы получить конструктора Object для вашего устройства получения изображений и заменить тем синтаксисом следующий код.

    vid = videoinput('matrox',1);
  2. Принесите систему координат в рабочую область — Вызов getsnapshot функция, чтобы принести систему координат в рабочую область. Обратите внимание на то, что вы не должны запускать объект ввода видео прежде, чем вызвать getsnapshot функция.

    frame = getsnapshot(vid);

    getsnapshot функция возвращает изображение той же ширины и высоты, как задано ROIPosition свойство и то же количество полос, как задано NumberOfBands свойство. В этом примере формат видео данных является RGB так значение NumberOfBands свойство равняется 3.

    whos
      Name        Size                   Bytes  Class
    
      frame      96x128x3                36864  uint8 array
      vid         1x1                     1060  videoinput object

    Обратите внимание на то, что система координат, возвращенная getsnapshot не удален из буфера памяти, если системы координат хранятся там, и не влияет на значение FramesAvailable свойство.

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

    delete(vid)
    clear vid 

Для примера использования getsnapshot, смотрите, что пример Image Acquisition Toolbox Получает Одно Изображение в Цикле в списке Examples наверху Image Acquisition Toolbox основная страница Documentation Center или откройте файл demoimaq_GetSnapshot.m в редакторе MATLAB.