C++ 确定没有EXIF数据的图像之间的停止差异

C++ 确定没有EXIF数据的图像之间的停止差异,c++,c,image-processing,C++,C,Image Processing,我有一组相同场景的图像,但是用不同的曝光拍摄。这些图像没有EXIF数据,因此无法提取有用的信息,如f-stop、快门速度等 我要做的是确定图像之间的停止差,即Image1是Image0的+1.3次停止 我目前的方法是首先使用公式从图像的RGB值计算亮度 L=0.2126*R+0.7152*G+0.0722*B 我在等式中看到了不同的数字,但一般来说,它不会对最终结果L产生太大影响 之后,我推导出图像的对数平均亮度 exp(avg of log(luminance of image)) 但不知何

我有一组相同场景的图像,但是用不同的曝光拍摄。这些图像没有EXIF数据,因此无法提取有用的信息,如f-stop、快门速度等

我要做的是确定图像之间的停止差,即Image1是Image0的+1.3次停止

我目前的方法是首先使用公式从图像的RGB值计算亮度

L=0.2126*R+0.7152*G+0.0722*B

我在等式中看到了不同的数字,但一般来说,它不会对最终结果L产生太大影响

之后,我推导出图像的对数平均亮度

exp(avg of log(luminance of image))
但不知何故,对数平均亮度似乎并没有给出多少关于曝光差异的指示。 关于如何确定曝光差异有什么想法吗


编辑:在c/c++

上,通常需要解决两个问题:

1。线性化图像数据

(如果不清楚这意味着什么:像素收集的光线增加两倍,将导致线性化图像中的强度值增加两倍。)

您的图像输入可能已经(充分)线性化->您可以跳到第2部分。如果您的内容来自一个摄像头,并且是JPEG格式,那么情况肯定不是这样

这个问题的真正“解决方案”是找到相机响应函数,您希望将其反转并应用于图像数据以获得线性强度值。这绝不是一项微不足道的任务。该模型广泛应用于各种软件(Photoshop、PTGui、Photomatix等)中,用于描述相机响应功能。一些解决这个问题的开源软件(但使用不同的iirc模型)是不可靠的

话虽如此,您可以使用一个简单的反gamma应用程序。通过执行以下操作,可以找到正确gamma值的粗略“手势”:

  • 拍摄光线均匀的静态场景,曝光时间为e和e/2
  • 在两幅图像上应用两个伽马逆变换(例如,0.1步1.8到2.4)
  • 将所有短曝光图像乘以2.0,然后从相应的长曝光图像中减去它们
  • 选择导致整体差异最小的gamma
  • 2。查找站点中辐照的实际差异,即log2(比例因子)

    假设场景是静态的(没有移动的对象或摄影机),这相对容易:

    sum1 = sum2 = 0
    foreach pixel pair (p1,p2) from the two images:
      if p1 or p2 is close to 0 or 255:
        skip this pair
      sum1 += p1 and sum2 += p2
    return log2(sum1 / sum2)
    
    在大图像上,如果对图像进行子采样,这肯定也会起作用,而且速度会快得多

    如果摄影机是静态的,但场景不是(移动的对象),则开始工作得不太好。在这种情况下,我只需重复上述步骤几次,并使用前一次运行的输出作为正确比例因子的估计,然后丢弃商与当前估计值太远的像素对。因此,基本上将上述
    if
    行替换为以下内容:

    if <see above> or if abs(log2(p1/p2) - estimate) > 0.5:
    
    if或if abs(log2(p1/p2)-估计值)>0.5:
    
    在固定的迭代次数之后,或者如果两个连续的估计值彼此足够接近,我会停止重复

    编辑:关于转换为亮度的注释


    你根本不需要这样做(正如Tony D已经提到的),如果你坚持,那么在线性化步骤之后再做(正如Mark Ransom所指出的)。在完美的设置(静态场景、无噪声、无去镶嵌、无量化)中,每个像素的每个通道将具有相同的比率
    p1/p2
    (如果两者都不饱和)。因此,不同通道的相对权重无关。您可以对所有像素/通道进行求和(R、G和B的权重相等),也可以只使用绿色通道。

    如果您在图像中选择几个点,比较图像中这些点的值,然后对差异求平均值,是否可行,也许可以排除异常值?亮度的差异应该在任何一个通道中都是明显的-不需要特别组合它们。正如user1118321所说,您希望扔掉异常值(任何接近0或255的点),因为它们可能是添加到图像曝光不足或曝光过度部分的噪声。之后,这可能取决于保存图像时应用的伽马-您可以拍摄一些具有已知f-stop差异的图像,并绘制它们的平均亮度以揭示关系。假设您没有EXIF数据,则无法知道快门速度是否不同?因此,观察亮度的方法只有在快门速度相同的情况下才有效。有一件事你没有提到,你应该在转换为亮度之前进行线性化。问题中给出的常数应适用于线性值,例如,参见