2013-12-19 35 views
3

當讀取this question時,我開始考慮是否可以將顏色轉換爲模仿平均灰度打印機(假設您的屏幕已校準)?尋找可接近的近似值將節省紙張。將顏色轉換爲模仿灰度打印

例如,如何轉換這些顏色以查看紙張上是否可以區分淺色和深藍色和紅色?

temp <- rgb2hsv(239, 138, 98, maxColorValue=255) 
Rl <- hsv(h = temp[1,], s = 0.5, v = 1) 
Rd <- hsv(h = temp[1,], s = 0.5, v = 0.4) 
temp <- rgb2hsv(103, 169, 207, maxColorValue=255) 
Cl <- hsv(h = temp[1,], s = temp[2,], v = 1) 
Cd <- hsv(h = temp[1,], s = temp[2,], v = 0.4) 

plot(1:4, type = "p", col = c(Rl, Rd, Cl, Cd), pch = 19, cex = 8, xlim = c(0,5), ylim = c(0,5)) 

enter image description here

+0

如果您在HSV的工作,你可以設置飽和度爲零轉換爲灰度。 –

+0

如果您希望顏色在灰度下與人類無法區分,請在hcl調色板中工作,並將色度設置爲零。 –

+0

在hsv刻度上將飽和度設置爲0會使'Rl'消失,但如果您嘗試使用灰度打印機打印繪圖,則不會出現這種情況。也許打印機調整顏色? – Mikko

回答

4

使用色度設置爲零的HCL調色板創建人眼無法區分的灰度值。

library(colorspace) 
n <- 10 
cols <- rainbow_hcl(n) 
plot(seq_len(n), cex = 5, pch = 20, col = cols) 

greys <- rainbow_hcl(n, c = 0) 
plot(seq_len(n), cex = 5, pch = 20, col = greys) 

如果要從原始顏色生成灰色,請使用scales包。

library(scales) 
greys2 <- col2hcl(cols, c = 0) 
plot(seq_len(n), cex = 5, pch = 20, col = greys2) 
+0

爲什麼難以區分? – Mikko

+0

你的問題是問顏色「是否可以在紙上區分」。 HCL糾正了HSV藍色看起來比黃色具有相同的飽和度和價值更深的事實。 –

+0

好的,謝謝你使用'scales'軟件包。所以我的問題的答案會是這樣的:'cols < - c(Rl,Rd,Cl,Cd);庫(鱗);灰色< - col2hcl(cols,c = 0); plot(seq_along(cols),cex = 5,pch = 20,col = greys)'。我沒有打印機來檢查當前屏幕和紙張上的顏色是否變成了灰階。 – Mikko

0

可以使用的概述here 3種轉換算法之一,只是確定他們在外面不管容忍你認爲是太相似了。

2

col2grey(和/或col2gray)在TeachingDemos包函數使用這樣做的一個常用方法。這個想法是看你的顏色在灰度而不是顏色上打印或複製時的樣子。

2

`colorspace軟件包中的desaturate()函數也可以用於將顏色轉換爲灰度級。這使顏色的HCL(或極性CIELUV)表示中的色度(色彩)崩潰。

plot(1:4, type = "p", 
    col = colorspace::desaturate(c(Rl, Rd, Cl, Cd)), 
    pch = 19, cex = 8, xlim = c(0,5), ylim = c(0,5)) 

plot with gray colors

相關問題