exponenta event banner

makehdr

Создание изображения с высоким динамическим диапазоном

Описание

пример

HDR = makehdr(files) создание изображения с одинарной точностью и высоким динамическим диапазоном (HDR) HDR из набора пространственно зарегистрированных изображений с низким динамическим диапазоном (LDR) в files.

HDR = makehdr(imds) создает изображение с одинарной точностью и высоким динамическим диапазоном HDR из набора пространственно зарегистрированных изображений LDR, сохраненных как ImageDatastore объект, imds.

пример

HDR = makehdr(___,Name,Value) использует пары имя-значение для управления различными аспектами создания изображения в дополнение к входному аргументу из любого из предыдущих синтаксисов.

Примечание

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

пример

HDR = makehdr(images,Name,Value) создает HDR-изображение с одинарной точностью HDR из набора пространственно зарегистрированных изображений LDR, хранящихся в массиве ячеек images. Укажите значения экспозиции для изображений во входном массиве ячеек с помощью пары имя-значение 'ExposureValues' или 'RelativeExposure'.

Примечание

Если ввод является массивом ячеек изображений LDR, то в качестве второго входного аргумента необходимо указать значение экспозиции или относительное значение экспозиции. Для указания значений экспозиции используйте пару имя-значение 'ExposureValues'. Чтобы указать относительные значения экспозиции, используйте пару имя-значение 'RelativeExposure'.

Примеры

свернуть все

Создайте изображение с высоким динамическим диапазоном (HDR) из набора изображений с низким динамическим диапазоном (LDR), которые совместно используют один и тот же f-stop, но имеют разное время экспозиции.

Загрузите шесть изображений с низким динамическим диапазоном в рабочую область. Создайте вектор соответствующего времени экспозиции. Отображение изображений в виде монтажа.

files = {'office_1.jpg','office_2.jpg','office_3.jpg',...
         'office_4.jpg','office_5.jpg','office_6.jpg'};
expTimes = [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];
montage(files)

Figure contains an axes. The axes contains an object of type image.

Объединение изображений LDR в HDR-изображение.

hdr = makehdr(files,'RelativeExposure',expTimes./expTimes(1));

Отображение изображения HDR.

rgb = tonemap(hdr);
imshow(rgb)

Figure contains an axes. The axes contains an object of type image.

Создайте изображение с высоким динамическим диапазоном (HDR) из набора из шести изображений с низким динамическим диапазоном (LDR), которые совместно используют один и тот же f-stop, но имеют разное время экспозиции. Оцененные значения функции отклика камеры вычисляются из этих изображений LDR и используются для генерации HDR изображения.

Считывайте набор из шести пространственно зарегистрированных изображений LDR в рабочую область. Создание imageDatastore объект, содержащий эти изображения. Отображение изображений в виде монтажа.

setDir = fullfile(toolboxdir('images'),'imdata','office_*');
imds = imageDatastore(setDir);
montage(imds)

Figure contains an axes. The axes contains an object of type image.

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

crf = camresponse(imds);

Объедините изображения LDR в HDR-изображение, используя оцененные значения функции отклика камеры.

hdr = makehdr(imds,'CameraResponse',crf);

Отображение изображения HDR.

rgb = tonemap(hdr);
imshow(rgb)

Figure contains an axes. The axes contains an object of type image.

Создайте изображение с высоким динамическим диапазоном (HDR) из массива ячеек изображений с низким динамическим диапазоном (LDR), которые совместно используют один и тот же f-stop, но имеют разное время экспозиции.

Считывание шести изображений с низким динамическим диапазоном в рабочую область.

image1 = imread('office_1.jpg');
image2 = imread('office_2.jpg');
image3 = imread('office_3.jpg');
image4 = imread('office_4.jpg');
image5 = imread('office_5.jpg');
image6 = imread('office_6.jpg');

Создайте массив ячеек изображений LDR в рабочем пространстве с помощью операции построения ячеек. { }.

images = {image1,image2,image3,image4,image5,image6};

Отображение изображений в виде монтажа.

montage(images)

Figure contains an axes. The axes contains an object of type image.

Укажите значение экспозиции для каждого изображения LDR во входном массиве ячеек.

exposure = [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];

Вычислите относительные значения экспозиции относительно значения экспозиции первого изображения LDR во входном массиве ячеек.

relExposure = exposure./exposure(1);

Объединение изображений LDR в HDR-изображение. Укажите относительные значения экспозиции для каждого изображения в массиве ячеек.

