本文介紹了RGB顏色空間到原始顏色名稱的映射的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
給定不同的RGB三聯體(例如,[255,255,255]或[1,2,3]),我想將其映射到一組固定的顏色(紅色、藍色、綠色、黑色、白色、黃色、粉色、紫色、米色、棕色、橙色、灰色)。
舉個例子,當我給出”0,0,0″時,黑色應該是映射的輸出。同樣,灰色代表”190,190,190″。地圖的值將采用上面定義的枚舉顏色(共12種)。
使用固定的顏色集維護反向映射,并使用地圖的所有元素計算每個新的RGB三元組的平方差是一種方法,但這種方法的結果并不是很好。結果不佳的原因可能是我們選擇的12種顏色在顏色空間中分布不均勻(但不確定:)。
此數據將進一步用于群集。
有沒有庫(最好是Java/C++或OpenCV)或網站可以執行類似的任務,我可以利用它?
提前謝謝!
推薦答案
首先使用
Map1: colourname->Colourvalue
example: "black" -> (255,255,255), "blue" -> (0,0,255)
Map2: Colourvalue->colourname
example: (255,255,255) -> "black", (0,0,255) -> "blue"
如果您獲得一個值的顏色(0,10,240)
,您希望檢查map2中的哪些已知條目也是最接近的。
因此,如果顏色的距離大致相等(否則請參見底部),則計算歐幾里得距離,得到類似
的結果
dist((0,10,240), (0,0,255)) ~ 20 (number guessed)
dist((0,10,240), (255,255,255)) ~ 20000 (number guessed)
并且您知道您的顏色值(0,10,240)
應映射到”藍色”。
要記住的幾件事:
您可能需要查看不同的顏色空間。我建議使用實驗室的色彩空間,它的設計是為了使距離與人類體驗世界的方式相似。
簽出XKCD Colour Survey。如果您只使用RGB,您甚至可以存儲所有顏色到其正確名稱的靜態映射。如果奧尤有足夠的空間,你會有一個即時查找。(為了節省空間,使用來自[r,g,b]->char的三維數組,并根據您的char查找顏色名稱)
編輯:您必須檢查顏色之間的距離是否大致相等。否則,有些顏色可能會曝光量過大。(例如,在xkcd顏色圖表中,一些顏色,如深棕色,只有微小的區域,而其他顏色則非常大。
這篇關于RGB顏色空間到原始顏色名稱的映射的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,