3

我有一个应用程序应该计算给定照片的照度。

我的问题是:i can't find a way to calculate this illuminance index (in lux)

我可以得到luminosity这个代码:

UIImage* image = [UIImage imageNamed:@"image.png"];
unsigned char* pixels = [image rgbaPixels];
double totalLuminance = 0.0;
for(int p=0;p<image.size.width*image.size.height*4;p+=4) {
  totalLuminance += pixels[p]*0.299 + pixels[p+1]*0.587 + pixels[p+2]*0.114;
}
totalLuminance /= (image.size.width*image.size.height);
totalLuminance /= 255.0;
NSLog(@"Image.png = %f",totalLuminance);

来源

但结果介于两者之间0 and 1,我想我不能用它来illuminance计算lux

寻找堆栈溢出的答案我找到了这个答案https://stackoverflow.com/a/2720635/839049女巫给了我一个方向,但我不知道如何继续,因为我不知道如何处理曝光.

..您可以忽略像素数据,将曝光信息用作测光表。...

如何?有谁知道我该怎么做?或者有更好的方法吗?

4

1 回答 1

3

如果您从 Exif 数据中知道曝光值,那么总场景照度可以计算为

pow(2, Exposure)*(0.3 * Calibration);

不幸的是,校准取决于您正在成像的场景的物理特征。如果您有很多深色、低反射率的物体,则必须将常数设置得更高。

通常,曝光计算得出的结果是,您从公式中获得的平均照度,即所有 Y 值的总和除以像素数,约为 0.5(但这取决于相机的“大脑”:一些相机将“区域”中的场景并对每个区域应用不同的权重,例如,即使这意味着使边缘变暗,他们也会尝试在中心区域获得 0.5;最新的相机集成了对比度值,以便从他们推断的内容中捕捉到最多的细节成为“感兴趣的区域”)。

这意味着您的图像将始终“缩放”,除非您以某种方式指示相机以固定速度拍照并停止设置,而不以任何方式进行补偿。如果这样做,您将能够使用平均像素亮度来确定总表观照度。

但是,您将始终必须使用已知仪表校准您的结果。

于 2012-07-19T15:02:21.023 回答