2

目标

  • 使用连接到移动车辆的 Android 智能手机拍摄图像
  • 频率:1赫兹
  • 参考型号:谷歌 Pixel 3a
  • 感兴趣的对象:车辆前方的道路/方式
  • 图片用途:作为机器学习(如 RNN)的输入,以识别道路/路面上的损坏
  • 拍摄环境:室外,仅限阴天

当前状态

  • 捕获作品(由于数据大小,目前使用 JPEG 而不是 RAW)
  • 自动曝光有效
  • 静态焦距有效

挑战

  • 图片中的道路/道路的表面通常是模糊的
  • 运动模糊的来源主要来自摇晃的车辆/固定电话
  • 为了减少运动模糊,我们要使用“快门速度优先模式”
    • 即最小化快门速度=>增加ISO(接受增加噪点)
    • 只有一个光圈 (f/1.8) 可用
    • Camera2 API 中没有可用的“快门速度优先模式”(简称:Tv/S-Mode)
    • CameraX API (还)没有提供我们需要的东西(静态焦点、Tv/S 模式)

脚步

  • 将快门速度设置为支持的最快曝光(简单)
  • 自动调整 ISO 设置以进行自动曝光(例如这个公式
  • 要计算 ISO,唯一缺少的部分是光照水平 (EV)

问题

  • 如何在拍摄期间连续估计 EV 以在使用固定快门速度时自动调整 ISO?

到目前为止的想法:

  1. 如果我可以在没有实际启用的情况下从 Camera2 自动曝光 (AE) 例程中读出“建议”,AE_MODE_ON那么我可以轻松计算 EV。但是,到目前为止,我还没有找到用于此的 API。我想如果没有路由设备是不可能的。
  2. 如果环境光传感器能够提供自动曝光(计算 EV)所需的所有信息,这也将非常容易。但是,据我了解,它只测量入射光而不是反射光,因此测量没有考虑图片中的实际物体(它们的表面如何反射光)
  3. 如果我可以从最后一次捕获的像素中获取信息,这也是可行的(如果计算时间适合两次捕获之间的时间)。但是,据我所知,像素“亮度”在很大程度上取决于捕获的对象,即如果捕获的对象的亮度发生变化(路边的许多“黑马”或“白熊”)我会计算EV值不好。
  4. 在实际捕获之间捕获自动曝光的图像,并根据实际捕获的中间捕获中使用的自动选择设置计算光照水平。根据我的理解,这将是一种相对“好”的方式,但在资源端相当困难——我不确定两次捕获之间的可用时间是否足够。

也许我没有看到更简单的解决方案。有没有人做过这样的事情?

4

2 回答 2

2

是的,您需要实现自己的自动曝光算法。所有“真正的”AE 必须通过传感器捕获的图像,所以理论上你可以构建一些同样擅长猜测正确光照水平的东西。

在实践中,你不可能匹配它,因为你有一个更长的反馈循环(AE 算法可以在同步要求上作弊,并且比应用程序更快地更新传感器设置),并且因为 AE 算法可以使用硬件统计单元(收集整个场景的直方图和平均值),这使它更有效。

但是一个简单的自动曝光算法是对整个场景(或场景的一部分,或场景的每十分之一像素等)进行平均,如果该平均值低于最大值的一半,则增加 ISO,如果它是以上,减少。换句话说,一个基本的反馈控制回路。所有关于稳定性、收敛性等的问题都适用。所以一点控制理论的理解在这里会很有帮助。我建议将低分辨率 YUV 输出(可能是 640x480?)从相机输出到 ImageReader 以用作源数据,然后只查看 Y 通道。在这种情况下,没有大量数据需要处理。

或者正如 hb0 所提到的,如果您的户外条件非常有限,您可以尝试为每个条件硬编码值。但是室外亮度的范围可能非常大,因此这需要进行大量测试以确保它能够正常工作,并且每次都需要手动选择正确的值。

于 2020-02-11T20:53:26.323 回答
1

当仅在“室外、多云”等特定光线条件下拍摄照片时:

列表值可用于曝光值 (EV),而不是使用光测量值。

例子

  • 室外多云 (OC) 的 EV100 (iso100) = 13
  • OC 的 EV(动态 iso)= EV100 + log2(iso/100)

使用这个公式和那些公式,我们可以计算出 iso:

  • 光圈(固定)
  • 快门速度(手动选择)

此外,我们可以添加一个 UI 选项来选择“轻度情况”,例如:

  • 户外, 多云
  • 户外, 阳光明媚
  • 等等

这可能不是最准确的方法,但目前是继续进行原型设计的第一种简单方法。

于 2020-02-11T15:04:43.073 回答