如何计算照亮给定图像的光源的(等效于黑体)色温?下面是Adobe Lightroom操纵色温和RGB直方图偏移的屏幕截图。给定图像的RGB分量,我该如何计算呢?我应该期望一个值-照明源的黑体等效温度,对吧?



评论

我不确定这是否有意义。色温是光的属性,就像在拍摄图像时用来照亮场景的灯一样。我不知道图像本身是否具有色温。例如,纯绿色图像的色温是多少?绿色甚至不在黑体光谱中。它是由高温光源照亮的深绿色物体还是由低温光源照亮的浅绿色物体产生的?

问题的最后一部分-“我应该期望一个值-照明源的黑体等效温度,对吗?”我不清楚吗?如果是这样,请随时提出修改建议。如果您的表面是绿色,则视光源而定,外观会有所不同。我正在尝试查看绿色并计算照明源的(等效于黑体)温度-Photoshop和Light Room如何做到这一点?即使是纯绿色的对象也不应显示为-#00FF00(十六进制rgb)。

@endolith-我进行了一些更改。您认为问题现在更清楚了吗?

好的,这更有意义,但是我仍然不确定是否有可能。不同色温源照亮的两种绿色阴影不能产生相同的输出图像吗?那么,如何在不知道物体和相机属性的情况下分辨出光源的色温呢?

@endolith-可以吗?我不确定。我认为可能会。相机内置了白平衡控制。但是大多数图像都有多种阴影,这似乎是通过直方图分析的-随机的。因此,可能存在处于特定温度的置信区间。此外,相机和图片也具有一些元数据。我感觉这是专家驱动的方程式-有人(专家)对其进行了校准以给出一个数字。就像* C或* F一样-谁决定将水的凝固点设置为0 * C或32 * F?

#1 楼

本文(pdf下载)提供了以下公式来计算相关色温(CCT)。他们没有明确说出(或我错过了),但是他们的例子使我推断他们假设RGB值在0-255范围内。

1。将RGB值转换为CIE三刺激值(XYZ),如下所示:

$$ X =(-0.14282)(R)+(1.54924)(G)+(-0.95641)(B)$$
$$ Y =(-0.32466)(R)+(1.57837)(G)+(-0.73191)(B)=照度$$
$$ Z =(-0.68202)(R)+ (0.77073)(G)+(0.56332)(B)$$

2。计算归一化色度值:

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

3。从以下项计算CCT值:

$$ CCT = 449n ^ 3 + 3525n ^ 2 + 6823.3n + 5520.33 $$

$$ \ text {where} n =( x − 0.3320)/(0.1858 − y)$$

可以组合成以下等式:

$$ CCT = 449n ^ 3 + 3525n ^ 2 + 6823.3n + 5520.33 $$
$$ \ text {其中} n =((0.23881)R +(0.25499)G +(-0.58291)B)/((0.11109)R +(-0.85406)G +(0.52289)B) $$

我不确定将其应用于图像,但是如果您只想使用一个通用数,那么您也许可以使用某种平均值?找到图像(例如质心)的可接受的“平均” RGB值,然后使用该值来计算温度,或者(在计算上更为昂贵的选择)计算图像中每个像素的温度并取这些结果的平均值。

此外,请记住,CCT只是大多数颜色的近似度量,因为颜色空间中只有一条曲线实际上代表可以从现实黑体辐射器获得的颜色。因此,对于所有其他颜色,计算出的色温只是最接近表示的黑体温度的近似值。因此,对于某些颜色(尤其是绿色),实际上至少在物理意义上,它实际上可能是一个毫无意义的值。下图很好地说明了这一点(来自Wikipedia上有关色温的文章)。



图像中的黑线表示普朗克坐标系的颜色,实际上由块状体辐射产生。较小的交叉线代表附近的CCT近似等温线。

此外,由于您的问题专门针对Adobe Lightroom,因此我在搜索时发现了这一点:


[在Adobe Lightroom中]滑块不调节灯光的黑体温度,而是调节应用于图像的补偿以补偿灯光的黑体温度。



所以请记住,在Lightroom滑块上看到的色温将与根据上述公式计算出的色温不同。

评论


$ \ begingroup $
请注意,上面使用的RGB-XYZ转换似乎特定于某些硬件使用的色彩空间。对于sRGB,这肯定是不正确的,这在OP的情况下很有可能使用。请参考sRGB标准中的正确变换
$ \ endgroup $
–awdz9nld
2014-12-26 20:05:

$ \ begingroup $
还请注意,CIE 1931中的Y分量表示亮度,而不是照度
$ \ endgroup $
–awdz9nld
2014-12-26 22:39

#2 楼

我已经根据您的公式计算了一些颜色,并且在某些情况下可以正常工作,而在其他情况下,例如红色(255 0 0)和蓝色(0 0 255),它给出了错误的答案:


白色(255 255 255):n = 0.4049,CCT = 8890.77 K->似乎是正确的
黄色(255 255 0):n = -0.6646,CCT = 2410.65 K->似乎是正确的
绿色(0 255 0):n = -0.2986,CCT = 3785.42 K->似乎是正确的
青色(0 255 255):n = 0.9902,CCT = 16168.7 K->似乎正确
洋红色(255 0 255):n = -0.5428,CCT = 2783.54 K->似乎正确

但是:


红色(255 0 0):n = 2.1497,CCT = 40938.6 K->似乎是错误的
蓝色(0 0 255):n = -1.1148,CCT = 1672.45 K->似乎错了