Brad Larson的阈值过滤器中的normalizeColor

时间:2012-11-05 12:15:13

标签: gpuimage

这可能很容易理解,但我没有在Brad Larson的GPUImage中使用normalizeColor函数。你找到它,例如在Threshold.fsh下的colorObjectTracking示例中:

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()函数)
  3. 非常感谢! ALTI

1 个答案:

答案 0 :(得分:2)

问一个更合适的地方可能是项目网站本身,但我会咬人。

片段着色器的点是识别图像中具有特定颜色的像素。该功能对颜色的亮度进行粗略标准化,以便在匹配对象上的颜色时可以考虑不同的照明条件。 max()操作只是一个限制,以防止事情在某些颜色值上变得非常古怪。

这个特殊的片段着色器完全基于Apple的核心图像工程师在其题为"Object Detection by Color: Using the GPU for Real-Time Video Image Processing"的GPU Gems文章中提供的示例,他们在那里详细介绍了它。

更好的方法是通过去除亮度分量来获得与给定颜色的接近度,而是检查像素的色度。如果你有YUV源,你可以很容易地从Cr和Cb组件中做到这一点。我的GPUImageChromaKeyFilter说明了从RGB输入中提取YUV数据,然后在色度周围应用阈值。这也是Apple的一个例子(我相信这是来自他们的ChromaKey WWDC样本)。