Перенос Данные в рабочее пространство MATLAB

Обзор

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

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

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

  • Перенос одной системы координат данных в рабочую область - Для удобства тулбокс предоставляет getsnapshot функция, которая возвращает одну систему координат данных в рабочее пространство MATLAB. Потому что getsnapshot функция не требует запуска объекта или запуска захвата, это самый легкий способ перенести данные изображения в рабочую область. getsnapshot не зависит от буфера памяти; он может вернуть систему координат, даже если буфер памяти пуст, и возвращённая система координат не влияет на значение FramesAvailable свойство. Для получения дополнительной информации см. Раздел «Перенос одной системы координат в рабочую область». Для примера использования getsnapshot, см. пример Image Acquisition Toolbox™ Acquiring a Single Image in a Loop в списке 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 функция, чтобы получить конструктор объектов для устройства сбора изображений и заменить этот синтаксис следующим кодом.

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

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

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

    start(vid)

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

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

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

    delete(vid)
    clear vid

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

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

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

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

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

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

Примечание

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

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

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

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

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

    frame = getsnapshot(vid);

    The 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 или откройте demoimaq_GetSnapshot.m файла в редакторе MATLAB.