Dylan Beaudette
2006-Mar-02 19:56 UTC
[R] extracting RGB values from a colorspace class object
Greetings,
After pouring over the documentation for the 'colorspace' package, I
have not
been able to figure out how the plot() method converts colorspace coordinates
to RGB values for display on the screen. I am convert between colorspaces
with the various as() methods... but cannot seem to find a way to extract RGB
(i.e. for displaying on a computer screen) triplets from color space
coordinates.
Here is a sample of the data that I am working with:
H V C x y Y
2.5Y 0.2 2 1.43 0.97 0.237
2.5Y 0.4 2 0.729 0.588 0.467
2.5Y 0.6 2 0.563 0.491 0.699
2.5Y 0.6 4 0.995 0.734 0.699
2.5Y 0.8 2 0.479 0.439 0.943
2.5Y 0.8 4 0.82 0.64 0.943
2.5Y 1 2 0.4362 0.4177 1.21
I have converted xyY coordinates to XYZ coordinates, based on the equations
presented here:
http://www.brucelindbloom.com/index.html?ColorCalcHelp.html
#read in the soil colors: munsell + xyY
soil <- read.table("soil_colors", header=F,
col.names=c("H","V","C","x","y","Y"))
#convert to XYZ
X <- (soil$x * soil$Y ) / soil$y
Y <- soil$Y
Z <- ( (1- soil$x - soil$y) * soil$Y ) / soil$y
#make an XYZ colorspace object:
require(colorspace)
soil_XYZ <- XYZ(X,Y,Z)
#visualize the new XYZ colorspace object in the L*U*V colorspace:
plot(as(soil_XYZ, "LUV"), cex=2)
here is an example of the output:
http://169.237.35.250/~dylan/temp/soil_colors-LUV_space.png
Somehow the plot() method in the colorspace package is converting color space
coordinates to their RGB values... Does anyone have an idea as to how to
access these RGB triplets?
Thanks in advance!
--
Dylan Beaudette
Soils and Biogeochemistry Graduate Group
University of California at Davis
530.754.7341
Jeffrey Horner
2006-Mar-03 15:11 UTC
[R] extracting RGB values from a colorspace class object
Dylan Beaudette wrote:> Greetings, > > After pouring over the documentation for the 'colorspace' package, I have not > been able to figure out how the plot() method converts colorspace coordinates > to RGB values for display on the screen. I am convert between colorspaces > with the various as() methods... but cannot seem to find a way to extract RGB > (i.e. for displaying on a computer screen) triplets from color space > coordinates.I don't know how it's done (I get really confused when trying to understand color spaces), but you'll have to download the code for the colorspace package and study the c code since that's where the conversion is done. To get the RGB and hex triplets, this small example should help: ## Generate white in XYZ space > white = XYZ(95.047, 100.000, 108.883) > as(white,"RGB") R G B [1,] 1.000008 0.9999907 1.000081 > hex(white) [1] "#FFFFFF"> > Here is a sample of the data that I am working with: > H V C x y Y > 2.5Y 0.2 2 1.43 0.97 0.237 > 2.5Y 0.4 2 0.729 0.588 0.467 > 2.5Y 0.6 2 0.563 0.491 0.699 > 2.5Y 0.6 4 0.995 0.734 0.699 > 2.5Y 0.8 2 0.479 0.439 0.943 > 2.5Y 0.8 4 0.82 0.64 0.943 > 2.5Y 1 2 0.4362 0.4177 1.21 > > I have converted xyY coordinates to XYZ coordinates, based on the equations > presented here: > http://www.brucelindbloom.com/index.html?ColorCalcHelp.html > > #read in the soil colors: munsell + xyY > soil <- read.table("soil_colors", header=F, > col.names=c("H","V","C","x","y","Y")) > > #convert to XYZ > X <- (soil$x * soil$Y ) / soil$y > Y <- soil$Y > Z <- ( (1- soil$x - soil$y) * soil$Y ) / soil$y > > #make an XYZ colorspace object: > require(colorspace) > soil_XYZ <- XYZ(X,Y,Z) > > #visualize the new XYZ colorspace object in the L*U*V colorspace: > plot(as(soil_XYZ, "LUV"), cex=2) > > here is an example of the output: > http://169.237.35.250/~dylan/temp/soil_colors-LUV_space.png > > Somehow the plot() method in the colorspace package is converting color space > coordinates to their RGB values... Does anyone have an idea as to how to > access these RGB triplets? > > Thanks in advance! > > > >-- Jeffrey Horner Computer Systems Analyst School of Medicine 615-322-8606 Department of Biostatistics Vanderbilt University