2012-11-05 23 views
3

這可能很容易理解,但是我沒有在Brad Larson的GPUImage中使用normalizeColor函數。你可以找到它在Threshold.fsh下colorObjectTracking例如:normalizeColor Brad Larson的閾值過濾器

vec3 normalizeColor(vec3 color) 
{ 
    return color/max(dot(color, vec3(1.0/3.0)), 0.3); 
} 

這裏是我所得到的:你把傳入彩「色彩」,要麼0.3或顏色矢量和的點積(把它1/3 ,1/3,1/3),如果點積的結果大於0.3。

所以兩個問題:

  1. 爲什麼要「色」正常化平均的它的元素呢?
  2. 爲什麼會有0.3的最小限制? (據我所知max()函數)

非常感謝! alti

回答

2

一個更合適的地方來問這個可能已經在項目網站本身,但我會咬。

片段着色器的要點在於識別圖像中具有特定顏色的像素。該功能對顏色的亮度做了粗略的歸一化處理,以便在匹配物體上的顏色時可以考慮不同的照明條件。這裏的max()操作只是一個上限,以防止某些顏色值的東西變得非常古怪。

這個特殊的片段着色器完全基於蘋果公司Core Image工程師在其GPU Gems文章標題爲"Object Detection by Color: Using the GPU for Real-Time Video Image Processing"中提供的例子,他們在那裏詳細介紹了它。

更好的方法是通過去除亮度分量來代替檢查像素的色度來獲得與給定顏色的接近度。如果您有YUV光源,則可以通過Cr和Cb組件輕鬆完成此操作。我的GPUImageChromaKeyFilter演示了從RGB輸入中提取YUV數據,然後在色度周圍應用閾值。這也是來自蘋果的一個例子(我相信這是來自他們的ChromaKey WWDC示例)。

+0

感謝您的回答和鏈接! – alti

+0

@BradLarson如何在目標C中使用此功能,而不是C 我需要規範化一種顏色,其中RGB爲 – Yadnesh

+0

@Yadnesh - Objective-C是C的超集,因此完全相同。 –