当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R convertColor 在色彩空间之间转换


R语言 convertColor 位于 grDevices 包(package)。

说明

在标准颜色空间中的表示形式之间转换颜色。

用法

convertColor(color, from, to, from.ref.white, to.ref.white,
             scale.in = 1, scale.out = 1, clip = TRUE)

参数

color

其行指定颜色的矩阵。该函数还将接受数据帧,但会在内部默默地转换为矩阵。

from , to

输入和输出颜色空间。请参阅下面的“详细信息”。

from.ref.white , to.ref.white

参考白色或NULL(如果它们内置于定义中),对于 RGB 空间。 D65 为默认值,其他内容请参阅“详细信息”。

scale.in , scale.out

输入除以 scale.in ,输出乘以 scale.out 。当输入或输出不是数字时,使用 NULL 抑制缩放。

clip

如果 TRUE ,将 RGB 输出截断为 [0,1],FALSE 返回超出范围的 RGB,NA 将超出范围的颜色设置为 NaN

细节

颜色空间由 colorConverter 类的对象指定,由 colorConvertermake.rgb 创建。内置颜色空间可以通过字符串引用: "XYZ""sRGB""Apple RGB""CIE RGB""Lab""Luv" 。这些颜色空间的转换器位于对象 colorspaces 中。

"sRGB" 颜色空间是标准 PC 显示器使用的颜色空间。 "Apple RGB" 由 Apple 显示器使用。 "Lab""Luv" 是由国际照明委员会标准化的大致感知统一的空间。 XYZ 是 1931 年的 CIE 标准,能够表示所有可见颜色(以及一些),但不是以感知统一的方式。

LabLuv空间说明物体的颜色,因此需要参考“白光”颜色的规范。光源D65是标准间接日光,光源D50接近直射阳光,且光源A是来自标准白炽灯泡的光。支持的其他标准 CIE 光源有B,C,ED55。 RGB 颜色空间是相对于特定参考白色定义的,并且只能近似转换为其他参考白色。 von Kries 色彩适应算法用于此目的。之前R3.6、涉及创建的颜色空间的颜色转换make.rgb进行假设D65光源,与创建色彩空间时使用的实际光源无关。这影响了内置"CIE RGB"色彩空间。

RGB 色彩空间特定于特定类别的显示器。 RGB 空间无法表示所有颜色,clip 选项控制对超出范围的颜色执行的操作。

对于命名颜色空间 color 必须是 from 颜色空间中的值矩阵:特别是不透明颜色。

一个 3 列矩阵,其行指定颜色。

例子

## The displayable colors from four planes of Lab space
ab <- expand.grid(a = (-10:15)*10,
                  b = (-15:10)*10)
require(graphics); require(stats) # for na.omit
par(mfrow = c(2, 2), mar = .1+c(3, 3, 3, .5), mgp = c(2,  .8,  0))

Lab <- cbind(L = 20, ab)
srgb <- convertColor(Lab, from = "Lab", to = "sRGB", clip = NA)
clipped <- attr(na.omit(srgb), "na.action")
srgb[clipped, ] <- 0
cols <- rgb(srgb[, 1], srgb[, 2], srgb[, 3])
image((-10:15)*10, (-15:10)*10, matrix(1:(26*26), ncol = 26), col = cols,
  xlab = "a", ylab = "b", main = "Lab: L=20")

Lab <- cbind(L = 40, ab)
srgb <- convertColor(Lab, from = "Lab", to = "sRGB", clip = NA)
clipped <- attr(na.omit(srgb), "na.action")
srgb[clipped, ] <- 0
cols <- rgb(srgb[, 1], srgb[, 2], srgb[, 3])
image((-10:15)*10, (-15:10)*10, matrix(1:(26*26), ncol = 26), col = cols,
  xlab = "a", ylab = "b", main = "Lab: L=40")

Lab <- cbind(L = 60, ab)
srgb <- convertColor(Lab, from = "Lab", to = "sRGB", clip = NA)
clipped <- attr(na.omit(srgb), "na.action")
srgb[clipped, ] <- 0
cols <- rgb(srgb[, 1], srgb[, 2], srgb[, 3])
image((-10:15)*10, (-15:10)*10, matrix(1:(26*26), ncol = 26), col = cols,
  xlab = "a", ylab = "b", main = "Lab: L=60")

Lab <- cbind(L = 80, ab)
srgb <- convertColor(Lab, from = "Lab", to = "sRGB", clip = NA)
clipped <- attr(na.omit(srgb), "na.action")
srgb[clipped, ] <- 0
cols <- rgb(srgb[, 1], srgb[, 2], srgb[, 3])
image((-10:15)*10, (-15:10)*10, matrix(1:(26*26), ncol = 26), col = cols,
  xlab = "a", ylab = "b", main = "Lab: L=80")

cols <- t(col2rgb(palette())); rownames(cols) <- palette(); cols
zapsmall(lab <- convertColor(cols, from = "sRGB", to = "Lab", scale.in = 255))
stopifnot(all.equal(cols, # converting back.. getting the original:
   round(convertColor(lab, from = "Lab", to = "sRGB", scale.out = 255)),
                    check.attributes = FALSE))

参考

For all the conversion equations http://www.brucelindbloom.com/.

For the white points https://web.archive.org/web/20190613001950/http://efg2.com/Lab/Graphics/Colors/Chromaticity.htm.

也可以看看

col2rgbcolors 了解在图形中指定颜色的方法。

make.rgb 用于指定其他颜色空间。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Convert between Colour Spaces。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。