【问题标题】:How to handle specular highlights in chroma key filter?如何处理色度键滤镜中的镜面高光?
【发布时间】:2016-10-06 15:20:05
【问题描述】:

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

谁能帮我减少纹理的眩光,以便我的滤镜可以按预期工作?

或任何完美工作的参考绿屏过滤器。

任何事情都会受到欢迎。

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

【问题讨论】:

  • 您能提供一个未经编辑的示例图像吗?您当前的组合公式也可能有用。
  • @ybungalobill 请在此链接中找到图像imgur.com/a/Qj7p2 着色器:- 变化的 highp vec2 textureCoordinate;变化的 highp vec2 textureCoordinate2;统一浮动阈值灵敏度;统一 vec3 colorToReplace; void main() { vec4 color = texture2D(inputImageTexture, textureCoordinate); vec4 背景 = texture2D(inputImageTexture2, textureCoordinate2); vec3 diff = color.xyz - colorToReplace; if(dot(diff, diff)
  • @ybungalobill 您可以查看此链接以供参考。这将解释我为 android shadertoy.com/view/XsfGzn 所做的事情
  • @AdarshSharma:把类似的东西放在你的问题中,而不是评论。
  • @NicolBolas 好的。现在,你能帮帮我吗?

标签: android opengl-es shader fragment-shader


【解决方案1】:

仅匹配 RGB 颜色的算法会很困难。

首先要注意的是,在您的情况下,您实际上只是在查看某种形式的亮度敏感值,而不是纯色度值。明亮的像素在 R、G 和 B 通道中总是会产生强烈的响应,因此简单的阈值处理在这里无法提供可靠的解决方法。

如果您提取了与亮度无关的色度值(就像 YUV 编码那样),那么您可以独立于颜色的亮度来分离“红色”、“绿色”和“蓝色”。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2020-07-24
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多