本人从BH1745读取R 、G、B值, 想获得其光波波长。 通过查阅多方资料。 整理得到如下算法(这时不上理论说明, 直接上代码供大家参考。欢迎各大伽批评指正。 谢谢)。
double BH1745NUC::rgb_to_wavelength(int R, int G, int B) { double gamma = 0.8; double R_linear = pow((R + 0.055) / 1.055, gamma); double G_linear = pow((G + 0.055) / 1.055, gamma); double B_linear = pow((B + 0.055) / 1.055, gamma); double X = 0.4124564 * R_linear + 0.3575761 * G_linear + 0.1804375 * B_linear; double Y = 0.2126729 * R_linear + 0.7151522 * G_linear + 0.0721750 * B_linear; double Z = 0.0193339 * R_linear + 0.1191920 * G_linear + 0.9503041 * B_linear; // CIE XYZ to CIE xyY conversion double x = X / (X + Y + Z); double y = Y / (X + Y + Z); // xyY to wavelength (in nanometers) conversion double wavelength = -1; if (x >= 0.185 && x <= 0.452 && y >= 0.188 && y <= 0.538) { wavelength = 449 + (x - 0.185) / (0.452 - 0.185) * (621 - 449); } else if (x >= 0.317 && x <= 0.478 && y >= 0.337 && y <= 0.607) { wavelength = 495 + (x - 0.317) / (0.478 - 0.317) * (570 - 495); } else if (x >= 0.239 && x <= 0.513 && y >= 0.155 && y <= 0.418) { wavelength = 569 + (x - 0.239) / (0.513 - 0.239) * (513 - 569); } return wavelength; }
07-03