此页面由 AI 自动翻译。查看英文原版

本页目录

  • 彩色相机 ISP 配置
  • 低光增加灵敏度
  • 相机调优
  • 运动模糊
  • 高动态范围 (HDR) 成像
  • 支持的设备
  • QBC HDR
  • 配置 HDR 控件
  • HDR 对比

图像质量

图像质量 (IQ) 是衡量图像在多大程度上能准确表示原始场景的指标。 它是许多因素的组合,例如清晰度、噪点、色彩准确性等。有几种方法可以提高 OAK 相机的图像质量 (IQ)。以下是一些示例:
  1. 更改 彩色相机 ISP 配置
  2. 尝试保持相机灵敏度较低 - 低光增加灵敏度
  3. 使用自定义调优文件进行 相机调优
  4. 减少 运动模糊 效果的方法
为获得最佳 IQ,我们建议您针对特定应用进行自行测试。您可以使用 RGB 相机控制 动态(实时)尝试不同的 ISP 配置和曝光/灵敏度值。

彩色相机 ISP 配置

您可以配置 ColorCamera ISP 值,例如 sharpness(锐度)、luma denoise(亮度降噪)和 chroma denoise(色度降噪),这些值 可以提高 IQ。我们注意到,有时这些值会提供更好的结果:
Python
1camRgb = pipeline.create(dai.node.ColorCamera)
2camRgb.initialControl.setSharpness(0)     # 范围:0..4,默认值:1
3camRgb.initialControl.setLumaDenoise(0)   # 范围:0..4,默认值:1
4camRgb.initialControl.setChromaDenoise(4) # 范围:0..4,默认值:1
上面放大的图像展示了 ISP 配置之间的 IQ 差异(讨论在此)。 请注意,为获得最佳 IQ,您需要针对特定应用测试和评估这些值。在广角 FOV 相机上,您可以在 IMX378 广角 FOV 和 OV9782 之间进行选择。总的来说,OV9782 的 IQ 不如 IMX378 因为分辨率低得多,并且在低分辨率下处理锐度/噪点更困难。在高分辨率下,图像可以缩小,噪点会不那么明显。 尽管 OV9782 的像素尺寸相当大,但总的来说,全局快门的噪点水平比滚动快门更显著。

低光增加灵敏度

在下图您可以看到不同的灵敏度值如何影响 IQ。灵敏度只会增加模拟增益,这会增加图像噪点。在弱光环境下,应始终增加曝光,而不是灵敏度。请注意,默认情况下,depthai 始终会这样做 - 但在使用 30FPS 时,最大曝光时间为 33ms。对于下图右侧的图像,我们将 ColorCamera 设置为 10 FPS,因此能够将曝光时间增加到 100ms。
在 420cm(40 勒克斯)的标准 A4 相机调优目标上,大约 15 倍数码变焦的图像。我们在此图像中使用了 12MP IMX378(在 OAK-D 上)。

相机调优

