Определение цветового пространства

Определение цветового пространства

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

Например, много устройств представляют цвета как значения RGB. В этом цветовом пространстве цвета представлены как комбинация различной интенсивности красного, зеленого цвета, и синие. Другое цветовое пространство, широко использованное для цифрового видео, является цветовым пространством YCbCr. В этом цветовом пространстве яркость (яркость или интенсивность) информация хранится как один компонент (Y). Цветность (цвет) информация хранится как два компонента цветового различия (Cb и Cr). Cb представляет различие между синим компонентом и ссылочным значением. Cr представляет различие между красным компонентом и ссылочным значением.

Тулбокс может возвратить данные изображения в шкале полутонов, RGB и YCbCr. Чтобы задать цветное представление данных изображения, установите значение свойства ReturnedColorSpace. К кадрам изображения на дисплее с помощью image, imagesc или функций imshow, данные должны использовать цветовое пространство RGB. Другой продукт MathWorks®, программное обеспечение Image Processing Toolbox™, включает функции, которые преобразовывают данные YCbCr в данные о RGB, и наоборот.

Примечание

Некоторые устройства, которые утверждают, что поддержали цветовое пространство YUV на самом деле, поддерживают цветовое пространство YCbCr. YUV подобен YCbCr, но не идентичен. Различием между YUV и YCbCr является масштабный коэффициент, применился к результату. YUV относится к особому масштабному коэффициенту, используемому в составном NTSC и форматах PAL. В большинстве случаев можно задать цветовое пространство YCbCr для устройств та поддержка YUV.

Можно определить пробел цвета по умолчанию устройства с помощью этого кода: vid.ReturnedColorSpace, где vid является именем видео объекта. Пример этого показывают на шаге 2 в примере ниже. Могут быть ситуации, когда вы хотите изменить цветовое пространство. Пример ниже показов случай, где пробелом цвета по умолчанию является rgb, и вы изменяете его на grayscale (шаг 3).

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

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

    vid = videoinput('winvideo',1);
  2. Просмотрите пространство цвета по умолчанию, использованное для данных — значение свойства ReturnedColorSpace указывает на цветовое пространство данных изображения.

    vid.ReturnedColorSpace
    
    ans = 
    
    rgb
  3. Измените цветовое пространство, использованное для данных — Чтобы изменить цветовое пространство возвращенных данных изображения, установить значение свойства ReturnedColorSpace.

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

    delete(vid)
    clear vid

Преобразование изображений Байера

Можно использовать свойства ReturnedColorSpace и BayerSensorAlignment управлять Байером demosaicing.

Если ваша камера использует фильтрацию Байера, тулбокс поддерживает шаблон Байера и может возвратить цвет при желании. Путем установки свойства ReturnedColorSpace на 'bayer' программное обеспечение Image Acquisition Toolbox™ будет demosaic шаблоны Байера, возвращенные оборудованием. Эта установка цветового пространства интерполирует закодированные изображения шаблона Байера в стандартные изображения RGB.

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

Если ваша камера может возвратить данные Байера, тулбокс может автоматически преобразовать его в данные о RGB для вас, или можно задать его, чтобы сделать так. Следующий двум примерам иллюстрирует оба варианта использования.

Ручное преобразование

Камера в этом примере имеет датчик Байера. Стандарт GigE Vision™ позволяет камерам сообщать приложениям, что данные являются закодированным Байером и предоставляют достаточно информации для приложения, чтобы преобразовать шаблон Байера в цветное изображение. В этом случае тулбокс автоматически преобразовывает шаблон Байера в изображение RGB.

  1. Создайте видео объект vid с помощью адаптера Видения GigE и обозначенного формата видео.

    vid = videoinput('gige', 1, 'BayerGB8_640x480');
  2. Просмотрите пространство цвета по умолчанию, использованное для данных.

    vid.ReturnedColorSpace
    
    ans = 
    
    rgb
  3. Создайте изображение с одним кадром img с помощью функции getsnapshot.

    img = getsnapshot(vid);
  4. Просмотрите размер полученного изображения.

    size(img)
    
    ans = 
    
    480  640  3 
  5. Иногда вы не можете хотеть, чтобы тулбокс автоматически преобразовал шаблон Байера в цветное изображение. Например, существует много различных алгоритмов, чтобы преобразовать от шаблона Байера в изображение RGB, и вы можете хотеть задать различный, чем использование тулбокса, или вы можете хотеть далее обработать необработанные данные прежде, чем преобразовать его в цветное изображение.

    % Set the color space to grayscale.
    vid.ReturnedColorSpace = 'grayscale';
    
    % Acquire another image frame.
    img = getsnapshot(vid);
    
    % Now check the size of the new frame acquired using grayscale.
    size(img)
    
    ans = 
    
    480  640 

    Заметьте, как размер, измененный от rgb, отображает к изображению grayscale путем сравнения size вывод на шагах 4 и 5.

  6. Можно опционально использовать функцию demosaic в Image Processing Toolbox, чтобы преобразовать шаблоны Байера в цветные изображения.

    % Create an image colorImage by using the demosaic function on the 
    % image img and convert it to color.
    colorImage = demosaic(img, 'gbrg');
    
    % Now check the size of the new color image.
    size(colorImage)
    
    ans = 
    
    480  640  3
  7. Всегда удаляйте объекты получения изображений из памяти и переменные, которые ссылаются на них, когда вам больше не нужны они.

    delete(vid)
    clear vid

Автоматическое преобразование

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

  1. Создайте видео объект vid с помощью адаптера DCAM и обозначенного формата видео для необработанных данных.

    vid = videoinput('dcam', 1, 'F7_RAW8_640x480');
  2. Просмотрите пространство цвета по умолчанию, использованное для данных.

    vid.ReturnedColorSpace
    
    ans = 
    
    grayscale
  3. Создайте изображение с одним кадром img с помощью функции getsnapshot.

    img = getsnapshot(vid);
  4. Просмотрите размер полученного изображения.

    size(img)
    
    ans = 
    
    480  640 
  5. Значением свойства ReturnedColorSpace является grayscale, потому что данные Байера - одно-полосы, и тулбокс еще не знает, что это должно декодировать данные. Установка свойства ReturnedColorSpace к 'bayer' указывает, что тулбокс должен декодировать данные.

    % Set the color space to Bayer.
    vid.ReturnedColorSpace = 'bayer';
  6. По порядку, чтобы правильно декодировать данные, тулбокс также должен знать выравнивание массива фильтра Байера. Это должно быть в документации камеры. Можно затем использовать свойство BayerSensorAlignment установить выравнивание.

    % Set the alignment.
    vid.BayerSensorAlignment = 'grbg';

    getdata и функции getsnapshot теперь возвратят цветные данные.

    % Acquire another image frame.
    img = getsnapshot(vid);
    
    % Now check the size of the new frame acquired returning color data.
    size(img)
    
    ans = 
    
    480  640  3

    Удалите объект получения изображений из памяти.

    delete(vid)
    clear vid