白平衡(色彩抑制)公式?
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 模型。
首先检测散射到物体位置的光量
只需将白纸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
!!!.
现在只需移除图像的光照
按照相同的方程式计算 c0
所以:
c0[i]=c[i]/(1.0+m[i])
c
未校正的图像像素颜色
c0
校正图像像素颜色
m
比例(在步骤 #1 中计算)
i
频道 (R,G,B)
每个通道每个像素...这是原始图像c
:
这是修正后的图像c0
:
这是c-c0
的减法:
正如您所看到的,一些绿色也从背景中消失了,但这没关系,因为背景也被照亮了!!!手腕也比它应该的更绿,但我认为这是因为它离我校准的牙齿太远,也可能太靠近墙壁......因为这也高度依赖于物体的位置(如果照明不够无缝)更不用说它在阴影中......
谢谢大家的想法和意见。每条评论都是火花,引导我找到最接近解决方案的方法。
它确实需要更多的工作。如果你仔细看看他的拳头,你会发现它有点断了。下一步是建立可调整的值来影响效果的权重。
我需要一些颜色数学方面的帮助。(RGBA) 我正在尝试减少角色上的绿色量,而不实际影响绿色背景。视觉效果绿屏。
这就是我所拥有的:
我有一个人在绿屏上。
使用表达式:g>(r+b)/2 ? (r+b)/2:g
表达式表示如果绿色值大于红色和蓝色的总和除以 2,则绿色将设置为该总和。 运行 该表达式将给我第二张图片。
你可以看到绿色从人物身上完美移除,这是我想要的,但它也从背景中移除绿色并使其变成灰色,这是我不想要的。
这张图片显示了移除了多少绿色。我通过从第二张图像中减去第一张图像来得到这个。所以这是两者之间的区别。
谁能帮我弄清楚如何通过 expression/formula 只去除人物的绿色而不去除背景?我试图限制绿色,也就是说,写一个表达式:对于任何低于某个值且不等于背景绿色的绿色像素,将其变为黑色。这有点管用,但它在像头发这样的细边上非常粗糙。
下面是我通过大量色彩校正和分级获得的预期结果。我很想通过表达得到这个结果。
这是最终结果。看起来不错。此图像是从角色中消失的绿色,但不是背景。我通过将上面的图像添加到第二个 image.I 中得到了这个,做了一个分屏,所以你可以看到不同之处。大部分在夹克和头发上可见。
我不是这方面的专家但是:
我不认为你的方法如你所愿(从物理方面)。
绿色背景照在你的角色上,为角色表面增光。所以你需要删除它(不需要的光)。您正在将所有绿色像素变成灰色,我认为这是 WRONG。如果你的男人穿绿色 T 恤怎么办?
我会这样处理:
首先,我希望您的场景设置具有无缝照明条件,否则如果没有适当的 3D illumination/scattering 分析,这将永远无法工作,这是一项艰巨的任务,您还需要场景的完整 3D 模型。
首先检测散射到物体位置的光量
只需将白纸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
!!!.现在只需移除图像的光照
按照相同的方程式计算
c0
所以:c0[i]=c[i]/(1.0+m[i])
c
未校正的图像像素颜色c0
校正图像像素颜色m
比例(在步骤 #1 中计算)i
频道 (R,G,B)
每个通道每个像素...这是原始图像
c
:这是修正后的图像
c0
:这是
c-c0
的减法:正如您所看到的,一些绿色也从背景中消失了,但这没关系,因为背景也被照亮了!!!手腕也比它应该的更绿,但我认为这是因为它离我校准的牙齿太远,也可能太靠近墙壁......因为这也高度依赖于物体的位置(如果照明不够无缝)更不用说它在阴影中......
谢谢大家的想法和意见。每条评论都是火花,引导我找到最接近解决方案的方法。 它确实需要更多的工作。如果你仔细看看他的拳头,你会发现它有点断了。下一步是建立可调整的值来影响效果的权重。