exponenta event banner

Управление параметрами регистрации

Регистрация данных

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

Задание режима ведения журнала

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

Значение по умолчанию для LoggingMode свойство - 'memory'. В этом режиме панель инструментов регистрирует данные в буфере памяти. Если требуется поместить данные изображения в рабочую область MATLAB ®, необходимо записать кадры в память. Функции, предоставляемые панелью инструментов для перемещения данных в рабочую область, работают с буфером памяти. Дополнительные сведения см. в разделе Перенос данных изображения в рабочую область MATLAB.

Можно также записать данные в файл диска, установив LoggingMode свойство для 'disk' или в 'disk&memory'. Регистрируя кадры в дисковом файле, вы создаете постоянную запись полученных кадров. Например, этот код устанавливает значение LoggingMode свойство объекта ввода видео vid кому 'disk&memory'.

vid.LoggingMode = 'disk&memory';

Поскольку панель инструментов хранит кадры изображения в формате AVI, можно просматривать записанные кадры в любом стандартном медиаплеере. Дополнительные сведения см. в разделе Запись данных образа на диск.

Примечание

Чтобы получить список опций, которые можно использовать для функции, нажмите клавишу Tab после ввода функции в командной строке MATLAB. Список расширяется, и можно выполнить прокрутку для выбора свойства или значения. Сведения об использовании этой расширенной функции завершения вкладки см. в разделе Использование функции завершения вкладки для функций.

Задание количества кадров для регистрации

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

В качестве значения объекта ввода видео указывается требуемый размер приобретения. FramesPerTrigger собственность. По умолчанию значение этого свойства равно 10 кадрам на триггер, но можно указать любое значение. На следующем рисунке показано получение с использованием значения по умолчанию для FramesPerTrigger собственность. Пример получения см. в разделе Получение 100 кадров.

Определение объема данных для регистрации

Примечание

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

Указание несмежного получения

Хотя FramesPerTrigger определяет количество кадров для получения, эти кадры не должны захватываться непрерывно из видеопотока. Можно указать, что панель инструментов пропускает определенное количество рамок между полученными кадрами. Для этого установите значение FrameGrabInterval собственность.

Примечание

FrameGrabInterval свойство управляет интервалом, с которым панель инструментов получает кадры из видеопотока (измеряется в кадрах). Это свойство не управляет скоростью, с которой устройство предоставляет кадры, иначе известной как частота кадров.

На следующем рисунке показано, как FrameGrabInterval влияет на приобретение.

Влияние FrameGrabInterval на регистрацию данных

Определение количества зарегистрированных данных

Чтобы определить, сколько кадров было получено объектом ввода видео, проверьте значение FramesAcquired собственность. Это свойство указывает, сколько кадров объект получил с момента его запуска. Сведения об определении количества кадров, доступных в данный момент в буфере памяти, см. в разделе Определение количества доступных кадров.

Получение 100 кадров

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

  1. Создать объект получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Windows ®. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.

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

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

    start(vid)

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

    islogging(vid)
    ans =
    
         1

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

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

    vid.FramesAcquired
    ans =
    
        100
  5. Очистить Всегда удалять объекты сбора изображений из памяти и переменные, которые ссылаются на них, когда они больше не нужны.

    delete(vid)
    clear vid

Определение количества доступных кадров

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

Примечание

FramesAvailable свойство сообщает количество кадров в буфере памяти, а не в журнале диска, если LoggingMode настроен на 'disk' или 'disk&memory'. Поскольку запись кадров в дисковый файл занимает больше времени, чем в память, количество кадров, хранящихся в дисковом журнале, может отставать от числа кадров, хранящихся в буфере памяти. Чтобы узнать, сколько кадров доступно в журнале дисков, просмотрите значение DiskLoggerFrameCount собственность. Дополнительные сведения см. в разделе Запись данных образа на диск.

Этот пример иллюстрирует различие между FramesAcquired и FramesAvailable свойства:

  1. Создать объект получения изображения - в этом примере создается объект ввода видео для устройства получения изображения Windows. Для запуска этого примера в системе используйте imaqhwinfo чтобы получить конструктор объекта для устройства получения изображения и заменить этот синтаксис следующим кодом.

    vid = videoinput('winvideo',1);
  2. Настроить свойства - в этом примере можно настроить получение 15 кадров.

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

    start(vid)

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

  4. Проверьте, сколько кадров было получено - чтобы определить, сколько кадров объект получил и сколько кадров доступно в буфере памяти, проверьте значение FramesAcquired и FramesAvailable свойства.

    vid.FramesAcquired
    ans =
    
        15
    
    vid.FramesAvailable
    
    ans = 
    
        15

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

    Кадры, доступные после выполнения начального триггера

  5. Удалить кадры из буфера памяти - при удалении кадров из буфера памяти объект уменьшает значение FramesAvailable свойство по количеству удаленных кадров.

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

    data = getdata(vid,5);

    После выполнения getdata проверьте значения FramesAcquired и FramesAvailable снова свойства. Обратите внимание, что FramesAcquired свойство остается неизменным, но объект уменьшил значение FramesAvailable свойство по количеству кадров, удаленных из буфера памяти.

    vid.FramesAcquired
    
    ans =
    
        15
    
    vid.FramesAvailable
    
    ans =
    
        10

    На следующем рисунке показано содержимое буфера памяти после удаления кадров.

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

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

    delete(vid)
    clear vid

Задержка регистрации данных после триггера

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

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

Например, чтобы задать задержку в пять кадров перед началом регистрации данных после выполнения триггера, необходимо задать значение TriggerFrameDelay свойство 5. Количество захваченных кадров определяется FramesPerTrigger и не затрагивается задержкой.

vid.TriggerFrameDelay = 5;

На этом рисунке показан этот сценарий.

Указание задержки перед началом регистрации данных

Указание нескольких триггеров

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

Когда он получает указанное количество кадров, объект ввода видео прекращает работу. Для выполнения другого триггера необходимо перезапустить объект ввода видео. Перезапуск объекта приводит к удалению всех данных, сохраненных в буфере памяти предыдущего триггера. Чтобы выполнить несколько триггеров, сохраняя данные из каждого триггера, необходимо указать значение TriggerRepeat собственность.

Обратите внимание, что TriggerRepeat указывает количество дополнительных запусков триггера. Например, для выполнения триггера три раза необходимо установить значение TriggerRepeat свойство для 2. В следующем: vid - объект ввода видео, созданный с помощью videoinput функция.

vid.TriggerRepeat = 2;

Этот рисунок иллюстрирует получение с тремя исполнениями ручного триггера. На рисунке FramesPerTrigger свойство имеет значение 3.

Выполнение нескольких триггеров