hdr = makehdr(images,'RelativeExposure',relExposure);

Отображение изображения HDR.

rgb = tonemap(hdr);
imshow(rgb)

Figure contains an axes. The axes contains an object of type image.

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

свернуть все

Набор пространственно зарегистрированных изображений LDR, заданных как строковый массив или массив ячеек символьных векторов. Эти изображения могут быть цветными или оттенками серого любой битовой глубины. Однако предпочтительная битовая глубина для изображений LDR составляет 8 или 16.

Типы данных: char | string | cell

Набор пространственно зарегистрированных изображений LDR, указанных как ImageDatastore объект. Эти изображения могут быть цветными или оттенками серого любой битовой глубины. Однако предпочтительная битовая глубина для изображений LDR составляет 8 или 16.

Набор пространственно зарегистрированных изображений LDR, заданных как массив ячеек. Эти изображения могут быть цветными или оттенками серого любой битовой глубины. Однако предпочтительная битовая глубина для изображений LDR составляет 8 или 16.

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

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

Пример: makehdr(files,'RelativeExposure',[0.1 0.3 0.4]);

Имя файла для использования в качестве базовой экспозиции, определяемое как строковый скалярный или символьный вектор.

Типы данных: char | string

Примечание

  • Можно использовать только один из 'BaseFile', 'ExposureValues', и 'RelativeExposure' пары «имя-значение» одновременно.

  • Вы не должны указывать 'BaseFile' пара имя-значение, когда вход представляет собой массив ячеек пространственно зарегистрированных изображений LDR.

Значение экспозиции каждого изображения во входном наборе, определяемое как числовой вектор положительных значений. K-й элемент в векторе соответствует k-му LDR-изображению во входном наборе. Увеличение на одну величину воздействия (EV) соответствует удвоению воздействия. Уменьшение на один EV соответствует снижению воздействия вдвое. При указании этого параметра функция переопределяет метаданные экспозиции EXIF.

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

Относительное значение экспозиции каждого изображения во входном наборе, определяемое как числовой вектор положительных значений. K-й элемент в векторе соответствует k-му LDR-изображению во входном наборе.

Например, изображение со значением относительной экспозиции (RE) 0,5 имеет вдвое меньшую экспозицию, чем изображение со значением RE 1. Аналогично, изображение со значением RE, равным 3, имеет трехкратную экспозицию изображения со значением RE, равным 1. При указании этого параметра функция переопределяет метаданные экспозиции EXIF.

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

Минимальное корректно выставленное значение, указанное как положительное целое число. Для каждого изображения LDR пиксели с меньшим значением, чем это минимально, считаются недостаточно экспонированными и не вносят вклад в окончательное изображение HDR. По умолчанию это минимальное значение равно 2% от максимальной интенсивности, допустимой типом данных изображения.

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

Максимальное корректно выставленное значение, указанное как положительное целое число. Для каждого изображения LDR пиксели с большим значением, чем этот максимум, считаются сверхэкспонированными и не вносят вклад в окончательное изображение HDR. По умолчанию это максимальное значение равно 98% максимальной интенсивности, допустимой типом данных изображения.

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

Функция отклика камеры, заданная как вектор n-by-1 для изображений в градациях серого и матрица n-by-3 для цветных изображений. Функция отклика камеры отображает значение log-экспозиции (яркость сцены) на уровни интенсивности на входных изображениях. Значение n равно 2-битовой глубине. Например, если битовая глубина входного набора изображений равна 8, то n равно 256.

Примечание

'MaximumLimit' и 'MinimumLimit' пары имя-значение игнорируются, когда 'CameraResponse' указывается.

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

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

свернуть все

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

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

Алгоритмы

makehdr функция вычисляет среднее значение экспозиции с помощью значений экспозиции (EV) входных изображений. Значение экспозиции для каждого изображения вычисляется на основе апертуры и выдержки. Значения апертуры и выдержки сохраняются в метаданных EXIF этого входного файла или указываются с помощью 'ExposureValues' пара имя-значение. Средняя EV рассчитывается как среднее из самых высоких и самых низких EV и используется в качестве базовой экспозиции.

Ссылки

[1] Рейнхард и др. Изображение с высоким динамическим диапазоном 2006. Гл. 4.

[2] Дебевец, П. Э. и Ж. Малик. «Восстановление карт излучения с высоким динамическим диапазоном по фотографиям». В классах ACM SIGGRAPH 2008, статья № 31. Нью-Йорк, Нью-Йорк: ACM, 2008.

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