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-остановку, но имеют различные времена воздействия.

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

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-остановку, но имеют различные времена воздействия. Предполагаемые значения функции отклика камеры вычисляются из этих изображений 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.

Оцените функцию отклика камеры от изображений в datastore.

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-остановку, но имеют различные времена воздействия.

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

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 th элемент в векторе соответствует k th LDR изображение во входном наборе. Увеличение одного значения воздействия (EV) соответствует удвоению воздействия. Уменьшение одного EV соответствует сокращению вдвое воздействия. Если вы задаете этот параметр, функция заменяет метаданные воздействия EXIF.

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

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

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

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

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

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

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

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

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

Примечание

'MaximumLimit' и 'MinimumLimit' пары "имя-значение" проигнорированы когда 'CameraResponse' задан.

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

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

свернуть все

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

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

Алгоритмы

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

Ссылки

[1] Райнхард и др. Расширенный динамический диапазон, Отображающий 2006. Ch. 4.

[2] Debevec, P.E., и Дж. Малик. "Восстановление Карт Сияния Расширенного динамического диапазона из Фотографий". В SIGGRAPH ACM 2 008 классов, Статья № 31. Нью-Йорк, Нью-Йорк: ACM, 2008.

Введенный в R2008a