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