RYCB四原色實驗

我造過WS2812 HSB 色彩校正之後,發覺 CIE color chart 嘅 wavelength 唔能夠反映色階變化嘅幅度,於是決定買一堆 LED 返黎,基於 Hue 畫返好個 chart,揾出邊對色係互補色可以混出白光。淘宝可以買倒方便銲接嘅大功率3W LED 比好多年前我大概買過一次睇過多左啲色,LED 啲 wavelength 都係用一個 range 表示係一個大約数,而且低 load 時波長會短啲;因為我以開到好暗用眼直望粒 LED 啲色為準,所以一律用最細数 nm 去形容。可見光 LED 分両個電壓,由 400-560nm 嘅 3V 買左 12粒,585-660nm 嘅 2V 就買左 6粒銲晒落鋁基板方便比較,再隔住均光板喺銲晒 6粒 LED 嘅鋁基板上面分別射 620nm, 660nm 紅色同 460nm藍色,就可以睇倒唔同色嘅 LED 最能夠混出白色。

另外我買左 AS7341 colorimeter 模块返黎試用,當中可見光嘅 channel 有 (415, 445, 480, 515, 555, 590, 630, 680) nm ,用黎測所有LED燈珠之後,再測 WS2812 同我個 IPS 芒嘅 RGB,發覺每條 channel 嘅光度唔準確但峰值值得參考可以用黎造比較。数值加肉眼所見,我發現芒嘅藍色峰值竟然比 WS2812 更短有啲紫色先啱去到大約 450nm,綠色應該唔係 550nm 而係大約 540nm,紅色應該同 WS2812 一樣係 620nm。我用緊嘅芒啲色應該算有一定準確程度,但我跟番 sRGB CIE color chart 個色域三角形作為參考。

Hue even disturbution with white balance pair base on wavelength

觀察所得,紅色無論 620nm 定 660nm 嘅互補色明顯係人眼 Rod sensor 嘅峰值係 495nm,但因為紅色嘅染色力好強,睇幾秒同睇一分鐘啲色因為人眼 white balance 嘅效果會唔同晒,混出黎其實係黃黃地嘅奶白色,睇得耐適應左之後會再白啲。sRGB 嘅 cyan 係紅色嘅互補色 ,但其實只係 460nm 同 495nm 之間 480nm 嘅淺藍色,而 495nm 係感覺特別清新果隻湖水綠,喺一堆藍至綠嘅 LED 之中最無色,又可以話最似白色。 令一方面,460nm 藍色嘅互補色容易睇好多,由 560nm 至 590nm 都可以混出白色,會有輕微帶粉紅色一定同 “紅青” 両隻色混出黎嘅白色唔同。睇過之後我覺得人眼嘅 white balance 係 balance 主導無乜白色嘅概念,所以 CIE chart 用白色造參考畫成色域係三角形嘅意思唔大,我寧願用圓形表達平均色階變化為先,再用曲線補番三對互補色,数值同 CIE chart 一樣。

4 LED on 6*4 PCB as shield of Wemos D1 R2

我用四粒 LED 出黎模擬 RYCB四原色效果,如果話好似整一粒大大粒嘅 WS2812,倒不如話想整一粒 3W RGB LED 嘅四原色版,光度比幾十粒 WS2812 夾埋更高,超出 USB 500mA 供電上限,於是要用電池供電。大功率 LED 嘅 RGB 同 WS2812 一樣係用 460nm, 520nm, 620nm,而我開始時係用 460nm, 490nm, 560nm, 660nm;要獨立每隻色控制光度嘅話,淘宝有 “PWM恒流可調模块” 可以用板上面嘅可調電阻效光度,解決黃光最光而紅同藍係最暗特質嘅問題,之後用再 PWM 微調光度。我用過先知由 3.3V GPIO 出嘅 PWM 只可以控制倒 2V LED,3V LED 嘅話要用 5V電平嘅 PWM,所以要再加 “3.3V轉5V电平轉换模块” 。我將一大堆野銲晒落 6*4 PCB 板方便插喺 Wemos D1 R2 上面之後,遇到 LED 燈珠距離遠而造成均色困難嘅問題,要用到幾層 2mm 厚 “磨砂PP板“,均光板同光源距離越遠效果越好。

RYCB and ws2812 lighting effect

我原本已經用 Blynk library 個 UI 調效 WS2812 嘅 HSB,所以只需要再喺 web 同 mobile app 嘅 UI 加埋 4 條 PWM 嘅 range slider 就可以睇倒四原色嘅混色效果。我用 Wemos D1 R2 嘅 D5 至 D8 pin PWM 輸出,但 D8 pin 高電平會 boot 唔倒机,所以只可以駁 2V 嘅紅色 LED,其他 3粒 3V LED 經 “3.3V轉5V电平轉换” 用 5V PWM 控制。一般控制摩打嘅 PWM 因為避免噪音,會用 20000Hz 以上頻率,但控制 LED 嘅 “PWM恒流模块” 我用 analogWriteFreq(400); 降到 400Hz 低頻先可以喺 PWM = 1 著得晒四粒 LED。

