白平衡(色彩抑制)公式?

White balance (Color Suppression) Formula?

我需要一些颜色数学方面的帮助。(RGBA) 我正在尝试减少角色上的绿色量,而不实际影响绿色背景。视觉效果绿屏。

这就是我所拥有的:

我有一个人在绿屏上。

使用表达式:g>(r+b)/2 ? (r+b)/2:g 表达式表示如果绿色值大于红色和蓝色的总和除以 2,则绿色将设置为该总和。 运行 该表达式将给我第二张图片。 你可以看到绿色从人物身上完美移除,这是我想要的,但它也从背景中移除绿色并使其变成灰色,这是我不想要的。

这张图片显示了移除了多少绿色。我通过从第二张图像中减去第一张图像来得到这个。所以这是两者之间的区别。

谁能帮我弄清楚如何通过 expression/formula 只去除人物的绿色而不去除背景?我试图限制绿色,也就是说,写一个表达式:对于任何低于某个值且不等于背景绿色的绿色像素,将其变为黑色。这有点管用,但它在像头发这样的细边上非常粗糙。

下面是我通过大量色彩校正和分级获得的预期结果。我很想通过表达得到这个结果。

这是最终结果。看起来不错。此图像是从角色中消失的绿色,但不是背景。我通过将上面的图像添加到第二个 image.I 中得到了这个,做了一个分屏,所以你可以看到不同之处。大部分在夹克和头发上可见。

我不是这方面的专家但是:

我不认为你的方法如你所愿(从物理方面)。

绿色背景照在你的角色上,为角色表面增光。所以你需要删除它(不需要的光)。您正在将所有绿色像素变成灰色,我认为这是 WRONG。如果你的男人穿绿色 T 恤怎么办?

我会这样处理:

首先,我希望您的场景设置具有无缝照明条件,否则如果没有适当的 3D illumination/scattering 分析,这将永远无法工作,这是一项艰巨的任务,您还需要场景的完整 3D 模型。

  1. 首先检测散射到物体位置的光量

    只需将白纸sheet放在您的大概位置即可。拍照。然后你找到 sheet 的图像计算它的平均颜色并计算向白色添加多少绿色。

    c[i]=c0[i]+c0[i]*m[i]
    
    • c像素颜色(sheet的平均颜色)
    • c0 对象颜色(真实对象颜色...白色,但应与 c 成比例,如果不访问场景舞台集可能会有点棘手)
    • m规模(这就是我们需要的)
    • i频道

    这将导致 3 个线性方程组,因此从中计算 m。这在背景颜色上是不变的,因此它适用于任何颜色 ...

    我没有白色图像 sheete 从你的集合中,所以我用牙齿代替。问题是 skin/flesh 周围有太多偏红的颜色,所以我只使用蓝色通道来补偿。这不准确但它会做(除非背景也照亮到另一个通道)...所以对于提取的牙齿图像平均颜色:

    <-这是我用的拔牙图)

    float m[green]=float(avg[green]-avg[blue])/float(avg[blue]);
    
    • c0 是平均颜色的蓝色通道
    • c 是平均颜色的绿色通道

    m 的所有其他通道均为零(对于本例)。不要忘记 m[]float !!!.

  2. 现在只需移除图像的光照

    按照相同的方程式计算 c0 所以:

    c0[i]=c[i]/(1.0+m[i])
    
    • c 未校正的图像像素颜色
    • c0 校正图像像素颜色
    • m 比例(在步骤 #1 中计算)
    • i 频道 (R,G,B)

    每个通道每个像素...这是原始图像c:

    这是修正后的图像c0:

    这是c-c0的减法:

    正如您所看到的,一些绿色也从背景中消失了,但这没关系,因为背景也被照亮了!!!手腕也比它应该的更绿,但我认为这是因为它离我校准的牙齿太远,也可能太靠近墙壁......因为这也高度依赖于物体的位置(如果照明不够无缝)更不用说它在阴影中......

谢谢大家的想法和意见。每条评论都是火花,引导我找到最接近解决方案的方法。 它确实需要更多的工作。如果你仔细看看他的拳头,你会发现它有点断了。下一步是建立可调整的值来影响效果的权重。