如何从色彩校正增益中获得色温

我正在试图找出相机拍摄的照片的色温。

final CameraCaptureSession.CaptureCallback previewSSession = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { super.onCaptureStarted(session, request, timestamp, frameNumber); } @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); RggbChannelVector rggbChannelVector = result.get(CaptureResult.COLOR_CORRECTION_GAINS); getColorTemperature(rggbChannelVector); startCamera(); } }; private void getColorTemperature(RggbChannelVector rggbChannelVector) { //rggbChannelVector.getRed() = 2.192929 //rggbChannelVector.getGreenEven() = 1.0 //rggbChannelVector.getGreenOdd() = 1.0 //rggbChannelVector.getBlue() = 1.832323 } 

iOS似乎有一个现成的方法来做那个温度和时间值

在search类似的东西时(使用Java或任何其他语言),几乎所有这些方法都需要一个范围为[0, 255]的RGB值。

有很less的方法将XYZ转换为CCT(相关色温),但即使获得正确的XYZ值,我需要在[0, 255]

正如你所看到的,来自COLOR_CORRECTION_GAINS的值大于>1即大于255,这是不正常的,因为它的增益和iOS返回相似的值(大于1)。

既然你提到了苹果提供的方法来达到同样的效果。

我开始与苹果文件的方法

从Apple文档

有关temperatureAndTintValues Apple文档如下

将特定于设备的白平衡RGB增益值转换为与设备无关的温度和色调值。

参考: 苹果的文档

我们也可以通过下面的方法在android中实现相同的function。

找出位置上的RGB组件

 int x = (int)event.getX(); int y = (int)event.getY(); int pixel = bitmap.getPixel(x,y); int redValue = Color.red(pixel); int blueValue = Color.blue(pixel); int greenValue = Color.green(pixel); 

相关色温(CCT),以开氏温标(K)度量,从1000到10000。

下图显示了CCT和一些颜色之间的关系 在这里输入图像说明


从RGB值计算色温

根据SO Post使用以下公式可以很容易地计算出色温

1.找出CIE三色值(XYZ)如下:

 X=(−0.14282)(R)+(1.54924)(G)+(−0.95641)(B) Y=(−0.32466)(R)+(1.57837)(G)+(−0.73191)(B)=Illuminance Z=(−0.68202)(R)+(0.77073)(G)+(0.56332)(B) 

2.计算归一化的色度值:

 x=X/(X+Y+Z) y=Y/(X+Y+Z) 

3.从以下计算CCT值:

 CCT=449n3+3525n2+6823.3n+5520.33 where n=(x−0.3320)/(0.1858−y) 

合并公式(CCT从RGB)

 CCT=449n3+3525n2+6823.3n+5520.33 where n=((0.23881)R+(0.25499)G+(−0.58291)B)/((0.11109)R+(−0.85406)G+(0.52289)B) 

Android的

使用java实现相同的等式。

注意:参考文件

使用TAOS TCS3414CS数字颜色传感器计算色温和照度


其他平台的类似实现

PHP – SO邮政

Python – SO Post

注意:

从RGB转换到色温的问题是,大约有1600万个RGB颜色,但是这些颜色只有一小部分实际上与色温相对应。

例如 ,绿色不对应于任何温度 – 由于人类大脑如何感知光线,这是不可能的。 记住,上面的演示实际上只是一个近似,理论上可以查找与给定颜色相关的温度,但对于大多数颜色不适用。

为什么排除绿色? 阅读: 为什么没有紫色或绿色的星星?


许多解释是从其他网站采取的,

希望一切总结您的需要!