Этот раздел иллюстрирует основные шаги, необходимые для создания приложения получения изображения посредством реализации простого приложения обнаружения движения. Приложение обнаруживает движение в сцене, выполняя сравнение пикселей с пикселями в парах входящих кадров изображения. Если в сцене ничего не перемещается, значения пикселей остаются одинаковыми в каждом кадре. Когда что-то перемещается в изображении, приложение отображает пиксели, которые изменили значения.
В примере показано, как можно использовать программное обеспечение Image Acquisition Toolbox™ для создания рабочего приложения для сбора изображений с несколькими строками кода.
Примечание
Для запуска примера кода в этом примере к системе должно быть подключено устройство сбора изображений. Устройство может представлять собой профессиональное устройство получения изображений, такое как устройство захвата кадров, или общее устройство получения изображений Microsoft ® Windows ®, такое как веб-камера. Код может использоваться с различными типами устройств с незначительными изменениями.
Примечание
В предыдущих версиях панели инструментов получения изображений файлы для всех адаптеров были включены в установку. Начиная с версии R2014a, каждый адаптер доступен отдельно через пакеты поддержки. Для использования панели инструментов получения изображений необходимо установить адаптер, используемый камерой. Сведения об установке адаптеров с помощью Add-On MATLAB ® см. в разделе Пакеты поддержки получения образов для аппаратных адаптеров.
Для получения данных изображения с помощью ПО Image Acquisition Toolbox необходимо выполнить следующие основные действия.
Шаг | Описание |
|---|---|
Установка и настройка устройства сбора изображений | |
Получение информации, однозначно идентифицирующей устройство для получения изображений, для программного обеспечения Image Acquisition Toolbox | |
Создание объекта ввода видео | |
Предварительный просмотр видеопотока (необязательно) | |
Настройка свойств объекта сбора изображений (необязательно) | |
Получение данных изображения | |
Очистить |
Программное обеспечение Toolbox™ обработки изображений, необходимое для использования инструментария для получения изображений
Для продукта инструментария получения изображений, включая инструмент получения изображений, требуется лицензия на продукт инструментария обработки изображений, начиная с R2008b.
Если у вас уже есть продукт Toolbox™ обработки изображений, вам не нужно ничего делать.
Если у вас нет набора инструментов обработки изображений, программное обеспечение Toolbox™ получения изображений R2008a и более ранних версий будет продолжать работать. Если вы хотите использовать R2008b или будущие версии и у вас есть текущая активная лицензия на программное обеспечение Image Acquisition Toolbox, вы можете загрузить продукт Image Processing Toolbox бесплатно. Новые клиенты должны будут приобрести оба продукта, чтобы использовать продукт Image Acquisition Toolbox.
По всем вопросам обращайтесь в службу поддержки клиентов MathWorks.
Следуйте инструкциям по настройке, поставляемым с устройством для получения изображений. Настройка обычно включает в себя:
Установка платы захвата рамы в компьютер.
Установка всех драйверов, необходимых для устройства. Они поставляются поставщиком устройства.
Подключение камеры к разъему на плате захвата рамы.
Проверка правильности работы камеры путем запуска прикладного программного обеспечения, поставляемого вместе с камерой, и просмотра видеопотока в реальном времени.
Обычные устройства для получения изображений Windows, такие как веб-камеры и цифровые видеокамеры, обычно не требуют установки платы захвата кадров. Эти устройства подключаются непосредственно к компьютеру через порт USB или FireWire.
После установки и настройки оборудования для получения образов запустите MATLAB на компьютере, дважды щелкнув значок на рабочем столе. Для получения изображения не требуется выполнять специальную настройку MATLAB.
На этом шаге вы получите информацию о том, что панель инструментов должна однозначно идентифицировать устройство получения изображения, к которому вы хотите получить доступ. Эта информация используется при создании объекта получения изображения, описанного в шаге 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. DeviceInfo поле является массивом структуры, где каждая структура предоставляет информацию о конкретном устройстве. Для просмотра информации об устройстве для конкретного устройства можно использовать идентификатор устройства в качестве ссылки в массиве структуры. Кроме того, можно просмотреть информацию для конкретного устройства, позвонив по ссылке imaqhwinfo , указывая имя адаптера и идентификатор устройства в качестве аргументов.
Чтобы получить список форматов видео, поддерживаемых устройством, просмотрите 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'}На этом шаге создается объект ввода видео, используемый панелью инструментов для представления соединения между MATLAB и устройством получения изображения. Используя свойства объекта ввода видео, можно управлять многими аспектами процесса получения изображения. Дополнительные сведения об объектах сбора изображений см. в разделе Создание объектов сбора изображений.
Чтобы создать объект ввода видео, используйте videoinput в подсказке MATLAB. DeviceInfo структура, возвращенная imaqhwinfo функция содержит значение по умолчанию videoinput синтаксис функции для устройства в VideoInputConstructor поле. Дополнительные сведения о структуре информации об устройстве см. в разделе Определение поддерживаемых форматов видео.
В следующем примере создается объект ввода видео для адаптера DCAM. Замените имя адаптера устройства получения изображения, доступного в системе.
vid = videoinput('dcam',1,'Y8_1024x768') videoinput функция принимает три аргумента: имя адаптера, идентификатор устройства и формат видео. Эта информация была получена на шаге 2. Имя адаптера является единственным обязательным аргументом; videoinput может использовать значения по умолчанию для идентификатора устройства и видеоформата. Чтобы определить формат видео по умолчанию, просмотрите 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.После создания объекта ввода видео MATLAB получает доступ к устройству получения изображения и готов к получению данных. Однако перед началом можно просмотреть предварительный просмотр видеопотока, чтобы убедиться, что изображение удовлетворительное. Например, может потребоваться изменить положение камеры, изменить освещение, изменить фокус или внести какие-либо другие изменения в настройки съемки изображения.
Примечание
Этот шаг является необязательным на данном этапе процедуры, так как вы можете просматривать видеопоток в любое время после создания объекта ввода видео.
Для предварительного просмотра видеопотока в этом примере введите preview функция в подсказке MATLAB, указывающая в качестве аргумента объект ввода видео, созданный на шаге 3.
preview(vid)
preview функция открывает окно изображения Video Preview на экране, содержащее видеопоток. Чтобы остановить поток живого видео, можно вызвать stoppreview функция. Для перезапуска потока предварительного просмотра вызовите preview снова на том же объекте ввода видео.
Пока открыто окно предварительного просмотра, объект ввода видео задает значение Previewing свойство для 'on'. При изменении характеристик изображения путем установки свойств объекта получения изображения это изменение отражается на изображении, отображаемом в окне предварительного просмотра.
На следующем рисунке показано окно Video Preview для примера.
Окно предварительного просмотра видео

