基于OpenCV的绿幕抠图

2024-04-02

背景知识

        Keying,即抠像,从一幅图像中提取所要的前景,让它与背景分离起来。Key通常只包含一个通道,是一幅黑白图像,通常黑色的区域(0)代表完全透明,而白色区域(1)代表完全不透明,而灰色区域表示着半透明。

1. Luma Keying(亮度抠像)

        亮度抠像一般用于画面上有明显亮度差异的镜头抠像,是基于lab中的L通道的抠像技术,对于明暗反差很大的图像我们应用这种抠像技术使背景透明。如明亮天空背景下拍摄的画面,就可以利用抠像将天空去除替换成想要的动态天空素材进行再编辑等等。

以上图为例,在Lab (L亮度, ab色度)通道下的各通道图如下:

可以看到L通道背景和人物的差异值很明显,可以用于区分前景和背景。

Luma Keying一般针对亮度L通道进行抠图,用于明暗差异大的图片,但也不仅仅适用于亮度差异大的图片,它的思想可以推广至某一通道有较大差异的情况。

        输出我们绿幕的图片的G通道如下:

可以看到,由于我们的视频素材是带有绿幕的,图像背景是绿幕所以G值较大,前景G值较小,这导致了前景和背景在G通道的数值差异较大,因此我们使用Luma Keying的思想对图片的G通道进行操作。

        计算掩膜mask的公式如下:

上述公式中,G表示像素在G通道的值,T_{0}T_{1}表示低阈值和高阈值。 同时公式中的mask取值在[0,1],后续写出的所有公式都默认mask取值在[0,1],但在OpenCV实现时范围是[0,255]

对于上述公式的直观理解是,如果G通道的值在一个高范围之间,说明是背景,设置为0;其他情况都设置为1。

产生的结果如下:

可以看到上述公式有一个问题就是,mask取值只有0和1,这样导致边缘过渡不平滑。对其进行边缘软化,公式修改为如下:


上述公式中多加了一个阈值参数和。对上述公式的直观理解是,当通道的值仍于高范围之间,说明是背景,设置为0;当通道的值不在高范围之内时,计算,是通道的值离两个阈值的最短距离,如果超过了阈值,说明离背景的范围很远,可以直接设为1;其他情况,则平滑过渡。 对于上述情况,平滑过渡后得到的结果如下:

可以看到不是输出的mask取值不只有0和1,还有平滑过渡的其他数值。


2. Chroma Keying(色度抠像)

        色度抠像又称色度键,是基于RGB模式的抠像技术,其从原理上最接近最初的蓝绿幕技术,即通过前景和背景颜色差异将背景从画面中抠除并替换。

        当然这种抠像方法有一个小问题就是前景如果出现背景色也会被抠除,有可能会出现内部零散的点。这可以通过形态学的膨胀、腐蚀操作进行改善。

我们还可以直接对色调进行操作,在HSV通道中,每一种颜色是由固定的范围HSV三通道值构成的,我们只需要根据是否属于绿色范围来区分前景和背景,从而进行抠图。各种颜色在HSV的范围如下表:

只需将绿色和其他颜色区分出来即可


3. Difference Keying(差值抠像)

        差值抠像比较特殊,其原理是通过寻找两段同机位拍摄的画面的差别并将其保留,而将没有差别画面作为背景去除。其基本思想是,先把前景物体和背景一起拍摄下来,然后保持机位不变,去掉前景物体,单独拍摄背景。这样拍摄下来的两个画面相比较,在理想状态下,背景部分是完全相同的,而前景出现的部分则是不同的,这些不同的部分就是需要保留的通道。一般这种抠像方式主要用于无法运用蓝/绿幕抠像的场景。

Color Difference Keying处理的是RGB通道

我们从Luma keying可以知道,绿幕背景的G通道值往往较大,除了对G通道的值大小进行衡量,还可以衡量G通道与其他B、R两通道差异程度,公式如下:


此时d是指G通道与R、B通道中最大者的差距,可能为负数。T_{0}T_{1}不再表示低高阈值。

上述公示的直观理解是:背景区域的G值往往较大,而R、B两个通道的值相对较小,因此d值较大者代表越接近背景区域,当d大于阈值T_{0}时认为是背景;而当d小于阈值T_{0},且与阈值T_{0}距离大于T_{1}时,说明已经离背景区域差的很远,可以认为是前景;在这之间的d都进行平滑过渡。



4. 3D Keying(三维抠像)

        三维抠像原理是将图像的色彩区域规整为三维空间显示模式,将RGB三个通道视为三维空间的三个坐标系,颜色的差异程度用空间距离来衡量。

        选择哪一种抠像手段要取决于素材,而且素材对前期的拍摄有一些要求,所以在抠像之前先要对素材进行分析。分析它的亮度范围,分析它的色彩,分析它的遮挡关系,分析要提取的范围以及背景等。通常一种抠像手段是很难达到要求的,这时候就需要多种手段并用,达到最终目的。

将图像的BGR三个颜色通道映射到三维坐标空间,这样对于任意一个像素都可以映射为三维空间中的一个坐标点。

那么衡量背景与前景差异程度就转化为三维坐标系中点与点空间距离。背景因为都是绿幕或者蓝幕,所以点会聚集在某一空间区域,在更优化时可以使用聚类,本实验仅人为地给出距离阈值。

具体方法上,我们可以任意选取背景中的4个点(或更多),计算所有像素与这四个节点的欧氏距离,并取最小的一个当作是该像素与背景的距离d。当距离d小于某一低阈值T_{0}时,说明该点与背景距离较近,认为是背景;当距离大于某一高阈值T_{1}时,说明离背景很远,认为是前景;其余情况进行边缘软化。

公式如下:

上述公式中,c是像素的BGR颜色,s_{i}是随机选取的几个背景点。


更多 专业影视级 绿幕抠图 算法,请联系我们。

阅读35
分享