绿幕抠图为什么是“绿幕”呢?人眼的感光系统和摄像机的感光芯片采集的色彩中,最常见的就是红、蓝、绿三原色。红色在演员服饰和物体中较为常见,不利于背景分离;绿色则是人体肤色最少的颜色,人眼对绿色最为敏感,而相机也是模仿人眼的设计,CMOS 采集信息是按照 RGGB,其信号最强、噪波最少,包含了大部分的亮度信息,所以很容易找到对比度,在直播中绿幕比蓝幕更常用。
常用的移动端实时绿幕抠图技术主要包括:色差抠图技术(Color Difference Keying)、亮度抠图技术(Luma Keying)以及色度抠图技术(Chroma Keying)。
色度抠图技术(Chroma Keying)
色度抠图算法则是在 HSV 彩色空间中进行,其中 H 表示色调、即是什么颜色,S 表示饱和度即该颜色有多浓,V 表示亮度即该颜色有多亮。色度键算法需要提前手动选择背景颜色,通过计算整幅图像和背景颜色的距离或称相似度来判断哪些颜色属于背景,哪些颜色属于前景,由此得到最终的 alpha 图。
色度抠图技术利用图像的颜色信息求解不透明度。色度抠图技术将彩色图像转换到 HSV 空间,然后对色度分量(H)进行软阈值分割。在实际应用中,受光照等环境因素的影响,色度分量不能完全区分颜色信息,需要对色度(H)、饱和度(S)和亮度(V)三通道加权求解不透明度。由于其快速并且能得到比较好的绿幕抠图效果,色度抠图技术被广泛应用在实时场景。
HSV 颜色空间模型
亮度抠图技术(Luma Keying)
亮度抠图算法指将一幅彩色图像转为单通道的黑白图像,这幅黑白图像就代表着该图像的亮部和暗部区域。通过设置最低亮度和最高亮度两个阈值,将符合该条件的区域保留,不符合的去除,由此就生成了一张 alpha 图,然而这种方法直接生成的 alpha 图通常有比较多的瑕疵,还需要进行二次处理。
亮度抠图技术利用图像的亮度信息,对其进行软阈值操作来求解不透明度。即在 HLS 空间对亮度分量 L 进行软阈值操作,从而得到从 0 到 1 平缓变化的。然而该技术只考虑了图像的亮度信息,忽略了图像的颜色信息,因此对于大部分图像的效果不是十分理想。
色差抠图技术(Color Difference Keying)
色差抠图算法是在 RGB 彩色空间中进行,利用 R、G、B 三通道的颜色差异来求解不透明度,处理速度非常快,但采用RGB空间不能很好地分离绿色,进行处理后得到的输出结果较为突兀,边缘分割明显,前景细节丢失,绿色溢出较为严重。
RGB颜色空间模型
以上三种是常见的绿幕抠图技术,但因环境光线不同,绿布颜色不同,绿布亮度不统一,以及前景目标中包含绿色成分等因素,在实际中会存在着大量的干扰信息。所以要实现抠图的边缘平滑,优秀的控制绿色溢出问题,并且能保留原图中的阴影,对于透明物体也可以达到视觉最优的效果,做到真正亚像素级抠图效果,都是需要针对每个因素进行算法优化的,更多细节访问蓝松抠图SDK。