Чтобы закрыть окно «Просмотр видео», нажмите кнопку «Закрыть» в строке заголовка или используйте closepreview , указывая объект ввода видео в качестве аргумента.
closepreview(vid)
Запрос closepreview без аргументов закрывает все открытые окна Video Preview.
После создания объекта ввода видео и предварительного просмотра видеопотока может потребоваться изменить характеристики изображения или другие аспекты процесса получения. Для этого задаются значения свойств объекта сбора изображения. Этот раздел
Описание типов объектов сбора изображений, используемых панелью инструментов
Описывает, как просмотреть все свойства, поддерживаемые этими объектами, с их текущими значениями
Описывает, как задать значения свойств объекта
Панель инструментов использует два типа объектов для представления соединения с устройством получения изображения:
Объекты ввода видео
Объекты источника видео
Объект ввода видео представляет соединение между 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. Список расширяется, и можно выполнить прокрутку для выбора свойства или значения. Сведения об использовании этой расширенной функции завершения вкладки см. в разделе Использование функции завершения вкладки для функций.
После создания объекта ввода видео и настройки его свойств можно получить данные. Это обычно является ядром любого приложения для получения изображения и включает в себя следующие шаги:
Запуск объекта ввода видео - объект запускается путем вызова start функция. При запуске объекта объект подготавливается к сбору данных. Например, запуск объекта блокирует значения определенных свойств объекта (они становятся доступными только для чтения). Однако запуск объекта не инициирует получение кадров изображения. Инициирование регистрации данных зависит от выполнения триггера.
Следующий пример вызывает start для запуска объекта ввода видео. Объекты останавливаются при получении запрошенного количества кадров. Поскольку в примере указывается непрерывное получение, необходимо вызвать stop для остановки объекта.
Запуск сбора данных - для получения данных объект ввода видео должен выполнить триггер. Триггеры могут возникать несколькими способами, в зависимости от способа TriggerType свойство настроено. Например, при указании немедленного триггера объект выполняет триггер автоматически сразу после его запуска. При указании ручного триггера объект ожидает вызова trigger перед началом сбора данных. Дополнительные сведения см. в разделе Получение данных изображения.
В примере, потому что TriggerType свойство имеет значение 'immediate' (по умолчанию) и TriggerRepeat свойство имеет значение Infобъект автоматически начинает непрерывно выполнять триггеры и получать кадры данных.
Перенос данных в рабочую область MATLAB - набор инструментов хранит полученные данные в буфере памяти, дисковом файле или и том, и другом, в зависимости от значения объекта ввода видео LoggingMode собственность. Для работы с этими данными их необходимо поместить в рабочую область MATLAB. Чтобы поместить несколько кадров в рабочую область, используйте getdata функция. Как только данные находятся в рабочей области MATLAB, ими можно управлять так же, как и любыми другими данными. Дополнительные сведения см. в разделе Работа с данными изображения в рабочей области MATLAB.
Примечание
Панель инструментов обеспечивает удобный способ получения одного кадра данных изображения, который не требует запуска или запуска объекта. Дополнительные сведения см. в разделе Ввод одного кадра в рабочую область.
Для запуска примера введите следующий код в подсказке MATLAB. Пример закольцовывается до тех пор, пока не будет получено определенное количество кадров. В каждой итерации цикла пример вызывает getdata для переноса двух последних кадров в рабочую область MATLAB. Чтобы обнаружить движение, пример вычитает один кадр из другого, создавая разностное изображение, а затем отображает его. Пиксели, которые изменили значения в полученных кадрах, будут иметь ненулевые значения в разностном изображении.
getdata удаляет кадры из буфера памяти, когда они переносятся в рабочую область MATLAB. Важно своевременно переместить кадры из буфера памяти в рабочую область MATLAB. Если не переместить полученные кадры из памяти, можно быстро израсходовать всю имеющуюся в системе память.
Примечание
В примере используются функции на панели инструментов обработки изображений.
% 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. Список расширяется, и можно выполнить прокрутку для выбора свойства или значения. Сведения об использовании этой расширенной функции завершения вкладки см. в разделе Использование функции завершения вкладки для функций.
В примере, getdata функция возвращает кадры изображения в переменной data как массив 8-разрядных данных размером 480 на 640 на 1 на 10 (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-форматов кадры изображения имеют три полосы: красный - первый, зеленый - второй, а синий - третий. Четвертое измерение представляет количество кадров, полученных из видеопотока.
По завершении использования объектов сбора изображений их можно удалить из памяти и очистить рабочую область MATLAB от переменных, связанных с этими объектами.
delete(vid) clear close(gcf)
Дополнительные сведения см. в разделе Удаление объектов сбора изображений.