makehdr

Создайте изображение высокой динамической области значений

Описание

пример

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

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

пример

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

Примечание

Входные файлы изображений должны содержать метаданные экспозиции EXIF (Exchangeable Image File Format). 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.

Оцените функцию отклика камеры из изображений в 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-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-на-1 вектор для полутоновых изображений и n-на-3 матрица для цветных изображений. Функция отклика камеры преобразует значение логарифмической экспозиции (сияние сцены) в уровни интенсивности на входных изображениях. Значение n 2bit depth. Для примера, если битовая глубина входа набора изображений составляет 8, то n равняется 256.

Примечание

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

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

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

свернуть все

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

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

Алгоритмы

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

Ссылки

[1] Reinhard et al. High Dynamic Range Imaging 2006. Гл. 4.

[2] Debevec, P.E., and J. Malik. «Восстановление карт луча высокой динамической области значений из фотографий». В классах ACM SIGGRAPH 2008, статья № 31. Нью-Йорк, Нью-Йорк: ACM, 2008.

Введенный в R2008a