Stand corrected. See attached image for a "comparison" between the three
scales we've discussed. The one in the background is the Julia one, the one
on the bottom is the one you showed from Wikipedia, and the one on top is
the one from xcolor. You can see that the point where Julia "disagrees"
most with xcolor is at 440 nm: Julia says 440 nm is violet while xcolor
says it's blue. I grabbed a 440 nm interference filter (I'm in a lab) and
looked. It was violet.
Thanks for your time!


Yakir Gagnon
The Queensland Brain Institute (Building #79)
The University of Queensland
Brisbane QLD 4072
Australia

cell +61 (0)424 393 332
work +61 (0)733 654 089


On Tue, Aug 26, 2014 at 2:29 PM, Daniel Jones <[email protected]>
wrote:

>
> I looked into xcolor, and the color matching function they implement is
> only a rough approximation (page 55 of the xcolor manual), whereas Color.jl
> actually matches wavelengths to the CIE standard observer measurements. In
> this case, I think Color is more correct. Here's someone else's plot made
> from the CIE data that looks close to the Color.jl one:
> http://en.wikipedia.org/wiki/Luminosity_function#mediaviewer/File:Srgbspectrum.png
>
>
> On Monday, August 25, 2014 8:43:13 PM UTC-7, Yakir Gagnon wrote:
>
>> Oh sorry, I vaguely mentioned it in my first reply.
>> The short answer is:
>>
>> using Color,Images
>> n = 500
>> wl1 = 380.
>> wl2 = 780.
>> wl = linspace(wl1,wl2,n)
>> I = Array(Float64,n,n,3)
>> for i = 1:n
>>     xyz = colormatch(wl[i])
>>     rgb = convert(RGB,xyz)
>>     for (j,f) in enumerate([:r,:g,:b])
>>         I[i,:,j] = rgb.(f)
>>     end
>> end
>> imwrite(I,"a.png")
>>
>> This results in the attached image. While I'm sure there's a much better
>> way of getting that done (feel free to show be btw, I'd love to know how to
>> improve), you can immediately see that the blues and reds are too far close
>> to each other and that the UV violet and IR black are overly represented.
>>
>> The long answer is that I used pgfplots with Julia to generate that first
>> image. So the pgfplots part is this:
>>
>> \begin{tikzpicture}
>>     \draw (0,0) node {\pgfuseshading{mySpectrum}};
>>     \foreach \x/\xl in {-3/400,-1/500,1/600,3/700}{
>>         \draw[gray] (\x,-.75) -- (\x,-1.25) node[anchor=north,black]
>> {\xl};
>>     }
>>     \node at (0,-2) {Wavelength (nm)};
>> \end{tikzpicture}
>>
>> and the julia part is this:
>>
>> using Color
>>
>> n = 50
>> wl1 = 380
>> wl2 = 780
>> width = 8
>> wl = linspace(wl1,wl2,n)
>>
>> d = linspace(0,width,n)
>> f = open("spectrum.txt","w")
>> write(f,"\\pgfdeclarehorizontalshading{mySpectrum}{2cm}{\n")
>> for i = 1:n-1
>>     xyz = colormatch(wl[i])
>>     rgb = convert(RGB,xyz)
>>
>>     txt = "\trgb($(d[i])cm)=($(rgb.r),$(rgb.g),$(rgb.b));\n"
>>     write(f,txt)
>> end
>> i = n
>> xyz = colormatch(wl[i])
>> rgb = convert(RGB,xyz)
>> txt = "\trgb($(d[i])cm)=($(rgb.r),$(rgb.g),$(rgb.b))}"
>> write(f,txt)
>> close(f)
>>
>> xl = [400:100:700]
>> nxl = length(xl)
>> wli = wl2-wl1
>> w = zeros(nxl)
>> for i  = 1:nxl
>>     r = (xl[i]-wl1)/wli
>>     w[i] = width*r
>> end
>> w .-= width/2
>>
>>
>>
>>
>> Yakir Gagnon
>> The Queensland Brain Institute (Building #79)
>> The University of Queensland
>> Brisbane QLD 4072
>> Australia
>>
>> cell +61 (0)424 393 332
>> work +61 (0)733 654 089
>>
>>
>> On Tue, Aug 26, 2014 at 11:43 AM, Steven G. Johnson <[email protected]>
>> wrote:
>>
>>>
>>>
>>> On Monday, August 25, 2014 6:35:43 PM UTC-4, Yakir Gagnon wrote:
>>>
>>>> I tried the checkout version of Color, and it's the same (see
>>>> attached), i.e. wrong: the blues should be close to the 400 mark and the
>>>> reds closer to the 700. the UV purple and IR "black" should be closer to
>>>> the ends than what we see. Any idea what's going wrong?
>>>>
>>>
>>> You didn't give any indication of how you made that plot...
>>>
>>
>>

Reply via email to