首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从色彩校正增益中提取色温

如何从色彩校正增益中提取色温
EN

Stack Overflow用户
提问于 2017-08-01 09:11:11
回答 1查看 5K关注 0票数 13

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

代码语言:javascript
复制
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似乎有一种随时可用的方法来执行temperatureAndTintValues

在搜索类似的东西(用Java或我可以采用的任何其他语言)时,几乎所有这样的方法都期望具有[0, 255]范围的RGB值。

将XYZ转换为CCT(相关色温)的方法很少,但即使是为了使XYZ值正确,我也需要在[0, 255]中使用RGB值。

如您所见,来自COLOR_CORRECTION_GAINS的值是>1,即大于255,这并不少见,因为它是增益,iOS返回类似的值(大于1)。

EN

回答 1

Stack Overflow用户

发布于 2017-08-07 11:03:55

自从你提到苹果提供了实现同样的方法。

我从关于方法的Apple文档开始

来自苹果公司的文档

有关temperatureAndTintValues的苹果文档如下

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

参考资料:苹果公司的文件

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

查找已就位的RGB组件

代码语言:javascript
复制
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)度为单位,从1,000到10,000。

下面的图像显示了CCT与某些颜色之间的关系

从RGB值计算色温

根据SO,色温可以使用下列公式轻松计算

1.查找CIE三刺激值(XYZ)如下:

代码语言:javascript
复制
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.计算标准化色度值:

代码语言:javascript
复制
x=X/(X+Y+Z)
y=Y/(X+Y+Z)

3.从:中计算CCT值

代码语言:javascript
复制
CCT=449n3+3525n2+6823.3n+5520.33

where n=(x−0.3320)/(0.1858−y)

综合公式()

代码语言:javascript
复制
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)

安卓

使用java实现相同的等式。

注:参考文件

用TAOS TCS3414CS数字彩色传感器计算色温和亮度

在其他平台上类似的实现

PHP -

Python - SO Post

注意:

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

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

为什么格林被排除在外?读:为什么没有紫色或绿色的星星?

很多解释都是从其他网站上得到的,

希望一切都能满足你的需要!

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45433647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档