我们的库支持设置相机 IQ 调优文件,该文件将用于所有相机。 默认情况下,相机将使用一个通用调优文件,该文件在大多数情况下效果很好 - 因此在大多数情况下无需更改相机 调优文件。
Py
1import depthai as dai
2
3pipeline = dai.Pipeline()
4pipeline.setCameraTuningBlobPath('/path/to/tuning.bin')
可用的调优文件要调优您自己的相机传感器,需要使用 Intel 的软件,该软件需要许可证
  • 因此,大多数人只能使用预调优的文件。当前可用的调优文件:
  • 用于弱光环境的单声道调优 在此处。这允许自动曝光达到 200ms(否则默认调优限制为 33ms)。对于 200ms 自动曝光,您还需要限制 FPS(monoRight.setFps(5)
  • 用于弱光环境的彩色调优 在此处。比较如下。这允许自动曝光达到 100ms(否则默认调优限制为 33ms)。对于 200ms 自动曝光,您还需要限制 FPS(rgbCam.setFps(10))。已知限制:当自动曝光超过 33ms 时可能会出现闪烁,这是由连续模式下的自动对焦引起的。一种解决方法是从 CONTINUOUS_VIDEO(默认)更改为 AUTO(仅在初始化时和后续对焦触发命令时进行对焦):camRgb.initialControl.setAutoFocusMode(dai.CameraControl.AutoFocusMode.AUTO)
  • 用于阳光环境的 OV9782 广角 FOV 彩色调优 在此处。修复了阳光直射下的镜头颜色过滤问题,请参阅博客文章。它还改进了 LSC(镜头阴影校正)。目前不适用于 OV9282,因此当在例如 Series 2 OAK 上使用广角 FOV 相机时,不应启用单声道相机。
  • 相机曝光限制最大 500us最大 8300us。这些调优文件将限制最大曝光时间,并在达到最大曝光时间后开始增加 ISO(灵敏度)。这是一种减少 运动模糊 的有用方法。

运动模糊

运动模糊 当相机快门打开时间较长,并且物体在此期间移动时会出现。
卷帘快门传感器时序
动画显示了较短(左)和较长(右)曝光时间之间的区别。 在较短的曝光时间内,即使是快速移动的物体也可以移动较短的距离,从而导致运动模糊较少。
在上图中,右脚在曝光时间内移动了约 50 像素,导致该区域图像模糊。 左脚在曝光的整个时间内都放在地面上,因此不模糊。高振动环境中,我们建议使用定焦彩色相机,否则自动对焦镜头会抖动并导致图像模糊 文档在此潜在的解决方法:
  • 提供更好的(更亮的)照明,这将使相机使用更短的曝光时间,从而减少运动模糊。
  • 限制快门(曝光)时间 - 这将减少运动模糊,但也会减少到达传感器的光线,因此图像会变暗。您可以选择使用更大的传感器(以便更多光子击中传感器)或使用更高的 ISO(灵敏度)值。限制最大曝光时间的一种方法是使用 相机调优 blob
Py
1camRgb = pipeline.create(dai.node.ColorCamera)
2# 最大曝光限制(微秒)。在此时间后,将提高 ISO 而不是曝光。
3camRgb.initialControl.setAutoExposureLimit(10000) # 最长 10 毫秒
  • 如果运动模糊对模型的准确性产生负面影响,您可以通过在训练数据集中包含运动模糊图像来对其进行微调,使其对运动模糊更具鲁棒性。

高动态范围 (HDR) 成像

高动态范围 (HDR) 捕获不同亮度级别的多个曝光,并将它们合并为单个图像。这种方法可以保留否则会因噪点而丢失的阴影细节,同时还能防止高光过曝,从而在明暗区域都存在的场景中获得平衡的图像。

支持的设备

HDR 控件在随 OAK-1 MaxOAK-1 PoE所有 OAK4 型号以及使用 IMX708IMX582IMX586 模块的 FFC CBA 套件提供的彩色传感器上可用。这些设备中的每一个都公开相同的 DepthAI ColorCamera 接口,因此无论管道是直接在设备上运行还是从主机运行,以下配置步骤都适用。

QBC HDR

支持 HDR 的传感器使用四拜耳编码 (QBC) HDR,同时在每个 2×2 像素块中捕获长、中、短曝光。然后,传感器将三者合并为 16 位帧,运行色调控制,并将结果压缩回 10 位流,该流同时保留了高光和阴影细节。
ℹ️ 注意:由于曝光在具有不同持续时间的 2×2 四拜耳像素结构上并行发生,因此在快速移动的场景中可能会出现一些运动伪影。

配置 HDR 控件

在启动管道之前,通过设置 ColorCamera 控件来配置 HDR:
Python
1colorCam.initialControl.setMisc("hdr-exposure-ratio", 4)  # 设置为 > 1 时启用 HDR(选项:2、4、8)
2colorCam.initialControl.setMisc("hdr-local-tone-weight", 75)  # 范围:0..100

曝光比

hdr-exposure-ratio 控制构成单个 HDR 图像的三个独立捕获的相对曝光时间:
  • 长曝光: 这是基本曝光时间,通常手动设置或通过自动曝光设置。
  • 中曝光: 计算为 长曝光时间 / hdr-exposure-ratio
  • 短曝光: 计算为 长曝光时间 / (hdr-exposure-ratio * hdr-exposure-ratio)
例如,当 hdr-exposure-ratio 为 4 且长曝光为 100 毫秒时:
  • 长曝光: 100 毫秒
  • 中曝光: 25 毫秒 (100 毫秒 / 4)
  • 短曝光: 6.25 毫秒 (100 毫秒 / 16)

局部色调权重

hdr-local-tone-weight 有助于平衡亮度对比度调整如何在整个图像中应用:
  • 局部色调映射: 调整小区域的亮度和对比度,以保留细节和纹理。
  • 全局色调映射: 修改整个图像,使其看起来平衡且逼真。
较高的 hdr-local-tone-weight 值可以增强细节,但可能导致不自然的对比度。较低的值有助于图像看起来均匀,但可能会降低细节区域的清晰度。OAK-1 Max

HDR 对比

以下是使用 OAK-1 Max 在 IMX582 传感器上进行 HDR 与非 HDR 的并排对比。左侧图像曝光不足,隐藏了阴影中的细节。中间图像曝光过度,导致高光区域泛白。右侧图像(启用 HDR 拍摄)在整个动态范围内都保留了细节。
HDR 图像是使用 camera_hdr.py 脚本生成的。