colorResiduals {recolorize} | R Documentation |
Calculate squared residuals for color centers
Description
Calculates the squared distance between each pixel and its assigned color center.
Usage
colorResiduals(
pixel_matrix,
pixel_assignments,
centers,
color_space = "Lab",
metric = "euclidean",
ref_white = "D65"
)
Arguments
pixel_matrix |
2D matrix of pixels to classify (rows = pixels, columns = channels). |
pixel_assignments |
A vector of color center assignments for each
pixel. Must match the order of |
centers |
A matrix of color centers, with rows as centers and
columns as color channels. Rows are assumed to match the index values of
|
color_space |
Color space in which to calculate distances. One of
"sRGB", "Lab", "Luv", or "XYZ". Passed to
|
metric |
Distance metric to be used for calculating pairwise pixel
distances in the given color space; passed to |
ref_white |
Passed to |
Value
A list with the following attributes:
-
sq_residuals
: The squared residual for every pixel in pixel_matrix. -
tot_residuals
: The sum of all squared residuals. -
avg_residual
: The average squared residual. -
residuals_by_center
: A list of squared residuals for every color center. -
avg_by_center
: The average squared residual for every color center.
Examples
# RGB extremes (white, black, red, green, blue, yellow, magenta, cyan)
ctrs <- matrix(c(1, 1, 1,
0, 0, 0,
1, 0, 0,
0, 1, 0,
0, 0, 1,
1, 1, 0,
1, 0, 1,
0, 1, 1), byrow = TRUE, ncol = 3)
# plot it
recolorize::plotColorPalette(ctrs)
# create a pixel matrix of random colors
pixel_matrix <- matrix(runif(3000), ncol = 3)
# assign pixels
# see `assignPixels` function for details
reassigned <- assignPixels(ctrs, pixel_matrix, adjust_centers = TRUE)
# find residuals from original color centers
color_residuals <- colorResiduals(pixel_matrix = pixel_matrix,
pixel_assignments = reassigned$pixel_assignments,
centers = ctrs)
# compare to residuals from adjusted color centers
color_residuals_adjust <- colorResiduals(pixel_matrix = pixel_matrix,
pixel_assignments = reassigned$pixel_assignments,
centers = reassigned$centers)
# to reset graphical parameters:
current_par <- graphics::par(no.readonly = TRUE)
layout(matrix(1:2, nrow = 2))
hist(color_residuals$sq_residuals,
breaks = 30, border = NA, col = "tomato",
xlim = c(0, 1), xlab = "Squared residual",
main = "Original centers")
hist(color_residuals_adjust$sq_residuals,
breaks = 30, border = NA, col = "cornflowerblue",
xlim = c(0, 1), xlab = "Squared residual",
main = "Adjusted centers")
graphics::par(current_par)