exponenta event banner

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-на-n. Маска указывает, какие пикселы входного изображения A для использования при оценке освещающего вещества. Вычисление исключает пикселы в A , которые соответствуют значению маски 0. По умолчанию маска имеет все 1s и все пикселы в 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] Эбнер, Марк. «Успение серого мира.» Постоянство цвета. Чичестер, Западный Суссекс: John Wiley & Sons, 2007.

См. также

| | | |

Представлен в R2017b