Определение формата данных изображения

Прежде чем можно будет получить данные из устройства, необходимо сказать механизму формат данных, которые это может ожидать получать от устройства. Без этой информации механизм не знает, как интерпретировать данные. Например, механизм должен знать, что размер байтов раньше хранил данные изображения, длину каждой линии и общее количество линий в каждом фрейме изображения, и количество плоскостей или полосы, в каждом фрейме изображения. (e.g. Данные о RGB имеют три полосы). Следующая фигура иллюстрирует эту информацию.

В некоторых случаях эти данные о формате определяются внешними стандартами, такими как стандарт RS-170/NTSC. В других случаях поставщики устройства задают много различных форматов, описанных в документации, которая идет с устройством. Средства записи адаптера решают, какой из этих поддерживаемых форматов они хотят сделать доступным для пользователей своего адаптера в их getAvailHW() функция, описанная в Хранении Данных о формате.

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

Определение размеров изображения

Вы задаете размерности данных изображения устройство выходные параметры с помощью следующих виртуальных функций.

  • getMaxHeight() — Возвращает целое число, которое задает максимальную высоту данных изображения.

  • getMaxWidth() — Возвращает целое число, которое задает максимальную ширину данных изображения.

  • getNumberOfBands() — Возвращает целое число, которое задает количество размерностей в данных. Например, форматы RGB используют три полосы.

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

vid = videoinput('mydeviceimaq');

get(vid,'VideoResolution')

ans =

     640   480

Ваш адаптер также вызывает эти функции, когда он создает IAdaptorFrame объект получить данные изображения. Смотрите Реализацию Функции Потока Захвата для получения дополнительной информации.

Предложенный алгоритм

getMaxHeight(), getMaxWidth(), и getNumberOfBands() функции в адаптере обычно выполняют следующую обработку:

  1. Определите формат, заданный пользователем, когда они создали объект ввода видео. Механизм передает эту информацию в качестве аргумента к createInstance() вашего адаптера функция.

  2. На основе выбранного формата возвратите соответствующие значения высоты, ширины или количества полос. Ваш адаптер может выполнить это во многих отношениях. Один путь, проиллюстрированный демонстрационным адаптером, состоит в том, чтобы определить эти значения в вашем getAvailHW() функционируйте и храните информацию в данных приложения в IDeviceFormat объект — видит Классы Определения, чтобы Содержать Специфичную для устройства информацию. Затем getMaxHeight(), getMaxWidth(), и getNumberOfBands() функции могут получить эти данные приложения и считать эти значения.

Пример

Следующие реализации getMaxHeight() и getMaxWidth() функции определяют значение на основе формата, заданного пользователем. Количество полос зависит от того, является ли формат цветом или монохромом. Для цветных форматов, таких как RGB и YUV, количество полос всегда равняется 3. Для монохрома (черный и белый) форматы, количество полос всегда равняется 1. Программное обеспечение Image Acquisition Toolbox™ только поддерживает данные изображения с 1 или 3 полосами.

Замените тупиковые реализации в адаптере в качестве примера со следующим кодом файл C++, mydevice.cpp, созданный в Главе 3. Значения подходят для имен формата, заданных в примере в Определении Информации об устройстве и Данных о формате.

int MyDeviceAdaptor::getMaxHeight() const{ 
	if(strcmp(_formatName,"RS170"){
		return 480;
	} else {
		return 576;
}

int MyDeviceAdaptor::getMaxWidth() const { 
	if(strcmp(_formatName,"RS170"){
		return 640;
	} else {
		return 768;
	}
}
int MyDeviceAdaptor::getNumberOfBands() const {

	return 1;
}

Определение типа системы координат

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

Чтобы указать эту информацию, необходимо выбрать один из FRAMETYPE перечисления заданы набором адаптера. Набор адаптера задает перечисления для многих различных типов системы координат, чтобы представлять большое разнообразие форматов, поддержанных устройствами. Например, если ваше устройство является монохромом (черный и белый) устройство, которое возвращает 8-битные данные, вы можете выбрать MONO8 структурируйте тип. Если ваше устройство является цветным устройством, которое возвращает 24-битные данные, вы можете выбрать RGB24 структурируйте тип. Следующая таблица обобщает типы системы координат, которые доступны. Чтобы выбрать определенный формат, просмотрите список в Справочной документации API Набора Адаптера Image Acquisition Toolbox или откройте AdaptorFrameTypes.h файл.

Формат

Структурируйте типы

Монохром

8-, 10-, 12-, и 16-битные форматы; и и обратный порядок байтов с прямым порядком байтов; в регулярных и зеркально отраженных форматах. (В зеркально отраженных форматах устройство обеспечивает нижнюю строку сначала.)

Подписанный 16-и 32-битные форматы; и и обратный порядок байтов с прямым порядком байтов; в регулярных и зеркально отраженных форматах.

И двойные форматы с плавающей точкой; и форматы с обратным порядком байтов и с прямым порядком байтов; в регулярных и зеркально отраженных форматах.

Цвет

8-, 24-, 32-, и 48-битные форматы RGB; и и обратный порядок байтов с прямым порядком байтов; регулярный и зеркально отраженный; упакованный и плоский (см. Понимание Упакованные и Плоские Форматы).

Структурируйте типы, которые задают порядок байтов цветных данных (RGB или GBR) и задают, где пустой байт расположен (XRGB или XGBR).

Форматы, которые представляют, раскрашивают 4 бита (4444), 5 битов (555), 5-или 6 битов (565) или 10 битов (101010).

Форматы, которые используют цветовое пространство YUV.

Предложенный алгоритм

getFrameType() вашего адаптера функция должна возвратить соответствующий тип системы координат, который описывает данные, возвращенные вашим устройством для заданного формата.

Если ваше устройство поддерживает несколько цветных форматов, вы не должны отсоединять все форматы пользователям тулбокса. Можно просто обеспечить один цветной формат и обработать низкоуровневые детали в адаптере с FRAMETYPE.

Пример

Следующий пример показывает скелетную реализацию getFrameType() функция. Фактическая реализация может выбрать тип системы координат на основе формата, который выбрал пользователь.

virtual imaqkit::frametypes::FRAMETYPE getFrameType() const {

	return imaqkit::frametypes::FRAMETYPE:MONO8;
}

Понимание упакованных и плоских форматов

Набор адаптера IAdaptorFrame класс задает многих FRAMETYPE перечисления, которые покрывают много возможных типов устройств данных изображения, могут возвратиться. Например, некоторые устройства могут возвратить цветные изображения в упакованном или не упаковали (плоские) форматы. Эти форматы описывают, как байты красных, зеленых, и синих данных располагаются в памяти. В упакованных форматах группируются красные, зеленые, и синие триплеты. В неупакованных форматах все красные данные хранятся вместе, сопровождаемые всеми зелеными данными, сопровождаемыми всеми синими данными. Следующая фигура иллюстрирует это различие.

Упакованные и плоские форматы

Чтобы получить больше информации о форматах видео, перейдите к fourcc.org Веб-сайт.