Re: physical colors and Mathematica colors
- To: mathgroup at smc.vnet.net
- Subject: [mg26405] Re: physical colors and Mathematica colors
- From: Lawrence Walker <lwalker701 at earthlink.net>
- Date: Wed, 20 Dec 2000 00:21:30 -0500 (EST)
- Organization: Morgan State University: COMSARE
- References: <91f7u4$55k@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi Mr. Nichols,
I created a function. It still needs tweaking though. Below is an outline of
how I created the SpectrumPlot function.
Plot HUE from 0 to 1 using density plot
Rescale HUE from 0 to about .9 so last color can be violet.
Remap 0->.9 to 7500->3800 Angstroms.
Create a function that will return a value for 'b' in Hue[h,s,b] that the edges
of the sprectra will appear darken. Colors outside of the visible spectra
should appear dark.
Remap from the non-physical HUE[] generated colors to the corresponding colors
that appear on the emission sprectra using the Interpolation function. This is
very subjective.
NonvisibilityValue[h_, rolloff_, lev_] :=
(* Return a value for 'b' in Hue[h, s, b] so that the
edges of the sprectra will appear darken *)
Module[{x0}, x0 = rolloff*Log[(1 - lev)/lev];
1 - (1 + E^((h - x0)/rolloff))^(-1) - (1 +
E^(-((-1 + h + x0)/rolloff)))^(-1)];
Plot[NonvisibilityValue[x, .05, .8], {x, 0, 1}, PlotRange -> {0, 1}];
dat = {{3800, 3800}, {4400, 4000}, {5300, 6000}, {5800, 6800}, {7500,
7500}};
(* A remapping from the nonphysical HUE[] generated colors to the corresponding
colors that appear on the emission sprectra using the Interpolation function.
This is very subjective. To generate a new 'dat' matrix first plot spectrum
with the the entries in the left column the same as the right. *)
ColorMap[x_] = Interpolation[dat, InterpolationOrder -> 1][x];
SpectrumPlot[sat_, bright_, lastColor_, rolloff_, lev_] :=
Module[{lam, h, x0},
DensityPlot[h = (7600 - ColorMap[lam])/3800;
h, {lam, 3800, 7600}, {dum, 0, 1000}, Mesh -> False, Frame -> True,
FrameTicks -> {Automatic, False}, PlotPoints -> {2000, 2},
AspectRatio -> Automatic,
ColorFunction -> (Hue[# lastColor, sat,
bright*NonvisibilityValue[#, rolloff, lev]] &)]];
SpectrumPlot[1, .9, .8, .05, .5];
Another trick might be to scan the actual picture to create a bitmap or gif file
and then import the picture into Mathematica using the Import[] function. You
should be able to splice the pixels into the corresponding physical colors and
remap them directly to the Angstrom scale. I just might try this.
Lawrence
PNichols at cornell-iowa.edu wrote:
> Dear Group,
>
> I am working on a package for which I need a function which takes a
> wavelength of light (in nanometers, for example) and returns an RGBColor
> specification. Has anyone made such a function for Mathematica?
>
> Of course, it is not essential that the result be RGBColor; any other
> standard computer-graphics color model would do the job (HSB, HLS, CMY,
> CMYK, etc.), because the conversions are standard. It's only the conversion
> between one of these and physical wavelengths which I don't know.
>
> I understand that human color perception is a complicated matter, and so is
> rendering of color on computer display devices. (The brightness dimension
> is perhaps the most obvious ambiguity.) It's probably nonsense to ask for
> a "perfect" correspondence between wavelength and RGB. But is there a
> "standard" mapping? Or one that you think is "pretty good"?
>
> I shall be grateful for even the smallest suggestions.
>
> Preston Nichols
> Visiting Assistant Professor of Mathematics
> Cornell College
>
--
------------------------------------------------------------
(\___/) The fear of the LORD is the beginning of
(o\ /o) wisdom: a good understanding have all they
/|:.V.:|\ that do his commandments: his praise
\\:::::// endureth for ever. Psa 111:10
-----`"" ""`------------------------------------------------
Lawrence A. Walker Jr., M.Eng./Ph.D. Candidate
Morgan State University
Clarence M. Mitchell School of Engineering
COMSARE (Center Of Microwave/Satellite And RF Engineering)
Rm: 306-Schafer Phone: (443)885-1453
------------------------------------------------------------