color difference calculator explained
color difference calculator explained

色差計算機實際上在計算什麼

色差計算機是一小段軟體,它接收兩個色彩值,把每一個都轉換到一個以知覺方式組織的色彩空間中,然後輸出一個單一數字,描述它們在那個空間裡相距多遠。對網頁與設計工作來說,這個相關的數字幾乎總是 Delta E 2000(寫作 ΔE₀₀),這是 CIE 在 2001 年公布的一套標準化公式,建立在 CIE 1976 Lab 色彩空間之上。當有人搜尋「color difference calculator explained」時,實務上的答案是:它會從兩個不透明的 sRGB HEX 輸入值計算出 ΔE₀₀,讓設計師、開發者,或 QA 審查人員能判斷這一對顏色,對目前的任務來說是否夠接近。這個指標之所以存在,是因為原始的 RGB 色版差異,出了名地容易誤導人——兩個顏色可能有非常相近的紅、綠、藍數字,看在人眼裡卻明顯不同,而另外兩個色版差距很小的顏色,卻可能看起來幾乎一模一樣。Delta E 2000 試圖在 CIELAB 空間中,為這種知覺上的落差建模——在這個空間裡,大致相等的數值步幅,大致對應相等的知覺步幅——並在單純的 Lab 距離之上,加入好幾項修正。

這個公式會在接近中性灰時調整 a* 軸,處理跨越 0°/360° 邊界的色相角,把明度、彩度,與色相的差異分別加權,並針對人類視覺最不均勻的藍色區域,加入一個旋轉項。相同的輸入永遠回傳恰好為零的結果;在預設的參數權重下,比較 A 與 B 得到的數字,跟比較 B 與 A 得到的數字相同;而數值越大,永遠代表這個公式所定義的差異越大。色差計算機會把這套公式套用到兩個不透明的 sRGB 輸入值上,並在最終的 ΔE₀₀ 數字旁邊,顯示底層經過 D50 適應的 CIELAB 座標,讓這個結果變得可稽核,而不是一個黑盒子。

深入 CSS Color 4 轉換路徑

這個計算機接受的輸入範圍刻意做得很窄:恰好兩個 #RRGGBB 格式的字串。三位數簡寫、帶 Alpha 的 HEX、具名色彩關鍵字,以及 display-p3 數值,都會在任何數學運算之前被拒絕,格式錯誤的字串會產生一個明確的錯誤訊息,而不是一個不完整的結果。這種嚴格性是刻意設計的。它讓輸入色彩空間、以及不存在透明度這件事,都變得明確,所以被比較的,只有一個不透明的 sRGB 顏色對上另一個不透明的 sRGB 顏色,沒有任何隱藏的解析或合成假設。

一旦這兩個值通過驗證,它們就會經過一條固定的處理流程,取自W3C CSS Color 4 範例轉換程式碼

  1. 每一個 sRGB 色版(0–255)會被正規化到 0.0–1.0 的範圍。
  2. 這個正規化後的值會用 sRGB 傳遞函數做線性化,把伽瑪曲線還原掉,讓後續的數學運算,是在線性光而不是顯示值上進行。
  3. 這組線性 sRGB 三元值,會相對於 D65 光源(sRGB 色域的白點)乘算轉換成 CIE XYZ。
  4. 這組 D65 的 XYZ 三元值,會用 Bradford 色度適應矩陣,適應轉換到 D50,因為 CIELAB 是定義在 D50 之下的。
  5. 這組經過 D50 適應的 XYZ 值,會被轉換成 CIELAB 的 L*、a*,與 b* 座標。

顯示出來的 L*、a*、b* 數值,會被四捨五入以便呈現,但未四捨五入的版本,會繼續帶入差異公式中,這樣畫面上的四捨五入,就不會讓最終的 Delta E 產生偏差。輸入驗證發生在轉換之前,所以空白欄位、多餘字元,或非十六進位內容,都會產生一個錯誤,而不會有任何數字輸出。

為什麼 CIEDE2000 不只是歐幾里得距離

一個天真的色差計算方式,可能會直接在 Lab 座標上計算 √(ΔL² + Δa² + Δb²)。這樣做能得到一個粗略的估計值,但它忽略了原始 CIE 1976 公式已知的好幾個問題。CIEDE2000 正是為了解決這些問題而設計的。Sharma、Wu 與 Dalal 的 CIEDE2000 實作資料提供了一組標準測試集,用來驗證任何一種實作方式,而這個計算機內建了其中八組對正負號敏感的參考配對,用來防範色相環繞或加權上的回歸錯誤。

這個公式內部主要的調整項目是:

調整項目它修正的問題
接近中性色時的 a* 軸修正原始 CIELAB 會過度加重微小的彩度差異,尤其是在藍色區域。
色相旋轉項(RT)補償 CIELAB 在藍色區域眾所周知的不準確之處。
色相角環繞讓色相差異在跨越 0°/360° 邊界時,仍然保持連續。
參數權重 kL、kC、kH允許依製程調整容許度;這個計算機三者都使用常見的預設值 1。

