As some of you might know I've been reading up on color science for a while. Now I feel it's time to present my findings in a form that hopefully will be easily accessible and usable for all users here. It seems to be a frequent thread subject here.
So where do I start? Since the subject is white balance I should perhaps start by defining what I mean by white. Without delving too deep in the theory, I have chosen the CIE Standard illuminant D65 as my white point. It "corresponds roughly to a mid-day sun in Western Europe / Northern Europe" and has color coordinates (x,y: 0.31, 0.33) that are close to that of an equal energy spectrum (x,y: 0.33, 0.33).
Knowing what color is desired I need to specify the means by which to reach it. We're dealing with lasers here, so monochromatic light sources. While it is possible to get white light using any number of lasers the most common configuration is a simple three laser RGB system using solid state lasers. These limitations are simply to make the following calculations easier to perform and present. Especially so because the only commonly available green is 532nm.
Results:
How to read, understand and use the table?
The leftmost column contains the wavelengths of the blue laser source and the red wavelengths can be found on the horizontal axis. The space spanned by them contains the relative (radiative) laser powers required to get white light. The table is actually only 4x4, but since each combination of wavelengths requires two powers to be specified there are two values in each cell. The upper value is the relative power of the blue laser and below it is the power of the red laser.
To use it first pick two wavelengths, for example 445 and 640 nm. Looking in the table you will find that the relative radiative powers required are 0.8 and 1.56 respectively. Given that you have a 2W 532nm laser you will need 0.8*2W = 1.6W of 445nm and 1.56*2W = 3.12W of 640nm (after losses in transmission and reflection) to match it.
Now, you might have noticed the blue powers are pretty much the same regardless of the red wavelength, so it is possible to simplify the table (this time with less gay colors):
I think you can figure out how to use it. It is also possible to further reduce the table, though it's less obvious how to make the next step.
Feedback
I need feedback from real world situations! Are these tables accurate? Compare to your setup and tell me how well you think they correlate to your RGB laser. I need to know the power of your lasers (optimally after all optics) and how you perceive your white. I don't have a blue laser or a laser power meter so I can't test it myself.
Currently I am using the Judd-Vos color matching functions which should give more accurate results in the violet region (compared to CIE 1931). It should be pointed out however that these values are for light reflected off a perfectly white surface. I don't know how well it applies to light scattered by air/haze/fog yet. Possibly a scattering correction needs to be added, but using the normal scattering angle-wavelength relation severely increases the amount of red required and reduces the amount of blue.
Here is the matlab code I wrote to solve the problem for those (select few) of you who might be interested (it is solved using fminsearch for each set of wavelengths):
Code:
function d=d2wp(P)
%D2WP Distance to whitepoint
% d = d2wp(P) returns the square of the distance to the whitepoint given
% an RB SPD vector P relative to 532nm.
global WLV WP; %WLV = wavelength vector, WP = whitepoint coordinates
% choose the color matching function
[wl,x_bar,y_bar,z_bar] = colorMatchFcn('judd_vos');
% zero the tristimulus values
X = 0;
Y = X; Z = X;
% add 532nm (last) to the SPD
P = [P,1];
% calculate tristimulus values
for i = 1:3
wli = find(wl == WLV(i)); %look for the index of the current wl
X = X + P(i)*x_bar(wli);
Y = Y + P(i)*y_bar(wli);
Z = Z + P(i)*z_bar(wli);
end
% normalize
x=X/(X+Y+Z);
y=Y/(X+Y+Z);
% calculate distance to whitepoint
d = (WP(1)-x)^2 + (WP(2)-y)^2;
Any comments or questions are most welcome!