gpt4 book ai didi

android - 如何从色彩校正增益中获取色温

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:49 51 4
gpt4 key购买 nike

我想找出相机拍摄的照片的色温。

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) .

最佳答案

既然你已经提到苹果提供了实现相同的方法。

我将从有关该方法的 Apple 文档开始

来自苹果文档

关于 temperatureAndTintValues 的 Apple 文档如下

Converts device-specific white balance RGB gain values to device-independent temperature and tint values.

引用:Documentation by Apple

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

找出位置上的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) 度为单位测量,范围从 1,000 到 10,000。

下图显示了CCT和一些颜色之间的关系 enter image description here


根据 RGB 值计算色温

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

<强>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)

合并公式(来自 RGB 的 CCT)

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 实现相同的等式。

注:引用论文

Calculating Color Temperature and Illuminanceusing the TAOS TCS3414CS Digital Color Sensor


其他平台的类似实现

PHP - SO Post

Python - SO Post

注意事项:

从 RGB 转换为色温的问题在于,大约有 1600 万种 RGB 颜色,但这些颜色中只有非常小的一部分实际上对应于色温。

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

为什么排除绿色?阅读:Why Are There No Purple or Green Stars?


很多解释都来自其他网站,

希望一切都能满足您的需求!

关于android - 如何从色彩校正增益中获取色温,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433647/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com