复杂度
- 现实环境的影响:绿色不是一个固定的像素值, 它会随光线亮暗,绿布的颜色, 相机的成像质量,反光,色溢等各种因素影响,所以不能用简单的判断一个像素值,就认为是绿或不绿;也不是一个平滑过度的值,比如光线强的地方或相机好,绿色的成像就好一些, 光线差或手机差,绿色就完全不同。
- 相机设备的影响:比如iphone12手机和iphone8手机对着同一个绿布, 成像就完全不同; iphone手机和android手机, 甚至android的高端手机和低端手机,对着同一个绿布,成像也不相同;(这也是大部分手机厂家不断广告他们的相机如何如何好的原因)。
- 绿布的影响:常见的绿布有三种(如下),需要在不经过用户调节的情况下, 直接抠掉,因为如果要给用户出一个教程, 教会用户明白各种参数, 让用户根据自己的场景不断的调节抠绿的一些参数, 本身就已经是错误的。
精细度:
- 需要抠的好, 适合常见光线条件下的大部分场景,并在抠完后没有绿边, 自然干净。如果不精细, 就有会绿边,这样叠加背景后, 看上去, 就容易出戏, 让人感觉不舒服;
- 并且在抠绿后, 不能对其他颜色产生影响, 如果绿色去掉了,但其他颜色变色了, 也会影响整体的画质,降低用户的体验;
抠绿算法
- 大概这两种:1. 网上开源的Chroma Key(色度键); 2. 自研的抠图算法;
- 开源的chromaKey: 有GPUImage版本和ffmpeg的C语言版本,但算法是同一个, 只是分别用opengles语言和C语言实现。是对指定颜色做抠去, 需要用户点击选取一下颜色,然后对指定颜色像素做抠图,然后用户调节平滑度和其他参数才可以抠去; 缺点是:抠的不干净, 用户学习成本高,需要用户反复的调节才可以勉强可用;
- 蓝松的绿幕抠图:自研的抠图算法, 采用卷积等核心处理, 可以自动抠去不同的绿色, 并支持不同的功能需求,大部分的场景下不需要调节, 相机对着绿布, 就自然抠去了, 几乎零学习成本。 我们一直认为好的调节,就是不调节;当然提供了各种阈值强度等调节接口,以方便在特定场合下使用。