Blynk web UI with customise LED color control

要睇晒所有色最簡單嘅方法係用 Illustrator 畫個正方形然後開 Color Picker 可以好方便用 HSB 個 Hue 靠 mouse wheel 轉色;唔小人靠色彩用得多都有個概念馴紅同深綠色出唔倒。我將四原色出倒嘅色喺芒上面用同一光度比較,大約只需要開到 PWM 32,所以芒嘅光度標準 120 nits 其實係好低。結果係出符我意料之外,cyan 一大段顏色同芒嘅顏色完全嘅両個世界,sRGB 最缺深綠至深藍嘅鮮色,其次因為 sRGB 嘅藍色好暗,馴紅色至紫色一段高亮度鮮色從來無喺芒出現過,效果都差好遠。

Colo Picker in Illustrator with HSB value for all possible color

當我將四原色同 WS2812 比較時,發覺佢嘅 520nm 綠色效果好得多,藍小小嘅湖水綠就無 490nm LED 咁鮮色,但 490nm + 560nm 黃色混出黎嘅綠嘅效果唔好,甚至比 sRGB 嘅綠色差小小。因為無 510nm 燈珠,520nm 嘅效果喺 ws2812 唔算最理想,而且感覺上 500nm 嘅色差係 460nm 同 560nm 正中間,即係話人眼對 500nm 至 560nm 嘅綠色分辦能力係弱啲, 亦反映左喺 CIE chart 上;最後我將 490nm 換成 500nm 之後效果令我滿意,而且感受到 10nm 之差有唔小分別。雖然 500nm + 660nm 黃黃地唔係白色,但加埋 460nm 同 560nm 之後四粒 LED 同等光度混出黎嘅 white balance 都唔錯。

即係話 rod 嘅峰值用 500nm 去形容相對準確而且係原色嘅特質, 人眼主要係集藍至綠光造 red balance 清除紅色,次要先係 white balance 提供更多色彩。因為芒係低光度,原色應該以低光度嘅 cloudy 光線為準,陰天見倒最綠嘅樹葉果隻色就係 500nm,又可以叫 “交通綠” 用喺交通燈,而常見嘅綠係太陽之下見倒嘅綠葉係 520nm。現時相机嘅 sensor 紅色係 cut 多左好多可見光波段,cloudy 同 sunlight 啲紅色份量其實差好遠,唔可能用 sunlight造指標。

果eye concept with corrected color frequency response

如果造 printing 喺話用 Illustrator 嘅 CMYK color profile 啲色會淡左好多就番喺芒睇色準, print 出黎啲色會好準無問題,但如果影相用 Photoshop 執完相用 sRGB print 落有 coating 嘅 A4 相紙,就算部 inkjet printer 係普通 CMYK 四色款,色域比普通紙闊,深色嘅 cyan 其實比 sRGB 更鮮更濃就係最大色差問題,相對 printer 表現最弱最淡嘅色就係芒嘅 RGB 三原色。

CMYK vs sRGB gamut on CIE1931

一般理解 CMYK 同 RGB 嘅差別會用 “減色” 同 “加色” 去分,CMYK 嘅原色建基於 RGB 反轉,再加 K 嘅黑色增加 constrast 比 CMY 混出黎嘅黑更黑。但如果諗真啲,白色可以無限大,黑色最盡係 -273K 絶對零度先係絶對值低 “熵” 低乱度嘅特質,應該掉番轉諗 RGB “加色” 越光越 “熵增”,所以由黑色開始造參考比由白紙 printing 造參考更合理更準確;但現時例如 color rendering index (CRI) 都係基於 printing 色準測量環境光,而唔係我嘅諗法用單一波長嘅四原色 LED 混出白色造參考比 printing 對色用。

“減色” 同 “加色” 嘅對立理論根本唔正確,想像鄰近嘅 “紅黃” 無論 printing 定 monitor 混出黎都一樣係 “橙”,而且色嘅份量應該両者減半總数保持一份先啱,所以無論由黑底定白定開始都係加灰色有一半 desaturate 效果所以一樣。但如果隔得遠例如 “藍黃”,printing 係好直覺嘅 “綠”,但 monitor 係 “粉紅”,特質係 white balance 同 black balance 嘅對立關係以 desaturate 主導,於是出現 “色彩對立理論”。所以無論係 “吸光” 定 “發光” ,”三原色” 都無法好好涵蓋所有顏色,但 “RYCB四原色” 足夠 “鄰近” 嘅特質,printing “吸光” 嘅原色根本可以同 monitor “發光” 原色一樣再加 K 黑色就可以,由 CMYK 改為 RYCBK。

Reference: