當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。