2009-11-05 65 views
27

我有一個RGB格式的約200種顏色的數組。我想編寫一個採用任何RGB顏色的程序,並嘗試匹配最「相似」的數組中的顏色。匹配顏色的最佳算法。

我需要一個很好的「相似」的定義,它儘可能接近人類的感知。

我也想顯示一些關於匹配精度的信息。例如黑白:100%,相似顏色,色調略有不同:-4%。

我需要使用神經網絡嗎?有更簡單的選擇嗎?

+0

是關於一個建議,什麼可能是一個很好的相似性功能的問題,或者是關於一個算法來快速找到數組中的最相似的顏色(一個或多個),相對於一個給定的顏色? – mjv 2009-11-05 05:15:28

+0

兩者。如果首先我需要一些相似的定義,然後才能嘗試使用crating算法。我認爲「感知類似」就是我所期待的。 – 2009-11-05 05:22:54

回答

34

轉換所有顏色到CIE Lab color space的和計算的距離在那個空間

deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2) 

顏色具有最低的DeltaE是最感知彼此相似。

+0

謝謝你,那正是我需要的。 – 2009-11-05 05:16:20

+11

請記住,您不需要執行sqrt-sqrt是一個遞增函數,因此這一步是多餘的。 – Rooke 2009-11-05 05:18:55

+2

你是對的,如果你只是在排序而已,距離的平方與距離本身一樣好。如果您想比較「如何不同」,請將其放入。 – hobbs 2009-11-05 05:22:43

4

不,你不需要神經網絡!簡單地考慮HSL色彩值的向量和定義的加權模函數的矢量是這樣的:

modulus = sqrt(a*H1*H1 + b*S1*S1 + c*L1*L1); 

where a,b,c are weights you should decide based on your visual definition of what 
creates a bigger difference in perceived color - a 1% change in Hue or a 1% 
change in Saturation 

我建議你用A = B = 0.5和c = 1

最後,找出範圍你的模數將採取和定義相似的顏色是那些有他們的模數非常接近彼此(比如5%)

+2

這是一個很好的簡單替代方案。到HSL比從RGB到Lab的轉換簡單得多:) :) – hobbs 2009-11-05 05:30:37

+0

好的,所以我會先試一下 – 2009-11-05 05:36:37

+0

深紅色,可以喲你檢查你的模數的數學嗎?我不認爲這是正確的。你想要更像'a *(H1 - H2)** 2 +'的東西,是嗎? – hobbs 2009-11-05 06:21:37

1

我也指出least squares方法,就像稍微簡單些。也就是說,你取一個數的差值,將其平方,然後求和所有這些平方差。

0

我正在尋找的東西,但沒有找到很多答案,我決定創建這個小圖書館。

https://github.com/sebastienjouhans/c-sharp-colour-utilities

+0

發佈促進您自己的工作的答案時,請特別小心。確保你真的在這裏回答這個問題,只使用你的博客/來源作爲備份和參考。目前這可能被標記爲垃圾郵件。 – ChrisF 2013-04-08 22:10:03