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

问题描述:

我正在使用opengl的Android的色度键(绿色屏幕)过滤器;唯一的区别是我试图替换不仅绿色背景,而是用户传递的任何颜色。我已经能够替换颜色,但问题在于它也会从光线强度非常高的物体替换颜色。如何处理色度键过滤器中的镜面高光?

谁能帮我从质地减少刺眼的光线,使我的过滤器可以按预期工作?

或任何参考蓝绿过滤器,其完美的作品。

任何事情都会受到欢迎。

enter image description here

编辑:我已经添加截图说明情况,在这里,我试图用这些云来代替红色的背景,它的工作排除其中具有光的眩光一个所有区域。我可以通过增加容差值来克服这个问题,但是这样可以取代物体上的一些黄色像素。

+0

你可以提供一个未经编辑的图像样本吗?此外,您目前的构图公式可能会有用。 – ybungalobill

+0

@ybungalobill请在此链接中查找http://imgur.com/a/Qj7p2 着色器: - 变化highp vec2 textureCoordinate; 改变highp vec2 textureCoordinate2; uniform float thresholdSensitivity; uniform vec3 colorToReplace; 无效的主要() { vec4颜色=的Texture2D(inputImageTexture,的TextureCoordinate); vec4 background = texture2D(inputImageTexture2,textureCoordinate2); vec3 diff = color.xyz - colorToReplace; 如果(点(差异,差异)

+0

@ybungalobill你可以查看这个链接以供参考。这将解释我为Android做什么https://www.shadertoy.com/view/XsfGzn –

仅仅匹配RGB颜色的算法就会变得困难。

首先要注意的事情是,你的情况,你真的只是在寻找某种形式的亮度敏感的值,而不是一个纯粹的色度值。明亮的像素在R,G和B通道中总是会有强烈的响应,所以简单的阈值处理在这里不会给出可靠的工作方式。

如果你提取了一个与亮度无关的色度值(就像YUV编码所做的那样),那么你就可以将“红色”,“绿色”和“蓝色”分开,而与颜色的亮度无关。

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

无的,这是微不足道的 - 准确的目标检测和识别是非常艰苦,仍然非常活跃的研究下(例如认为特斯拉巡航控制试图发现和避免,而驾驶的对象)。