[R] measuring distances between colours?
Michael Friendly
friendly at yorku.ca
Fri May 31 16:23:31 CEST 2013
Hi John
This has been an interesting discussion.
Though you have a solution for your needs, you might be interested in
this javascript implementation that allows you to visually compare color
distances in various color spaces
http://stevehanov.ca/blog/index.php?id=116
And, all the theory of color distance is described in
http://en.wikipedia.org/wiki/Color_difference
PS: This is a very handy function. When I last tried
aplpack::bagplot(), it was annoying that the colors could *only*
be specified in hex.
-Michael
On 5/30/2013 5:14 PM, John Fox wrote:
> Dear all,
>
> My thanks to everyone who addressed my question. I've incorporated Eik
> Vettorazzi's suggestion for improved conversion of hexadecimal RGB colours
> to decimal numbers, and Martin Maechler's hint to look at demo(colors). I've
> loosened the default definition of "close enough" from the latter, since the
> following seems to work well for my purposes.
>
> r2c <- function(){
> hex2dec <- function(hexnums) {
> # suggestion of Eik Vettorazzi
> sapply(strtoi(hexnums, 16L), function(x) x %/% 256^(2:0) %% 256)
> }
> findMatch <- function(dec.col) {
> sq.dist <- colSums((hsv - dec.col)^2)
> rbind(which.min(sq.dist), min(sq.dist))
> }
> colors <- colors()
> hsv <- rgb2hsv(col2rgb(colors))
> function(cols, near=0.25){
> cols <- sub("^#", "", toupper(cols))
> dec.cols <- rgb2hsv(hex2dec(cols))
> which.col <- apply(dec.cols, 2, findMatch)
> matches <- colors[which.col[1, ]]
> unmatched <- which.col[2, ] > near^2
> matches[unmatched] <- paste("#", cols[unmatched], sep="")
> matches
> }
> }
>
> rgb2col <- r2c()
>
> For example,
>
>> rgb2col(c("010101", "EEEEEE", "AA0000", "00AA00", "0000AA", "AAAA00",
> "AA00AA", "00AAAA"))
> [1] "black" "gray93" "darkred" "green4"
> [5] "blue4" "darkgoldenrod" "darkmagenta" "cyan4"
>
>> rgb2col(c("010101", "090909", "090000", "000900", "000009", "090900",
> "090009", "000909"))
> [1] "black" "gray3" "#090000" "#000900" "#000009" "#090900"
> [7] "#090009" "#000909"
>
> Thanks again,
> John
--
Michael Friendly Email: friendly AT yorku DOT ca
Professor, Psychology Dept. & Chair, Quantitative Methods
York University Voice: 416 736-2100 x66249 Fax: 416 736-5814
4700 Keele Street Web: http://www.datavis.ca
Toronto, ONT M3J 1P3 CANADA
More information about the R-help
mailing list