使用相机响应函数的高动态和低动态范围示例

简短说明

文件: \examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Bayer.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Color.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange\HDR_CRC_Gray.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_8bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_10bit_8192_4xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_16384_2xCxp2L.vad
\examples\Processing\HDR_ImageComposition\HighDynamicRange_HighDynamicRange_racer2L\HDR_CRC_Mono_12bit_8192_4xCxp2L.vad

默认平台: mE5-MA-VCL, imaFlex CXP-12 Quad

简要说明

基于 Debevec 和 Malik 的 HDR 算法,以及基于 Reinhard 等人和 Fattal 等人的 LDR 算法。

高动态范围 (HDR) 图像能够再现高范围的亮度。因此,非常暗和非常亮的细节可以组合在同一张图像中。 在大多数摄影技术中,很难通过单个 Exposure Time 实现如此高的亮度范围。因此,HDR 图像是通过具有不同 Exposure Time 的图像创建的。 大多数显示器无法直接显示 HDR 图像。因此,为了显示 HDR 图像,需要将亮度对比度按比例缩减为低动态范围 (LDR) 图像。 此过程也称为色调映射。在此 VisualApplets 示例中,实现了根据 Debevec 和 Malik [Deb97] 的 HDR 算法。 LDR 算法基于 Reinhard [Rei02] 和 Fattal [Fat02]。下面将简要解释这两种算法。

高动态范围成像

像素值 在具有像素坐标的图像 i 中 和 可以表示为辐照度值 和 Exposure Time :

的函数 公式 32。


当我们定义 时,得出:

公式 33。


其中我们将 称为响应曲线。 它将 Exposure Time 的像素值 与场景辐照度关联起来 . 假定每个像素都是常数。 已知 和 , 可以用奇异值分解方法 [Deb97] 计算。 现在可以使用以下表达式 [Deb97] 创建 HDR 图像:

公式 34。


其中 是生成的 HDR 图像中像素 x,y 处的对数辐照度值(以 为底)。对于彩色图像 是红色、绿色 和蓝色值 (, 和 ). 即, 公式 34 必须分别计算红色、绿色和蓝色值。 是曝光次数。 在 公式 34 是一个加权函数:

公式 35。


低动态范围成像

拜尔和彩色图像

为了显示 HDR 图像,必须降低亮度对比度。根据 Reinhard 等人的研究 [Rei02],LDR 亮度 可以计算为:

公式 36。


在此 是缩放后的 HDR 亮度:

公式 37。


参数 用于调整所显示 LDR 图像的亮度。 典型值介于 0.09 和 0.72 之间 [Rei02]。所谓的相对“世界”亮度 根据 HDR 颜色计算得出: , 和 :

公式 38。


平均值 在此示例中计算为

公式 39。


根据 Fattal 等人的研究 [Fat02],LDR 颜色分量 , 和 现在可以重建为

公式 40。


灰度图像

LDR 图像值 用于在显示器上输出的灰度图像可以计算为:

公式 41。


在此 是根据以下内容进行 HDR 处理的结果 公式 34. 是一个参数常量,可用于调整输出图像中的亮度。

VisualApplets 设计

用于拍摄具有极宽亮度范围(包含极暗和极亮物体)场景的 HDR/LDR 算法已在 VisualApplets 中实现, 适用于 灰度(“HDR_CRC_Gray.vad”)、Bayer(“HDR_CRC_Bayer.vad”)和彩色(“HDR_CRC_Color.vad”)相机图像。 图像传输至 PC,其中场景的每个物体都能正确显示。 设计“HDR_CRC_Bayer.vad”的基本结构如图 347 所示。所有示例均遵循相同的原则。 对于 Bayer 模式原始图像,每个图像像素的红、绿、蓝色值是在 HierarchicalBox Bayer 中使用 Bayer5x5Linear 算子计算的。此框仅包含在示例“HDR_CRC_Bayer.vad”中。 在框 ImageSequence 中,缓存了三幅图像的序列。这三幅图像应具有用于 HDR-LDR 处理的三种不同 Exposure Time。 选择 Exposure Time 时应确保每个图像像素在曝光序列的至少一幅图像中 既不曝光不足也不曝光过度。 您可以通过 HierarchicalBox Trigger(参见图 348)中的算子 SignalWidth width1 到 width3 来设置这些时间。 请注意,时间刻度为 8 ns 的系统时钟周期。算子 Generate-Period 必须至少设置为大于算子 SignalWidth width1 到 width3 最长时间的值。此外,请参阅相机手册中了解算子 Generate-Period 的最小周期长度。 这三幅图像使用上文所述根据 Debevec 和 Malik [Deb97] 的 HDR 算法进行组合。它在 HierarchicalBox HDR(图 347)中实现。对于灰度、Bayer 和彩色图像,实现方式是相同的。 LDR 算法在 LDR 中实现。彩色/Bayer 图像与灰度图像的实现方式不同(参见小节 和 )。生成的 RGB 图像的颜色在 HierarchicalBox OutputToPC 中合并。此框在示例“HDR_CRC_Gray.vad”中不存在。 算子 SourceSelector 允许选择处理后的 HDR-LDR 图像或 (Bayer 去马赛克后的)相机图像的 DMA 传输。

