本页目录

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

图像质量

图像质量(IQ)是衡量图像再现原始场景程度的指标。它由许多因素共同决定,例如清晰度、噪声、色彩准确性等。有几种方法可以改善OAK相机的图像质量(IQ)。例如:
  1. 更改彩色相机ISP配置
  2. 尝试保持相机较低灵敏度——低光增加灵敏度
  3. 使用自定义调优文件进行相机调优
  4. 减少运动模糊影响的方法
为了获得最佳图像质量,我们建议针对您的具体应用自行测试。您可以使用RGB相机控制动态(实时)尝试不同的ISP配置和曝光/灵敏度值。

彩色相机ISP配置

您可以配置ColorCamera ISP值,例如sharpnessluma denoisechroma denoise,这可以改善图像质量。我们注意到有时这些值能提供更好的结果:
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配置之间的图像质量差异(讨论在这里)。请注意,为了获得最佳图像质量,您需要针对您的具体应用测试和评估这些值。在广角相机上,您可以在宽视场IMX378和OV9782之间选择。一般来说,OV9782的图像质量不如IMX378,因为它的分辨率低得多,在低分辨率下处理清晰度/噪声也更困难。高分辨率图像可以缩小,噪声会不那么明显。尽管OV9782像素较大,但全局快门的噪声水平通常比卷帘快门更显著。

低光增加灵敏度

下图展示了不同灵敏度值如何影响图像质量。灵敏度只会增加模拟增益,从而增加图像噪声。在低光环境中,应始终增加曝光时间,而不是灵敏度。请注意,默认情况下depthai总是会这样做——但当使用30FPS时,最大曝光时间为33ms。对于下面的右图,我们将ColorCamera设置为10 FPS,以便将曝光时间增加到100ms。
这是一张标准A4相机调优目标在420cm(40勒克斯)下的约15倍数字放大图像。我们为此图像使用了1200万像素的IMX378(在OAK-D上)。

相机调优

我们的库支持设置相机图像质量调优文件,该文件将用于所有相机。默认情况下,相机将使用一个通用调优文件,在大多数情况下效果很好——因此大多数情况下不需要更改相机调优文件。
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广角彩色调优文件在此。修复了直射阳光下的镜头色彩滤光问题,参见博客文章。还改进了LSC(镜头阴影校正)。目前不适用于OV9282,因此在例如带有广角相机的Series 2 OAK上使用时,不应启用单色相机。
  • 相机曝光限制最大500us最大8300us。这些调优文件将限制最大曝光时间,并在达到最大曝光时间后开始增加ISO(灵敏度)。这是一种减少运动模糊的有效方法。

运动模糊

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

高动态范围(HDR)成像

高动态范围(HDR)技术通过在不同亮度级别下多次曝光,并将它们合并成一张图像。这种方法保留了原本会因噪点而丢失的阴影细节,同时防止高光部分过曝,从而在明暗区域共存的场景中生成均衡的图像。

支持的设备

OAK-1 MaxOAK-1 PoE所有 OAK4 型号,以及使用 IMX708IMX582IMX586 模块的 FFC CBA 构建版所搭载的彩色传感器均支持 HDR 控制。这些设备均使用相同的 DepthAI ColorCamera 接口,因此无论管道是直接在设备上运行还是从主机运行,以下配置步骤均适用。

QBC HDR

支持 HDR 的传感器使用Quad Bayer Coding(QBC)HDR,在每个 2×2 像素块中同时捕获长、中、短三种曝光。然后传感器将三者合并成 16 位帧,运行色调控制,再将结果压缩回 10 位流,同时保留高光和阴影细节。
ℹ️ 注意:由于曝光在 2×2 Quad Bayer 像素结构上以不同时长并行进行,在快速移动的场景中可能会出现一些运动伪影。

配置 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,长曝光时间为 100ms 时:
  • 长曝光: 100ms
  • 中曝光: 25ms(100ms / 4)
  • 短曝光: 6.25ms(100ms / 16)

局部色调权重

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

HDR 对比

以下是使用 OAK-1 Max 在 IMX582 传感器上进行的 HDR 与非 HDR 并排对比。左侧图像曝光不足,阴影部分细节丢失;中间图像过度曝光,高光部分被洗白;右侧图像在启用 HDR 时拍摄,保留了整个动态范围的细节。
HDR 图像是使用 camera_hdr.py 脚本生成的。