在這些預設值下,比較 A 對 B 得到的數字,跟比較 B 對 A 得到的數字相同(僅受限於浮點數顯示精度),而完全相同的顏色,永遠回傳恰好為零的結果。數值越大,永遠代表這個公式所定義的差異越大——但這個計算機刻意不替任何一個固定數字貼上「通過」或「不通過」的標籤,因為什麼樣的結果算是可接受,取決於工作流程、觀看者,與照明條件。

如何逐步執行一次比較

使用者操作的流程很簡短,這讓人更容易把注意力放在解讀結果上,而不是操作機制上。

  1. 輸入兩個不透明的六位數 sRGB HEX 顏色,包含各自開頭的 #。
  2. 選擇「比較顏色」,把兩個值都轉換成 D50 CIELAB,並計算 CIEDE2000。
  3. 記下原始的 HEX 值與 Delta E 2000 結果,連同你工作流程所使用的容許度與觀看情境。

舉例來說,把#1E3A5F拿去和#1E3A60比較,會把這兩個字串都送過驗證步驟,跑過 sRGB → 線性 → D65 XYZ → D50 → CIELAB 的處理流程,並回傳一個很小的 ΔE₀₀ 數值,連同兩組 L*a*b* 三元值。這個數字上的接近程度,反映的只是色版數值上的變化,而不是螢幕上呈現出來的外觀。這兩塊可見的色塊,只是一個快速的視覺提示,不是一種比色量測,因為瀏覽器的算繪方式、色域、亮度,與螢幕校色,都可能讓外觀獨立於這套數學運算而產生偏移。

解讀結果,並選擇容許度

因為這個計算機拒絕給出裁決,讀者本身就變成了裁判。以下是設計師與 QA 審查人員常用的實務參考基準,但要提醒的是,沒有一個是放諸四海皆準的:

  • ΔE₀₀ < 1——在受控觀看條件下,常被形容為「人眼無法察覺」,適合用於高階印刷配色或品牌色彩的 QA。
  • ΔE₀₀ 1–2——一般來說「只有仔細端詳才能察覺」,是數位產品設計中典型的目標值。
  • ΔE₀₀ 2–3.5——「一眼就能察覺」,對許多 UI 工作流程來說仍算可接受,但對印刷打樣來說通常是個警訊。
  • ΔE₀₀ > 3.5——明顯不同的顏色;請針對這個選擇,對照設計初衷仔細審視。

這些區間是起點,不是規則。印刷、油漆、紡織品、品牌審查、攝影,與介面設計,各自使用不同的儀器與驗收界限。周邊顏色、環境光線、表面質地,與觀察者的視覺,都會改變知覺,所以一個在白色網頁上看起來沒問題的 ΔE₀₀ 2.5,在暖色調店內照明下、貼近一件有紋理的服裝時,可能會顯得很明顯。如果日後有人需要為這個決定辯護,請記下原始的 HEX 值、回報出來的數字,以及觀看或生產情境。

這個計算機無法證明或取代的事

數字化的 ΔE₀₀ 是一個可重現的比較輔助工具,不是兩個實體樣本一定會相符的保證。它無法量測一個真實物體,無法推斷印表機描述檔,也無法取代分光光度計。它同時也不是無障礙對比度檢查工具、不是 ICC 描述檔轉換器、不是影像選色工具,也不是一種認證服務。要檢查文字可讀性,請針對 WCAG 規則使用專門的對比度工具;至於實體製造上的決策,請改用經過校準的儀器、該製程所要求的光源與觀察者條件、基材描述檔,以及你供應商指定的容許度。

有兩個實務上的限制值得再次強調。第一,因為這個計算機只接受不透明的 sRGB,一個半透明的前景色,在比較之前必須先合成到一個已知的背景上;否則這次比較,就會在一個未說明的背景之下被悄悄定義出來。第二,相同的輸入永遠回傳 ΔE₀₀ = 0,所以這個工具很適合用於回歸檢查——比較一個剛匯出的設計代符與較舊版本、確認調色盤變更後某個取樣影像顏色是否仍然符合品牌色塊,或為設計系統建立可重複的 QA 紀錄。當使用情境是「這個公式定義出來的距離,對這個工作流程來說夠小嗎」,這個計算機能給出一個站得住腳、有紀錄可查的數字;但當使用情境是「這些色塊在印刷廠印到 T 恤上會不會相符」時,它只是一整條更長流程中的第一步。

如果你正在權衡選項,給新手的色差計算機:從 HEX 到 Delta E對此有詳細說明。

如果你正在權衡選項,用於網頁設計代符的色差計算機對此有詳細說明。