illumgray

Оцените освещение с помощью алгоритма серого мира

Описание

illuminant = illumgray(A) оценивает освещенность сцены в изображении RGB A принимая, что средний цвет сцены серый.

пример

illuminant = illumgray(A,percentile) оценивает освещенность, исключая указанные нижний и верхний процентили значений пикселей.

illuminant = illumgray(___,Name,Value) оценивает освещенность с помощью пар "имя-значение" для управления дополнительными опциями.

Примеры

свернуть все

Откройте изображение и отобразите его. Задайте дополнительное увеличение, чтобы уменьшить размер отображаемого изображения.

A = imread('foosball.jpg');
figure
imshow(A,'InitialMagnification',25)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Алгоритм серого мира принимает, что значения RGB линейны. Однако формат файла JPEG сохраняет изображения в цветовом пространстве sRGB с гамма-поправкой. Отменить гамма- коррекцию при помощи rgb2lin функция.

A_lin = rgb2lin(A);

Оцените освещенность сцены, исключая верхний и нижний 10% пикселей. Поскольку вход изображение был линеаризировано, illumgray возвращает освещение в линейном цветовом пространстве RGB.

percentiles = 10;
illuminant = illumgray(A_lin,percentiles)
illuminant = 1×3

    0.2206    0.2985    0.5219

Третий коэффициент illuminant является самым большим, что соответствует синему оттенку изображения.

Исправление цветов путем предоставления предполагаемой подсветки chromadapt функция.

B_lin = chromadapt(A_lin,illuminant,'ColorSpace','linear-rgb');

Чтобы правильно отобразить белое сбалансированное изображение на экране, примените гамма- коррекцию при помощи lin2rgb функция.

B = lin2rgb(B_lin);

Отобразите исправленное изображение, задав дополнительное увеличение.

figure
imshow(B,'InitialMagnification',25)
title(['White-Balanced Image Using Gray World with percentiles=[' ...
    num2str(percentiles) ' ' num2str(percentiles) ']'])

Figure contains an axes. The axes with title White-Balanced Image Using Gray World with percentiles=[10 10] contains an object of type image.

Входные параметры

свернуть все

Изображение RGB, заданное как числовой массив m -by- n -by-3.

Типы данных: single | double | uint8 | uint16

Процентиль пикселей для исключения из оценки освещения, заданный как числовой скаляр или 2-элементный числовой вектор. Исключение пикселей помогает предотвратить перекос оценки переэкспонированными и недоэкспонированными пикселями.

  • Если percentile является скаляром, то же значение используется и для нижнего процентиля, и для верхнего процентиля. В этом случае percentile должен находиться в области значений [0, 50], чтобы сумма нижнего и верхнего процентилей не превышала 100.

  • Если percentile является вектором с 2 элементами, первый элемент является нижним процентилем, а второй элемент является верхним процентилем. Оба процентила должны быть в области значений [0, 100), и их сумма не может превышать 100.

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: illuminant = illumgray(I,'Mask',m) оценивает освещение сцены, используя подмножество пикселей в изображении I, выбранный согласно двоичной маске, m.

Маска изображения, заданная как разделенная разделенными запятой парами, состоящая из 'Mask' и m -by n логический или числовой массив. Маска указывает, какие пиксели входа изображения A использовать при оценке осветителя. Расчет исключает пиксели в A которые соответствуют значению маски 0. По умолчанию маска имеет все 1с, а все пиксели в A включены в оценку.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Тип вектора нормы (p-norm), заданный как разделенная запятой пара, состоящий из 'Norm' и положительный числовой скаляр. p-норма влияет на вычисление среднего значения RGB в вход изображении A. p-норма определяется как сумма (abs (x)p) ^ (1 / p).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Оценка освещенности сцены, возвращенная как 3-элементный числовой вектор-строка. Три элемента соответствуют красным, зеленым и синим значениям подсветчика.

Типы данных: double

Совет

  • Алгоритм серого мира принимает равномерное освещение и линейные значения RGB. Если вы работаете с нелинейными изображениями sRGB или Adobe RGB, используйте rgb2lin функция для отмены гамма- коррекции перед использованием illumgray. Кроме того, убедитесь, что преобразовали хроматически адаптированное изображение обратно в sRGB с помощью lin2rgb функция.

  • Когда вы задаете Maskнижний процентиль и верхний процентиль применяются к маскированному изображению.

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

Ссылки

[1] Эбнер, Марк. «Серое мировое предположение». Постоянство цвета. Chichester, West Sussex: John Wiley & Sons, 2007.

См. также

| | | |

Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте