查找从相机拍摄的图像的照度值

时间:2012-07-19 14:36:49

标签: ios objective-c image-processing camera rgb

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

我的问题是: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);

Source

但结果介于0 and 1之间,我认为我无法用illuminance计算lux

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

  

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

如何?有谁知道我该怎么做? 还是有更好的方法呢?

1 个答案:

答案 0 :(得分:3)

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

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

不幸的是,校准取决于您正在成像的场景的物理特性。如果你有很多黑暗,低反射率的物体,那么常数必须设置得更高。

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

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

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