主要内容

makehdr

创建高动态范围图像

描述

例子

HDR= makehdr (文件创建单精度、高动态范围(HDR)图像HDR从空间注册,低动态范围(LDR)图像的集合文件

HDR= makehdr (洛桑国际管理发展学院创建单精度,高动态范围图像HDR从存储为的空间注册LDR图像集中ImageDatastore对象,洛桑国际管理发展学院

例子

HDR= makehdr (___名称,值使用名称-值对来控制图像创建的各个方面,以及来自前面任何语法的输入参数。

请注意

输入图像文件必须包含EXIF (Exchangeable image File Format)曝光元数据。makehdr使用最亮和最暗图像之间的中间曝光作为HDR计算的基础曝光。这个值不需要出现在任何特定的文件中。有关计算中间曝光值的更多信息,请参见算法

例子

HDR= makehdr (图片名称,值创建单精度HDR图像HDR从存储在单元阵列中的空间注册的LDR图像集图片.使用名称-值对指定输入单元格数组中图像的曝光值“ExposureValues”“RelativeExposure”

请注意

当输入是LDR图像的单元格数组时,必须指定曝光值或相对曝光值作为第二个输入参数。要指定公开值,请使用名称-值对“ExposureValues”.要指定相对曝光值,请使用名称-值对“RelativeExposure”

例子

全部折叠

从一组低动态范围(LDR)图像中创建高动态范围(HDR)图像,这些图像共享相同的光圈,但具有不同的曝光时间。

将6张低动态范围图像加载到工作区中。创建一个各自曝光时间的向量。显示图像作为蒙太奇。

文件= {“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];蒙太奇(文件)

图中包含一个轴对象。axis对象包含一个image类型的对象。

将LDR映像合并为HDR映像。

HDR = makhdr(文件,“RelativeExposure”expTimes. / expTimes (1));

显示HDR图像。

RGB = tonemap(hdr);imshow (rgb)

图中包含一个轴对象。axis对象包含一个image类型的对象。

从一组六张低动态范围(LDR)图像中创建一张高动态范围(HDR)图像,这些图像共享相同的光圈,但具有不同的曝光时间。从这些LDR图像计算出估计的相机响应函数值,并用于生成HDR图像。

将六个空间注册的LDR映像集读入工作区。创建一个imageDatastore包含这些图像的对象。显示图像作为蒙太奇。

setDir = fullfile(toolboxdir(“图片”),“imdata”“office_ *”);imds = imageDatastore(setDir);蒙太奇(imd)

图中包含一个轴对象。axis对象包含一个image类型的对象。

从数据存储中的图像估计相机响应函数。

CRF = camresponse(imds);

通过使用估计的相机响应函数值,将LDR图像合并为HDR图像。

HDR = makhdr (imds,“CameraResponse”crf);

显示HDR图像。

RGB = tonemap(hdr);imshow (rgb)

图中包含一个轴对象。axis对象包含一个image类型的对象。

从低动态范围(LDR)图像单元阵列创建高动态范围(HDR)图像,这些图像共享相同的光圈,但具有不同的曝光时间。

将6张低动态范围的图像读入工作区。

图片1 = imread(“office_1.jpg”);Image2 = imread(“office_2.jpg”);图片3 = imread(“office_3.jpg”);图片4 = imread(“office_4.jpg”);图片5 = imread(“office_5.jpg”);图片6 = imread(“office_6.jpg”);

使用单元构造操作在工作区中创建LDR图像的单元数组,{}

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

显示图像作为蒙太奇。

蒙太奇(图片)

图中包含一个轴对象。axis对象包含一个image类型的对象。

为输入单元格数组中的每个LDR图像指定曝光值。

暴露= [0.0333 0.1000 0.3333 0.6250 1.3000 4.0000];

计算相对于输入单元阵列中第一个LDR图像的曝光值的相对曝光值。

releexposure = exposure./exposure(1);

将LDR映像合并为HDR映像。指定单元格数组中每个图像的相对曝光值。

HDR = makhdr(图片,“RelativeExposure”, relExposure);

显示HDR图像。

RGB = tonemap(hdr);imshow (rgb)

图中包含一个轴对象。axis对象包含一个image类型的对象。

输入参数

全部折叠

空间注册的LDR映像集,指定为字符串数组或字符向量的单元格数组。这些图像可以是任何位深度的彩色或灰度。但是,LDR图像的首选位深度为8或16。

数据类型:字符|字符串|细胞

一组空间注册的LDR映像,指定为ImageDatastore对象。这些图像可以是任何位深度的彩色或灰度。但是,LDR图像的首选位深度为8或16。

空间注册的LDR映像集,指定为单元格数组。这些图像可以是任何位深度的彩色或灰度。但是,LDR图像的首选位深度为8或16。

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:makhdr (files,'RelativeExposure',[0.1 0.3 0.4]);

用作基本曝光的文件名,指定为字符串标量或字符向量。

数据类型:字符|字符串

请注意

  • 您只能使用其中的一个“BaseFile”“ExposureValues”,“RelativeExposure”一次生成名称-值对。

  • 你不能指定“BaseFile”当输入是空间注册的LDR图像的单元格数组时,则为名称-值对。

输入集中每个图像的曝光值,指定为正数值向量。的k向量中的第Th元素对应于k第th LDR图像在输入集中。每增加一个暴露值(EV),就相当于暴露量增加一倍。降低一个EV相当于暴露量减半。如果指定此参数,该函数将覆盖EXIF公开元数据。

数据类型:|

输入集中每个图像的相对曝光值,指定为正数值向量。的k向量中的第Th元素对应于k第th LDR图像在输入集中。

例如,相对曝光(RE)值为0.5的图像的曝光量是RE值为1的图像的一半。类似地,RE值为3的图像的曝光量是RE值为1的图像的3倍。如果指定此参数,该函数将覆盖EXIF公开元数据。

数据类型:|

正确暴露的最小值,指定为正整数。对于每一张LDR图像,小于这个最小值的像素被认为是曝光不足的,不影响最终的HDR图像。默认情况下,此最小值设置为图像数据类型允许的最大强度的2%。

数据类型:|

最大正确暴露值,指定为正整数。对于每一张LDR图像,大于这个最大值的像素被认为是过度曝光,不影响最终的HDR图像。默认情况下,这个最大值被设置为图像数据类型允许的最大强度的98%。

数据类型:|

相机响应功能,指定为n-by-1矢量用于灰度图像和n-by-3矩阵用于彩色图像。相机响应函数将日志曝光值(场景亮度)映射到输入图像中的强度级别。的价值n是2位深度.例如,如果输入图像集的位深度为8,则n是256。

请注意

“MaximumLimit”而且“MinimumLimit”时忽略名称-值对“CameraResponse”都是确定的。

数据类型:|

输出参数

全部折叠

高动态范围图像,返回为——- - - - - -n-by-3数值数组。

数据类型:

算法

makehdr函数通过使用输入图像的曝光值(ev)来计算中间曝光值。每张图像的曝光值是根据光圈和快门速度计算出来的。光圈和快门速度值存储在该输入文件的EXIF元数据中,或者使用“ExposureValues”名称-值对。中间的EV计算为最高和最低EV的平均值,并用作基础曝光。

参考文献

[1] Reinhard等人。高动态范围成像2006.Ch。4。

[2]德贝维奇,p.e.和J.马利克。从照片中恢复高动态范围辐射图在ACM SIGGRAPH 2008类第31条。纽约,纽约州:ACM, 2008。

版本历史

在R2008a中引入