[vslist] Results of dominant wavelength/excitation purity help request

Andrew Watson andrew.b.watson@nasa.gov
Tue Nov 16 12:36:01 2004


--============_-1111488847==_mr============
Content-Type: multipart/alternative; boundary="============_-1111488847==_ma============"

--============_-1111488847==_ma============
Content-Type: text/plain; charset="us-ascii" ; format="flowed"

The following is a Mathematica routine I wrote some years ago. The 
code is no doubt incomprehensible, but the idea is simple. First, 
from a table of the spectrum locus defined by {x,y} chromaticity 
coordinates vs wavelength, create an interpolating function that 
returns {x,y} for an arbitrary wavelength. Then find the angle of the 
line between the white point and the point in question. Then, find 
the point along the spectrum locus for which the line from the white 
point has (nearly) the same angle.

The bit at the end generates a plot of the situation. I attach an 
example below.

The code for Excitation purity follows in a straightforward way.

DominantWavelength[xy_, xyw_:{0.33, 0.33}, 
chromaticity_:CIE1931Chromaticity, plot_:False] :=
     Module[{sign = 1, LambdaToxy, x, angle, AngleFromWhite, 
PositiveAngle, dw, xyl},
     LambdaToxy[lambda_] := (#[lambda] &) /@ 
(WaveTableInterpolation[chromaticity][[{1, 2}]]);
     AngleFromWhite[xy0_] := ArcTan @@ (xy0 - xyw);
     PositiveAngle[xy1_] :=
       If[# < 0, # + 2 \[Pi], #, #] &[AngleFromWhite[xy1] - 
AngleFromWhite[LambdaToxy[700]]];
     angle = PositiveAngle[xy];
     If[angle > PositiveAngle[LambdaToxy[400]], (angle = angle - Pi; 
sign = -1)];
     dw = (FindRoot[angle - PositiveAngle[LambdaToxy[lambda]] == 0, 
{lambda, 500, 400,700}][[1, 2]]) ;
         If[plot, xyl = LambdaToxy[dw];
      	ChromaticityDiagram[NMLabels -> {400, 500, 560, 700}
        	, Epilog -> {RGBColor @@ NearestRGB[dw, xyw],
           	Line[{xy, xyw}], Line[{xyl, xyw}], PointSize[.04], 
GrayLevel[.6],
           	Point[xyw], Point[xyl], GrayLevel[0], Point[xy]}]];
     dw sign   ]

ExcitationPurity[xy_, xyw_:{.33,.33}, chromaticity_:CIE1931Chromaticity] :=
  If[xy == xyw, 0, Divide @@ ((First /@
    {xy, WaveTableValue[chromaticity,
    DominantWavelength[xy,xyw,chromaticity]]}) - xyw[[1]])]


Here we evaluate an example, with plot.

DominantWavelength[{.3, .5},{.33,.33}, CIE1931Chromaticity,True]


-- 

Andrew B. Watson
MS 262-2
NASA Ames Research Center
Moffett Field, CA 94035-1000
(650) 604-5419	(650) 604-0255 fax
andrew.b.watson@nasa.gov	http://vision.arc.nasa.gov/
--============_-1111488847==_ma============
Content-Type: text/html; charset="us-ascii"

<!doctype html public "-//W3C//DTD W3 HTML//EN">
<html><head><style type="text/css"><!--
blockquote, dl, ul, ol, li { padding-top: 0 ; padding-bottom: 0 }
 --></style><title>Re: [vslist] Results of dominant
wavelength/excitation pur</title></head><body>
<div>The following is a Mathematica routine I wrote some years ago.
The code is no doubt incomprehensible, but the idea is simple. First,
from a table of the spectrum locus defined by {x,y} chromaticity
coordinates vs wavelength, create an interpolating function that
returns {x,y} for an arbitrary wavelength. Then find the angle of the
line between the white point and the point in question. Then, find the
point along the spectrum locus for which the line from the white point
has (nearly) the same angle.</div>
<div><br></div>
<div>The bit at the end generates a plot of the situation. I attach an
example below.</div>
<div><br></div>
<div>The code for Excitation purity follows in a straightforward
way.</div>
<div><br></div>
<div>DominantWavelength[xy_, xyw_:{0.33, 0.33},
chromaticity_:CIE1931Chromaticity, plot_:False] :=</div>
<div>&nbsp;&nbsp;&nbsp; Module[{sign = 1, LambdaToxy, x, angle,
AngleFromWhite, PositiveAngle, dw, xyl},</div>
<div>&nbsp;&nbsp;&nbsp; LambdaToxy[lambda_] := (#[lambda] &amp;) /@
(WaveTableInterpolation[chromaticity][[{1, 2}]]);</div>
<div>&nbsp;&nbsp;&nbsp; AngleFromWhite[xy0_] := ArcTan @@ (xy0 -
xyw);</div>
<div>&nbsp;&nbsp;&nbsp; PositiveAngle[xy1_] :=</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If[# &lt; 0, # + 2 \[Pi], #, #]
&amp;[AngleFromWhite[xy1] - AngleFromWhite[LambdaToxy[700]]];</div>
<div>&nbsp;&nbsp;&nbsp; angle = PositiveAngle[xy];</div>
<div>&nbsp;&nbsp;&nbsp; If[angle &gt; PositiveAngle[LambdaToxy[400]],
(angle = angle - Pi; sign = -1)];</div>
<div>&nbsp;&nbsp;&nbsp; dw = (FindRoot[angle -
PositiveAngle[LambdaToxy[lambda]] == 0, {lambda, 500, 400,700}][[1,
2]]) ;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If[plot, xyl =
LambdaToxy[dw];</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<x-tab>&nbsp;&nbsp;
</x-tab>ChromaticityDiagram[NMLabels -&gt; {400, 500, 560, 700}</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<x-tab> </x-tab>,
Epilog -&gt; {RGBColor @@ NearestRGB[dw, xyw],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<x-tab
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>Line[{xy, xyw}], Line[{xyl,
xyw}], PointSize[.04], GrayLevel[.6],</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<x-tab
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>Point[xyw], Point[xyl],
GrayLevel[0], Point[xy]}]];</div>
<div>&nbsp;&nbsp;&nbsp; dw sign&nbsp;&nbsp; ]</div>
<div><br></div>
<div>ExcitationPurity[xy_, xyw_:{.33,.33},
chromaticity_:CIE1931Chromaticity] :=</div>
<div>&nbsp;If[xy == xyw, 0, Divide @@ ((First /@</div>
<div>&nbsp;&nbsp; {xy, WaveTableValue[chromaticity,</div>
<div>&nbsp;&nbsp; DominantWavelength[xy,xyw,chromaticity]]}) -
xyw[[1]])]</div>
<div><br></div>
<div><br></div>
<div>Here we evaluate an example, with plot.</div>
<div><br></div>
<div><font face="MC" color="#000000"><b>DominantWavelength[{.3,
.5},{.33,.33}, CIE1931Chromaticity,True]</b></font></div>
<div><br></div>
<div><img src="cid:p06200704bdc0054a902d@[143.232.72.120].1.0"></div>
<x-sigsep><pre>-- 
</pre></x-sigsep>
<div><br>
Andrew B. Watson<br>
MS 262-2<br>
NASA Ames Research Center<br>
Moffett Field, CA 94035-1000<br>
(650) 604-5419<x-tab>&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>(650) 604-0255
fax<br>
andrew.b.watson@nasa.gov<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>http://vision.arc.nasa.gov/</div>
</body>
</html>
--============_-1111488847==_ma============--
--============_-1111488847==_mr============
Content-Id: <p06200704bdc0054a902d@[143.232.72.120].1.0>
Content-Type: image/png; name="P393BF58D 5"
 ; x-mac-type="504E4766"
 ; x-mac-creator="70727677"
Content-Disposition: attachment; filename="P393BF58D 5"
Content-Transfer-Encoding: base64

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
rkJggg==
--============_-1111488847==_mr============--