2011-08-30 136 views
1

我在尋找一些方法,可以讓我分析一個圖像,並確定它是如何greenISH或brownISH或whiteISH的想法......我強調ISH在這裏,因爲我有興趣捕獲所有這些顏色的陰影。到目前爲止,我做了以下幾點:iPhone彩色圖像分析

我有我的UIImage,我有CGImageRef,我實際上有像素本身的顏色(它是RGB和Alpha),我不知道如何量化這個,並確定所有的綠色陰影,藍色,棕色,黃色,紫色等......因此,我可以處理每一個像素,確定它是基本的RGB,但是我需要一些幫助來量化整個圖像上的顏色。

感謝您的想法... Alex。

回答

4

一個相當好的解決方案是從RGB色彩空間切換到Y色彩空間之一,如YUV,YCrCb或其中任何一個。在所有情況下,Y通道代表亮度,其他兩個通道代表顏色,相對於亮度。您可能想要將亮度因子分解出來,可能需要注意將所有顏色都排除在某個黑暗之外,因此單獨獲取Y是本身有幫助的第一步。

通過簡單的線性組合實現從RGB到YUV的轉換。直接從維基百科和其他成千上萬來源:

y = 0.299*r + 0.587*g + 0.114*b; 
u = -0.14713*r - 0.28886*g + 0.436*b; 
v = 0.615*r - 0.51499*g - 0.10001*b; 

假設你保持R,G和B在區間[0,1],您的第一個測試可能是:

if(y < 0.05) 
{ 
    // this colour is very dark, so it's considered to be as 
    // far as we allow from any colour we're interested in 
} 

要決定那麼你的顏色是多麼接近,比如說,綠色,制定出你感興趣的綠色的U和v分量,爲y的比例:

r = b = 0; 
g = 0; 

y = 0.299*r + 0.587*g + 0.114*b = 0.587; 

u = -0.14713*r - 0.28886*g + 0.436*b = -0.28886; 
v = 0.615*r - 0.51499*g - 0.10001*b = -0.51499; 

proportionOfU = u/y = -2.0479; 
proportionOfV = v/y = -0.8773; 

隨後,制定和比較的比例U和V爲輸入的顏色和比較(例如與2d平面距離)到你計算的顏色比較。更接近的值更相似。您如何擴展和使用該指標取決於您的應用程序。

請注意,隨着y趨於0,由於輸入數據的範圍有限,計算的比例變得越來越不精確,並且當y爲0時未定義。從概念上講,這是因爲當沒有光時,所有顏色看起來完全相同在他們。檢查y是否高於某個最小值是解決此問題的實用方法。這也意味着,如果你試圖說「這張照片多麼黑」,你就不會得到明智的結果,儘管這也是因爲不反射任何光線的曲面和曲面之間的不確定性,沒有任何光線落在它上面。

+0

太棒了 - 謝謝你...我會試試看。 – geekyaleks