|

本帖最后由 z13228604287 于 2022-5-12 16:52 编辑
在本教程中,我们将学习如何使用 OpenCV 进行曝光融合。我们将分享 易语言 代码。
什么是曝光融合?
曝光融合是一种将使用不同曝光设置拍摄的图像组合成一个看起来像色调映射的高动态范围 (HDR) 图像的方法。
如果您不了解 HDR 成像或想了解更多信息,请查看我们关于使用 OpenCV 进行 HDR 成像的帖子。
当我们使用相机拍摄照片时,每个颜色通道只有 8 位来表示场景的亮度。然而,理论上,我们周围世界的亮度可以从 0(漆黑)到几乎无限(直视太阳)不等。因此,傻瓜相机或移动相机根据场景决定曝光设置,以便使用相机的动态范围(0-255 值)来表示图像中最有趣的部分。例如,在许多相机中,人脸检测用于查找人脸,并设置曝光以使人脸看起来光线充足。
这就引出了一个问题——我们能否在不同的曝光设置下拍摄多张照片并捕捉更大范围的场景亮度?答案是肯定的!使用HDR 成像和色调映射的传统方式。
HDR 成像需要我们知道精确的曝光时间。HDR 图像本身看起来很暗,看起来并不漂亮。HDR 图像中的最小强度为 0,但理论上没有最大值。所以我们需要将它的值映射到 0 到 255 之间,这样我们才能显示它。这种将 HDR 图像映射到每通道 8 位常规彩色图像的过程称为色调映射。
如您所见,组装 HDR 图像然后进行色调映射有点麻烦。我们不能只使用多个图像并创建色调映射图像而无需使用 HDR。事实证明,我们可以使用 Exposure Fusion 做到这一点。
曝光融合如何工作?
应用曝光融合的步骤如下所述
第 1 步:捕获具有不同曝光度的多张图像
首先,我们需要在不移动相机的情况下捕捉同一场景的一系列图像。如上所示,序列中的图像具有不同的曝光。这是通过改变相机的快门速度来实现的。通常,我们会选择一些曝光不足的图像,一些曝光过度的图像,以及正确曝光的图像。
在“正确”曝光的图像中,选择快门速度(由相机或摄影师自动选择),以便使用每通道 8 位的动态范围来表示图像中最有趣的部分。太暗的区域被裁剪为 0,太亮的区域饱和到 255。
在曝光不足的图像中,快门速度较快,图像较暗。因此,图像的 8 位用于捕获明亮区域,而黑暗区域被裁剪为 0。
在曝光过度的图像中,快门速度较慢,因此传感器捕获的光线更多,因此图像很亮。传感器的 8 位用于捕捉黑暗区域的强度,而明亮区域的饱和度为 255。
大多数单反相机都有一个称为自动包围曝光 (AEB) 的功能,只需按一下按钮,我们就可以在不同的曝光下拍摄多张照片。如果您使用的是 iPhone,则可以使用此AutoBracket HDR 应用程序,如果您是 android 用户,则可以尝试A Better Camera 应用程序。
一旦我们捕获了这些图像,我们就可以使用下面的代码来读取它们。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 图片集 | 多维矩阵类 | | 16 | 对齐 | 多维矩阵类 | | 0 | 是否对齐 | 逻辑型 | | | 对齐MTB | 对齐MTB类 | | | 曝光融合 | 多维矩阵类 | | | 合并 | 合并类 | | | 按键 | 整数型 | | | 视觉_控制台输出 (“读取图像...\n”, ) 图片集 [1 ]. 从字节集加载 ( #图片1, #读图_彩色 )图片集 [2 ]. 从字节集加载 ( #图片2, #读图_彩色 )图片集 [3 ]. 从字节集加载 ( #图片3, #读图_彩色 )图片集 [4 ]. 从字节集加载 ( #图片4, #读图_彩色 )图片集 [5 ]. 从字节集加载 ( #图片5, #读图_彩色 )图片集 [6 ]. 从字节集加载 ( #图片6, #读图_彩色 )图片集 [7 ]. 从字节集加载 ( #图片7, #读图_彩色 )图片集 [8 ]. 从字节集加载 ( #图片8, #读图_彩色 )图片集 [9 ]. 从字节集加载 ( #图片9, #读图_彩色 )图片集 [10 ]. 从字节集加载 ( #图片10, #读图_彩色 )图片集 [11 ]. 从字节集加载 ( #图片11, #读图_彩色 )图片集 [12 ]. 从字节集加载 ( #图片12, #读图_彩色 )图片集 [13 ]. 从字节集加载 ( #图片13, #读图_彩色 )图片集 [14 ]. 从字节集加载 ( #图片14, #读图_彩色 )图片集 [15 ]. 从字节集加载 ( #图片15, #读图_彩色 )图片集 [16 ]. 从字节集加载 ( #图片16, #读图_彩色 ) 如果 (取数组成员数 (图片集 ) > 1 ) 是否对齐 = 真  是否对齐 = 假
判断 (是否对齐 ) 对齐MTB = 视觉_创建对齐MTB (6, 4, 1 ) 对齐MTB. 对齐 (图片集, 对齐 ) 视觉_控制台输出 (“跳过对齐。\n”, ) 视觉_控制台输出 (“使用 Exposure Fusion 合并。\n”, )合并 = 视觉_创建合并 (1, 1, 0 )合并. 合并 (图片集, 曝光融合 )视觉_控制台输出 (“按 S 键进行保存。\n”, )视觉_显示图像 (“小白鼠”, 曝光融合 )按键 = 视觉_等待按键 (0 ) 如果真 (按键 = 115 或 按键 = 83 ) 视觉_控制台输出 (“保存输出...曝光融合.jpg\n”, ) 视觉_图像写 (“曝光融合.jpg”, 曝光融合. 乘值 (255 ), ) 返回 (0 )
|
|