如何估算相机曝光时间,以拍摄出一张好的场景照片

5
我正在尝试编写代码,计算相机正确曝光时间,以使图像亮度正确。
我有一台相机提供我原始数据(Bayer原始数据),我可以控制它的曝光时间。我希望控制曝光时间,使得当它捕获图像时,图像的亮度是正确的(不过度曝光或不欠曝光)。
我认为我需要类似这样的算法:
1-capture a sample image
2-calculate image brightness.
3-calculate correct exposure.
4-capture a new image,
5-check that the image brightness is correct if not go to step 3.
6- capture final image.

我的问题是:

  1. 如何计算图像亮度?
  2. 如果我计算了图像亮度,如何计算曝光?一种方法是进行搜索(例如从非常快的曝光时间开始逐渐增加直到获得正确的曝光,但这是非常耗时的,是否有更好的方法可以做到这一点?
    1. 要做到这一点,我可能需要校准我的相机(因为不同传感器之间的亮度和曝光时间之间的关系是不同的),我该怎么做?

我正在使用OpenCV,我可以使用OpenCV(c ++)中提供的算法。

1个回答

2
有多种方法可以衡量图像的“正确”亮度。一种常见的方法是计算强度直方图,并确保值覆盖整个值范围,没有太多的截断。我不确定是否存在适用于任何可能场景的单一“通用”方法。

enter image description here

一种比线性增加曝光时间更快的方法是进行二分搜索,通过在低曝光和高曝光下进行测量,然后在中间进行测量,并继续在中间拆分子范围,直到找到最佳值。

谢谢。关于这个方法,我有一些问题:如何通过编程检测图像是否曝光过度或曝光不足?OpenCV中是否有任何算法可以帮助我?是否有任何方法可以在不进行长时间曝光的情况下找到近似曝光值?假设我有一个可以在2秒内捕获的相机,那么如果我从2秒开始捕获,算法就太慢了。是否有更好的方法?二分查找可能会非常缓慢。 - mans
检测可以通过检查直方图的顶部/底部X%是否未位于边缘箱中(需要调整X)来实现简单的操作,但我不熟悉在您可能拥有的约束条件下优化的算法。我甚至不确定是否可能。 - Photon
如果您始终使用相同的相机,您可能能够预先计算一些平均强度曲线以进行曝光,这将给出一个良好的起点。不过这只是猜测,需要证明。 - Photon
我尝试创建曲线,但曲线取决于ISO(增益)和场景,因此不可能定义单个曲线并尝试从中找到曝光。 - mans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接