我想用RGB值计算图像的亮度,但公式中有一个常数k,我不知道它是什么,这是文档中的公式:
"在计算亮度(L(时,CIE Y乘以常数值"k",其中k可以是相机的常数,也可以是基于场景中选定区域的测量值为场景确定的。
L=k*(02127红色+07151绿色+0722*蓝色((cd/m²(
这是指向文档的链接:https://faculty.washington.edu/inanici/Publications/LRTPublished.pdf强调文本
简短回答
你把一些只针对一个名为";"光球";并且该数学不适用于一般亮度使用。
完整答案
你说:
使用RGB值计算图像的亮度
你是什么意思?某个给定像素的亮度?或者RMS平均亮度?或
AND:您的图像位于哪个颜色空间(个人资料(?
我将假设你的图像是sRGB,每像素8位。但它可能是P3或Adobe98,或其他任何数量的。。。我要展示的数学是sRGB。
1( 转换为浮点
每个8位0-255 sRGB颜色通道必须转换为0.0-1.0
let rF = sR / 255.0;
let gF = sG / 255.0;
let bF = sB / 255.0;
2( 转换为线性
转移曲线aka";γ";必须删除。对于sRGB;准确的";方法是:
function sRGBtoLin(chan) {
return (chan > 0.04045) ? Math.pow(( chan + 0.055) / 1.055, 2.4) : chan / 12.92
}
3( 计算亮度
现在,将每个线性化的通道乘以适当的系数,并将它们相加以获得亮度。
let luminance = sRGBtoLin(rF) * 0.2126 + sRGBtoLin(gF) * 0.7152 + sRGBtoLin(bF) * 0.0722;
奖金:安迪的堕落和肮脏版本
这里有一个替代方案,它仍然非常准确,但更简单,性能更好。将每个通道提高到2.2的幂,然后乘以系数,求和:
let lum = (sR/255.0)**2.2*0.2126+(sG/255.0)**2.2*0.7152+(sB/255.0)**2.2*0.0722;
如果您还有其他问题,请告诉我。。。