基本设计结构

图 347. 基本设计结构


Trigger 框的内容

图 348. Trigger 框的内容


在图 349 中,您可以看到 HierarchicalBox HDR的内容。对于缓冲图像序列的三幅图像,分子 和分母的项 的 公式 34 分别针对图像一到三(HierarchicalBox Image1 更改为 Image3)的红、绿、蓝色单独计算。

HDR 框的内容

图 349. HDR 框的内容


在图 350 以图像 1 的红色为例(在 HierarchicalBox 红色 中的框 Image1内),您可以看到此计算。所有图像的所有颜色都以相同的方式处理。相机响应曲线 (CRC) 的对数值通过 HierarchicalBox 中的查找表分配给(红/绿/蓝)像素值。 over127 如果像素值大于 127 或在框内 underequal127 如果像素值小于或等于 127。这些查找表的内容 gO127 和 g_ueq_127 红色、绿色和蓝色的颜色可以通过 Matlab 程序模块“HDR_CRC.m”、“sample.m”和“gsolve.m”(在 \examples\Processing\Advanced\HighDynamicRange\ 下)计算,这些程序模块 基于 Debevec 和 Malik 的代码 [Deb97] 并部分基于 M. Eitz 的示例 [Eit07]。 请阅读“HDR_CRC.m”中的简短手册,了解有关如何使用该代码的更多说明。 通过 CONST 算子 LNdt1 (以及模拟 LNdt2 和 LNdt3 对于图像 2 和 3) 可以设置曝光时间的对数值(以 e 为底)。请注意,该值必须乘以 因为有 16 个小数位。 相应的时间基准可以通过参数 LNTimeBase来选择。的值 , 或 将时间标度设置为秒、毫秒或微秒。在查找表中 weight 中看到框 350 的权重函数 Equation 35 已实现。使用 Matlab 程序模块“HDR_CRC.m”、“sample.m”和“Weight.m”可以创建权重表“Weights.txt”。 另请阅读“HDR_CRC.m”中的简短手册 (或用于灰度图像的“HDR_CRC_Gray.m”)以获取进一步说明。HierarchicalBox 的最终输出 红色 (以及模拟 绿色 和 蓝色) 在框中 Image1 (以及模拟 Image2 和 Image3) 随后为 和 .

Image1 中 Red 分量的内含物

图 350. Image1 中的 Red 分量内含物


回到图 349 作为框的内含物 HDR。 HDR 彩色分量对数值的计算 , 和 根据 公式 34 在框中执行 红色, 绿色 和 蓝色。此处实现了对分子 和 分母 所有分量的求和以及最终的除法 (例如参见图 351 中的红色)。

HDR 下 Red 框的内含物

图 351. HDR 下 Red 框的内含物


框 Lw 中看到框 349 包含根据对数值计算 HDR 颜色值的内容。 指数函数通过查找表实现。然后根据 , 和 根据它们的对数值。指数函数通过查找表实现。然后根据 HDR 颜色分量计算相对“世界”亮度“Lw”。 方程 38计算相对的“world”亮度“Lw”。 其平均值根据 方程 39 在模块的框 Lw_d 中计算 LDR (参见基本设计结构图 347)。全部内容 LDR 如图所示。 352.

设计“HDR_CRC_Bayer.vad”和“HDR_CRC_Color.vad”中 LDR 框的内容

图 352. 设计“HDR_CRC_Bayer.vad”和“HDR_CRC_Color.vad”中 LDR 框的内容


模块 Ls 包含根据以下公式计算缩放后的亮度 公式 37 即相对“world”亮度与其平均值的除法,再乘以一个“brightness 参数” a。通过更改此参数值,可以更改最终处理图像的亮度。您可以在 VA 设计的注释框中找到此参数的合适值,或者如果您深入了解,可以在 [Rei02]. LDR_Luminance 根据以下公式计算 LDR 亮度 公式 36。此最终值将与 HierarchicalBox HDRColor , 和 的输出相乘,分别对应红色、绿色和蓝色分量。结果即为处理后输出图像的 LDR 红色、绿色和蓝色彩色分量 [Fat02]。 HierarchicalBox 的内容 LDR 灰度图像如图所示 353.

设计“HDR_CRC_Gray.vad”中 LDR 框的内容

图 353. 设计“HDR_CRC_Gray.vad”中 LDR 框的内容


在 HierarchicalBox 中 Exp_Ln 根据其对数值计算得出 作为 HDR 处理的结果(公式 34)。 在方框 SQRT 中,根据节 中的算法提取平方根。将结果除以其自身 加 。可以通过算子 ShiftLeft_Brightness.