color_distance: Compute the Euclidean distance between two colors

View source: R/compute_color_distance.R

color_distanceR Documentation

Compute the Euclidean distance between two colors

Description

Compute the Euclidean distance between two colors in a given color space.

Usage

color_distance(x, y, model = "lab")

cdistance(x, y, model = "lab")

Arguments

x, y

colors specified as hex strings or named R colors.

model

string defining the color model; valid models are cmyk, hcl, lch, hsi, hsl, hsv, lab, rgb, and rgba.

Value

The numerical distance between x and y (or a vector thereof).

See Also

deltaE and CMClc for perceptual, rather than numerical, distance between colors.

Examples

color_distance("pink", "hotpink")
color_distance("pink", "blue")

# The absolute value of the distance depends on the color space
# it is computed in but the relative changes still make sense
color_distance("pink", "hotpink",
  c("cmyk", "hcl", "lch", "hsi", "hsl", "hsv", "lab", "rgb", "rgba"))
color_distance("pink", "blue",
  c("cmyk", "hcl", "lch", "hsi", "hsl", "hsv", "lab", "rgb", "rgba"))

# Find the closest color in an array of possibilities
clrs <- rainbow(20)
show_col("pink", clrs)
# use various models
dhsv <- color_distance("pink", clrs, "hsv")
dlab <- color_distance("pink", clrs, "lab")
drgb <- color_distance("pink", clrs, "rgb")
# find closest colors in each space
match_hsv <- clrs[which.min(dhsv)]
match_lab <- clrs[which.min(dlab)]
match_rgb <- clrs[which.min(drgb)]
# display them
show_col(
  "pink", clrs,
  c("pink", match_hsv),
  c("pink", match_lab),
  c("pink", match_rgb)
)
# plot the values of the differences
plot(dhsv, pch=19, col=match_hsv)
points(dlab, pch=19, col=match_lab)
points(drgb, pch=19, col=match_rgb)
legend(1,50,legend=c("hsv", "lab", "rgb"), col=c(match_hsv, match_lab, match_rgb), pch=19)
# The rainbow is defined in HSV so the distance varies linearly (only
# H varies) and the match in terms of hue is best. The variations in L*a*b*
# and RGB are similar but different components weight differently. For
# L*a*b*, luminance and chroma seem to import more since the hue of the
# match is completely off.

jiho/chroma documentation built on Nov. 26, 2022, 2:39 a.m.