近期做光谱采集计算,有个功能是做色度的,也找到了一些资料。还有点迷茫。。求高手解答。 CIE1931-XYZ 色度坐标中求刺激值给的公式中。
1.先测出光源 的光谱功率分布S(λ),和物体的光谱反射率因数P(λ)。
与三刺激函数X(λ)、Y(λ)、Z(λ),分别对应波长相乘后累加,
2 。得出三刺激值,X、Y、Z。那么色坐标 x=X/(X+Y+Z)、Y/(X+Y+Z)。 疑问:
S(λ)*p(λ).怎么理解 ?
S(λ)不是一直等于1嘛。
要有更好的解释或者算法的话,麻烦给下 .
EMAIL: [email protected] 谢谢!
1.先测出光源 的光谱功率分布S(λ),和物体的光谱反射率因数P(λ)。
与三刺激函数X(λ)、Y(λ)、Z(λ),分别对应波长相乘后累加,
2 。得出三刺激值,X、Y、Z。那么色坐标 x=X/(X+Y+Z)、Y/(X+Y+Z)。 疑问:
S(λ)*p(λ).怎么理解 ?
S(λ)不是一直等于1嘛。
要有更好的解释或者算法的话,麻烦给下 .
EMAIL: [email protected] 谢谢!
解决方案 »
- 怎么用外部文件,实现进程间通信呢?
- 问个基础问题,有关Web浏览器控件的使用 VC++
- 在OnSize函数中用GetWindowRect函数的问题
- 我被启动线程的问题折磨疯了,求助,下面的代码为什么不启动线程呢?
- 如何将small icon的列表视控件显示的列表项加宽啊?
- 一个ActiveX控件的打印问题,急等!!!
- 出现这样的错误如何处理
- 为什么没有得到正式的Verisign签名
- 以hFile = CreateFile(strFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)方式打开文件后CloseHandle(hFile);它,然后调
- 如何把BMP装化成JPG,程序内部实现,我给100分
- 图像处理程序读取像素的错误,求助
- 到底怎样统计下行速度。郁闷
{
double dVarX = 0.0,dVarY = 0.0,dVarZ = 0.0;
double var_R = 0.0,var_G = 0.0,var_B = 0.0;
dVarX = dValX/100.0; //X from 0 to 95.047 (Observer = 2°, Illuminant = D65)
dVarY = dValY/100.0; //Y from 0 to 100.000
dVarZ = dValZ/100.0; //Z from 0 to 108.883
var_R = dVarX * 3.2406 + dVarY * -1.5372 + dVarZ * -0.4986;
var_G = dVarX * -0.9689 + dVarY * 1.8758 + dVarZ * 0.0415;
var_B = dVarX * 0.0557 + dVarY * -0.2040 + dVarZ * 1.0570; if ( var_R > 0.0031308 ) var_R = 1.055 * ( pow(var_R,(1/2.4)) ) - 0.055;
else var_R = 12.92 * var_R;
if ( var_G > 0.0031308 ) var_G = 1.055 * ( pow(var_G,(1/2.4)) ) - 0.055;
else var_G = 12.92 * var_G;
if ( var_B > 0.0031308 ) var_B = 1.055 * ( pow(var_B,(1/2.4)) ) - 0.055;
else var_B = 12.92 * var_B;
if( dwColor != NULL )
*dwColor = RGB((var_R * 255),(var_G * 255),var_B * 255);
return dwColor != NULL ? *dwColor : RGB((var_R * 255),(var_G * 255),var_B * 255);
}void __stdcall RGB2XYZ(COLORREF dwColor,double &dValX,double &dValY,double &dValZ)
{
double var_R = 0.0,var_G = 0.0,var_B = 0.0;
var_R = ( GetRValue(dwColor)/255.0 ); //R from 0 to 255
var_G = ( GetGValue(dwColor)/255.0 ); //G from 0 to 255
var_B = ( GetBValue(dwColor)/255.0 ); //B from 0 to 255 if ( var_R > 0.04045 ) var_R = pow( (( var_R + 0.055 )/1.055),2.4);
else var_R = var_R / 12.92;
if ( var_G > 0.04045 ) var_G = pow( (( var_G + 0.055 )/1.055),2.4);
else var_G = var_G / 12.92;
if ( var_B > 0.04045 ) var_B = pow( (( var_B + 0.055 )/1.055),2.4);
else var_B = var_B / 12.92;
var_R = var_R * 100;
var_G = var_G * 100;
var_B = var_B * 100;
//Observer. = 2°, Illuminant = D65
dValX = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805;
dValY = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722;
dValZ = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505;
}