[R] measuring distances between colours?

John Fox jfox at mcmaster.ca
Thu May 30 14:51:10 CEST 2013


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.

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.



More information about the R-help mailing list