前些天研究了一阵人像处理的抠图,运用在做的一个side project上。应朋友的要求,写一篇经验分享。
因为不是Computer Vision专业科班出身,如有不足还请指正。
图像的抠图有很多英文表达,主流的都称作Matting,也有叫Image Segmentation的(意为图像分割)。
基础:
传统的Image Matting里面很有意思的是有一个被称为上帝公式的方程
C = alpha * F - (1 - alpha) * B
其中alpha代表图像中的透明度通道,F代表前景,B代表背景,C为目标图像。计算机读取到一张图片的时候,对它来说alpha、F、B都是未知的。所以这里就需要对条件做限定收拢。因而会产生诸如trimap三元图这类的中间图像来对图像前置处理。
抠图处理有很多算法,如:
贝叶斯、KNN、Grabcut、Watershed、Poisson、Robust、Knockout、Shared Sampling、Machine Learning Based、Deep Learing Based(Trimap、U-Net、CNN、Semantic segmentation)...
有些算法在学术教学上的使用较多,通常运行速度较慢且以思路为主。
像Opencv、skicit-image,imagemagick等库都有图像处理的算法当然也包括抠图,只是效果见仁见智。
Matting思路:
图像换背景的思路很简单,把图像的前景foreground和背景background分离出来。对背景做颜色或其他的替换,然后背景background再与foreground做字节位的与或操作即可将两者合并成新的图像。
对背景的边缘还可以做腐蚀erode和膨胀dilate操作,用来对轮廓做缩小或膨胀。当然背景和前景之间的过渡,你还可以像Photoshop中那样做羽化操作。对图像处理有高斯模糊、中值模糊等。
而文章开头我们提到的算法,多是运用在图像的前景foreground和背景background分离过程中。
发散:
- 影视工业界的特效,通常使用绿幕作为背景,为什么?
- 如果你具备Image Matting的核心技术,你会把它运用到什么场景?
References(一些行业领先的Paper和链接):
[1] Automatic Portrait Segmentation for Image Stylization, http://xiaoyongshen.me/webpage_portrait/index.html
[2] Deep Automatic Portrait Matting, http://www.cse.cuhk.edu.hk/leojia/projects/automatting/index.html
[3] AutoPortraitMatting, https://github.com/PetroWu/AutoPortraitMatting
[4] automatic-portrait-tf, https://github.com/Corea/automatic-portrait-tf
[5] Automatic Trimap Generation for Image Matting, https://arxiv.org/abs/1707.00333
[6] U-Net: Convolutional Networks for Biomedical Image Segmentation,https://arxiv.org/pdf/1505.04597.pdf
[7] Mobile Real-time Video Segmentation , https://research.googleblog.com/2018/03/mobile-real-time-video-segmentation.html
[8] 谷歌试水AI换视频背景功能 少数YouTube用户抢鲜体验,https://www.cnbeta.com/articles/soft/703033.htm
[9] Image Matting, https://zh.wikipedia.org/wiki/%E5%BD%B1%E5%83%8F%E5%8E%BB%E8%83%8C
领取专属 10元无门槛券
私享最新 技术干货