[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