[R] measuring distances between colours?

Martin Maechler maechler at stat.math.ethz.ch
Thu May 30 15:27:37 CEST 2013


>>>>> John Fox <jfox at mcmaster.ca>
>>>>>     on Thu, 30 May 2013 08:51:10 -0400 writes:

    > Dear Ken,
    > Yes, that's the paper I was trying to remember, along with the associated spaces. I'll probably get a better solution using the colorspace package.

I'm not sure.  
Some of the colorspace  package features have been brought to R
(package 'grDevices') quite a while ago, e.g.,
the  convertColor()  and related functions.

See the code of   nearRcolor()   from  demo(colors)
which I just mentioned in another message of this thread.

Martin

    > Thanks,
    > John

    > On Thu, 30 May 2013 12:36:11 +0000
    > Ken Knoblauch <ken.knoblauch at inserm.fr> wrote:
    >> John Fox <jfox <at> mcmaster.ca> writes:
    >> > I'm interested in locating the named colour that's "closest" to an 
    >> arbitrary RGB colour. The best that I've
    >> > been able to come up is the following, which uses 
    >> HSV colours for the comparison:
    >> > 
    >> > r2c <- function(){
    >> >     hexnumerals <- 0:15
    >> >     names(hexnumerals) <- c(0:9, LETTERS[1:6])
    >> >     hex2decimal <- function(hexnums){
    >> >         hexnums <- strsplit(hexnums, "")
    >> >         decimals <- matrix(0, 3, length(hexnums))
    >> >         decimals[1, ] <- sapply(hexnums, function(x)               
    >> >                                  sum(hexnumerals[x[1:2]] * c(16, 1)))
    >> >         decimals[2, ] <- sapply(hexnums, function(x) 
    >> >                                  sum(hexnumerals[x[3:4]] * c(16, 1)))
    >> >         decimals[3, ] <- sapply(hexnums, function(x) 
    >> >                                  sum(hexnumerals[x[5:6]] * c(16, 1)))
    >> >         decimals
    >> >     }
    >> >     colors <- colors()
    >> >     hsv <- rgb2hsv(col2rgb(colors))
    >> >     function(cols){
    >> >         cols <- sub("^#", "", toupper(cols))
    >> >         dec.cols <- rgb2hsv(hex2decimal(cols))
    >> >         colors[apply(dec.cols, 2, function(dec.col) 
    >> >             which.min(colSums((hsv - dec.col)^2)))]
    >> >     }
    >> > }
    >> > 
    >> > rgb2col <- r2c()
    >> > 
    >> > I've programmed this with a closure so that hsv gets 
    >> computed only once.
    >> > 
    >> > 
    >> > I vaguely recall a paper or discussion concerning colour representation in 
    >> R but can't locate it.
    >> > 
    >> 
    >> Dear John,
    >> 
    >> Are you thinking of 
    >> 
    >> Zeileis A, Hornik K, Murrell P (2009). "Escaping RGBland: 
    >> Selecting Colors for Statistical Graphics." Computational 
    >> Statistics & Data Analysis, 53, 3259-3270. 
    >> doi:10.1016/j. csda.2008.11.033.
    >> 
    >> or the vignette from the colorspace package that covers some
    >> of the same territory.
    >> 
    >> How about if you compute color distances in Lab or Luv spaces?
    >> These so-called uniform color spaces are based on human
    >> discrimination data for small color distances so should be
    >> better at finding the nearest color, I would think.  Untried
    >> though.  Don't forget that these are based on a standard
    >> color calibration, sRGB, I think in the case of R and your
    >> display may or may not be close to that, so expect some
    >> error from that as well.
    >> 
    >> best,
    >> 
    >> Ken
    >> 
    >> 
    >> 
    >> > Any suggestions would be appreciated.
    >> > 
    >> > John
    >> > 
    >> > ------------------------------------------------
    >> > John Fox
    >> > Sen. William McMaster Prof. of Social Statistics
    >> > Department of Sociology
    >> > McMaster University
    >> > Hamilton, Ontario, Canada
    >> > http://socserv.mcmaster.ca/jfox/
    >> > 
    >> > 
    >> 
    >> -- 
    >> Kenneth Knoblauch
    >> Inserm U846
    >> Stem-cell and Brain Research Institute
    >> Department of Integrative Neurosciences
    >> 18 avenue du Doyen Lépine
    >> 69500 Bron
    >> France
    >> tel: +33 (0)4 72 91 34 77
    >> fax: +33 (0)4 72 91 34 61
    >> portable: +33 (0)6 84 10 64 10
    >> http://www.sbri.fr/members/kenneth-knoblauch.html
    >> 
    >> ______________________________________________
    >> R-help at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-help
    >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
    >> and provide commented, minimal, self-contained, reproducible code.

    > ______________________________________________
    > R-help at r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-help
    > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
    > and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list