如何处理色度键过滤器中的镜面高光?

时间:2016-10-05 04:20:13

标签: android opengl-es shader fragment-shader

我正在使用opengl处理android的色度键(绿屏)过滤器;唯一的区别是我不仅要更换绿色背景,还要替换用户传递的任何颜色。我已经能够替换颜色,但问题是它还会替换光强度非常高的物体的颜色。

任何人都可以帮我减少质地的眩光,以便我的滤镜可以按预期工作吗?

或任何可以完美运行的参考绿屏滤镜。

欢迎任何事情。

enter image description here

编辑:我添加了截图来解释这种情况,在这里我试图用这些云替换红色背景,它适用于所有区域,不包括光线眩光的区域。我可以通过增加公差值来克服这个问题,但那会使它从对象中替换掉一些黄色像素。

1 个答案:

答案 0 :(得分:0)

算法明智地只匹配RGB颜色将是困难的。

首先要注意的是,在您的情况下,您实际上只是在看某种形式的亮度敏感值,而不是纯色度值。明亮像素在R,G和B通道中始终具有强烈响应,因此简单的阈值处理不会在此提供可靠的工作方式。

如果您提取了与亮度无关的色度值(就像YUV编码那样),那么您可以隔离"红色","绿色"和"蓝色&#34 ;独立于颜色的亮度。

然而,这仍然会有边缘情况。例如,如果您的瓶子是红色或有红色标签会发生什么?要解决此问题,您需要某种形式的几何特征提取(例如,图像上的sorbel边缘检测),然后仅在特定的识别区域内进行颜色替换。

这一切都不是微不足道的 - 精确的物体检测和识别非常困难,并且仍在积极研究中(例如,想想特斯拉巡航控制试图在驾驶时发现并避开物体)。