我需要一点颜色数学帮助。(RGBA)我正在尝试减少角色上的绿色数量,而不会实际影响绿色背景。视觉效果的绿色屏幕。
所以这就是我所拥有的:
使用表达式:g>(r+b)/2 ? (r+b)/2:g
表达式表示如果绿色值大于红色和蓝色之和除以2,则绿色将设置为该总和。运行该表达式将为我提供第二个图像。
你可以看到绿色从我想要的那个人那里完美地移除了,但它也从背景中取出绿色并使其变灰,这是我不想要的。
此处的图像是去除了多少绿色。我通过从第二个图像中减去第一个图像来得到这个。所以它是两者之间的区别。
有人可以帮我弄清楚我怎么只能通过表达/公式从男人而不是背景中移除绿色?我试图夹住绿色,意思是,写一个表达式,表示:对于任何低于某个值的绿色像素,不等于背景绿色,将其变为黑色。这种方法很有效,但它对头发的细微边缘非常苛刻。
以下是通过大量色彩校正和分级实现的理想结果。我希望通过表达得到这个结果。
这是最终结果。看起来不错。此图像是从角色消失的绿色,但不是背景。我通过将上面的图像添加到第二个图像得到了这个。我做了一个分屏,所以你可以看到差异。在夹克和头发中最常见。
答案 0 :(得分:3)
我不是这方面的专家,但是:
我认为你的方法并不像你想要的那样(从物理方面)。
绿色背景照在你的角色上,为角色表面添加光线。所以你需要删除它(不必要的光)。您将所有绿色像素变为灰色,而我认为这是错误。如果你的家伙有绿色T恤怎么办?
我会这样做:
首先,我希望你的场景设置能够获得无缝照明条件,否则如果没有适当的3D照明/散射分析,这将无法工作,这是一项艰巨的任务,你也需要完整的场景3D模型。
首先检测散落到物体位置的光线量。
只需将白纸放在人的大致位置即可。拍照。然后,您会发现工作表的图像计算其平均颜色并计算添加到白色的绿色。
c[i]=c0[i]+c0[i]*m[i]
c
像素颜色(纸张的平均颜色)c0
对象颜色(真实对象颜色......白色,但应与c
成比例,如果无法访问场景舞台设置,可能会有点棘手)m
缩放(这是我们需要的)i
频道这将导致3个线性方程组的系统,从而计算出m
。这在背景颜色上是不变的,因此它适用于任何颜色...
我没有从你的套装中看到白色薄饼的图像所以我使用了牙齿。问题是从皮肤/肉周围照射的红色太多,所以我只使用蓝色通道进行补偿。这不准确,但它会做(除非背景照亮另一个通道)...所以对于提取的牙齿图像平均颜色:
float m[green]=float(avg[green]-avg[blue])/float(avg[blue]);
m的所有其他通道都为零(对于这种情况)。不要忘记m[]
是float
!!!。
现在只需删除图像中的光照
按照相同的等式计算c0
所以:
c0[i]=c[i]/(1.0+m[i])
c
未经修正的图片像素颜色c0
更正后的图片像素颜色m
比例(在步骤#1中计算)i
频道(R,G,B)每个像素执行每个通道...这是原始图像c
:
这是经过更正的图片c0
:
这是c-c0
:
正如你所看到的那样,绿色也会从背景中被带走,但这样就可以了,因为背景也是如此!它应该是手腕更绿,但我认为这是因为它距离我校准的牙齿太远而且可能太靠近墙壁......因为这也高度依赖于物体位置(如果照明是不是很无缝)更不用说它在阴凉处......
答案 1 :(得分:1)