# 图像质量

图像质量（IQ）是衡量图像再现原始场景程度的指标。它由许多因素共同决定，例如清晰度、噪声、色彩准确性等。

有几种方法可以改善OAK相机的图像质量（IQ）。例如：

 1. 更改[彩色相机ISP配置](#Color%20camera%20ISP%20configuration)
 2. 尝试保持相机较低灵敏度——[低光增加灵敏度](#Low-light%20increased%20sensitivity)
 3. 使用自定义调优文件进行[相机调优](#Camera%20tuning)
 4. 减少[运动模糊](#Motion%20blur)影响的方法

为了获得最佳图像质量，我们建议针对您的具体应用自行测试。您可以使用[RGB相机控制](https://docs.luxonis.com/software/depthai/examples/rgb_camera_control.md)动态（实时）尝试不同的ISP配置和曝光/灵敏度值。

## 彩色相机ISP配置

您可以配置[ColorCamera](https://docs.luxonis.com/software/depthai-components/nodes/color_camera.md#colorcamera) ISP值，例如sharpness、luma
denoise和chroma denoise，这可以改善图像质量。我们注意到有时这些值能提供更好的结果：

```python
camRgb = pipeline.create(dai.node.ColorCamera)
camRgb.initialControl.setSharpness(0)     # 范围：0..4，默认：1
camRgb.initialControl.setLumaDenoise(0)   # 范围：0..4，默认：1
camRgb.initialControl.setChromaDenoise(4) # 范围：0..4，默认：1
```

上方的放大图像展示了ISP配置之间的图像质量差异（[讨论在这里](https://discuss.luxonis.com/d/554-image-pipelines-compression-and-filtering/8)）。请注意，为了获得最佳图像质量，您需要针对您的具体应用测试和评估这些值。

在广角相机上，您可以在宽视场IMX378和OV9782之间选择。一般来说，OV9782的图像质量不如IMX378，因为它的分辨率低得多，在低分辨率下处理清晰度/噪声也更困难。高分辨率图像可以缩小，噪声会不那么明显。尽管OV9782像素较大，但全局快门的噪声水平通常比卷帘快门更显著。

## 低光增加灵敏度

下图展示了不同灵敏度值如何影响图像质量。灵敏度只会增加模拟增益，从而增加图像噪声。在低光环境中，应始终增加曝光时间，而不是灵敏度。请注意，默认情况下depthai总是会这样做——但当使用30FPS时，最大曝光时间为33ms。对于下面的右图，我们将ColorCamera设置为10
FPS，以便将曝光时间增加到100ms。

这是一张标准A4相机调优目标在420cm（40勒克斯）下的约15倍数字放大图像。我们为此图像使用了1200万像素的IMX378（在OAK-D上）。

## 相机调优

我们的库支持设置相机图像质量调优文件，该文件将用于所有相机。默认情况下，相机将使用一个通用调优文件，在大多数情况下效果很好——因此大多数情况下不需要更改相机调优文件。

```py
import depthai as dai

pipeline = dai.Pipeline()
pipeline.setCameraTuningBlobPath('/path/to/tuning.bin')
```

可用的调优文件

要调优您自己的相机传感器，需要使用Intel的软件，该软件需要许可证——因此大多数人只能使用预调优的文件。当前可用的调优文件：

 * 用于低光环境的单色调优文件[在此](https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/misc/tuning_mono_low_light.bin)。这允许自动曝光最高达到200ms（否则默认调优限制为33ms）。对于200ms自动曝光，您还需要限制FPS（monoRight.setFps(5)）
 * 用于低光环境的彩色调优文件[在此](https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/misc/tuning_color_low_light.bin)。下方是对比。这允许自动曝光最高达到100ms（否则默认调优限制为33ms）。对于200ms自动曝光，您还需要限制FPS（rgbCam.setFps(10)）。已知限制：自动曝光超过33ms时可能出现闪烁，这是由连续模式下的自动对焦引起的。解决方法是将对焦模式从CONTINUOUS_VIDEO（默认）改为AUTO（仅在初始化时对焦一次，并在后续对焦触发命令时对焦）：camRgb.initialControl.setAutoFocusMode(dai.CameraControl.AutoFocusMode.AUTO)
 * 用于阳光环境的OV9782广角彩色调优文件[在此](https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/misc/tuning_color_ov9782_wide_fov.bin)。修复了直射阳光下的镜头色彩滤光问题，参见[博客文章](https://www.luxonis.com/blog/lens_color_filtering_enhancement)。还改进了LSC（镜头阴影校正）。目前不适用于OV9282，因此在例如带有广角相机的Series
   2 OAK上使用时，不应启用单色相机。
 * 相机曝光限制：[最大500us](https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/misc/tuning_exp_limit_500us.bin)，[最大8300us](https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/misc/tuning_exp_limit_8300us.bin)。这些调优文件将限制最大曝光时间，并在达到最大曝光时间后开始增加ISO（灵敏度）。这是一种减少[运动模糊](#Motion%20blur)的有效方法。

## 运动模糊

当相机快门打开时间较长，且物体在此期间移动时，就会出现[运动模糊](https://en.wikipedia.org/wiki/Motion_blur)。

该动画展示了较短曝光时间（左侧）与较长曝光时间（右侧）的区别。 在较短曝光时间内，即便是快速移动的物体，其移动距离也更短，因此产生的运动模糊更少。

在上图中，右脚在曝光期间移动了约 50 像素，导致该区域图像模糊。 左脚在整个曝光时间内都踩在地面上，因此不会模糊。

在高振动环境中，我们建议使用定焦彩色相机，否则自动对焦镜头会抖动并导致图像模糊（[文档在此](https://docs.luxonis.com/hardware/platform/sensors/focus-type.md)）。

潜在的解决方案：

 * 提供更好的（更亮的）照明，这会使相机使用更短的曝光时间，从而减少运动模糊。
 * 限制快门（曝光）时间——这会减少运动模糊，但也会减少到达传感器的光线，因此图像会更暗。您可以使用更大的传感器（以便更多光子到达传感器）或使用更高的 ISO（感光度）值。限制最大曝光时间的一种方法是使用 [相机调优
   blob](#Camera%20tuning)。

```py
camRgb = pipeline.create(dai.node.ColorCamera)
# 最大曝光限制（微秒）。超过此时间后，将增加 ISO 而非曝光时间。
camRgb.initialControl.setAutoExposureLimit(10000) # 最大 10ms
```

 * 如果运动模糊对模型的准确性产生负面影响，您可以通过在训练数据集中加入运动模糊图像来微调模型，使其对运动模糊更具鲁棒性。

## 高动态范围（HDR）成像

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

### 支持的设备

[OAK-1 Max](https://docs.luxonis.com/hardware/products/OAK-1%2520Max.md)、[OAK-1
PoE](https://docs.luxonis.com/hardware/products/OAK-1%2520PoE.md)、所有 OAK4 型号，以及使用
[IMX708](https://docs.luxonis.com/hardware/sensors/IMX708.md)、[IMX582](https://docs.luxonis.com/hardware/sensors/IMX582.md)、[IMX586](https://docs.luxonis.com/hardware/sensors/IMX586.md)
模块的 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
colorCam.initialControl.setMisc("hdr-exposure-ratio", 4)  # 设置为大于 1 时启用 HDR（可选值：2、4、8）
colorCam.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](https://docs.luxonis.com/hardware/products/OAK-1%2520Max.md) 在 IMX582 传感器上进行的 HDR 与非 HDR
并排对比。左侧图像曝光不足，阴影部分细节丢失；中间图像过度曝光，高光部分被洗白；右侧图像在启用 HDR 时拍摄，保留了整个动态范围的细节。

HDR 图像是使用 [camera_hdr.py](https://github.com/luxonis/depthai-core/blob/main/examples/python/Camera/camera_hdr.py) 脚本生成的。
