前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >抠图技术初探

抠图技术初探

作者头像
MelonTeam
发布于 2018-01-04 09:03:09
发布于 2018-01-04 09:03:09
5.2K10
代码可运行
举报
文章被收录于专栏:MelonTeam专栏MelonTeam专栏
运行总次数:0
代码可运行

图像抠图英文名叫 image matting,顾名思义就是将目标图像从背景中分离出来的一种图像处理技术。根据图像背景的复杂程度,一般分为纯色背景抠图(“绿幕”或者“蓝幕”)和自然图像抠图。

“绿幕”抠图

这项技术主要被用在电影工业中。比如有时看到电影拍摄的场景中周围全是绿色的背景,甚至里面的工作人员也穿着绿色的衣服。这些绿色的背景在后期的处理中会用抠图技术去除,替换上电影中的背景,制作出各种宏大的场景或者特效,比如:

看了这些对比图是不是再也不敢相信自己的眼睛了,同时也要佩服这些演员丰富的想象力。 上面说的就是抠图中最原始的“绿幕”或者“蓝幕”抠图技术,之所以选择绿色和蓝色,是因为这两种颜色和肤色相差最远,同时做为rgb三原色之一也更容易处理。欧美多用绿色,是因为他们有人是蓝眼睛。理论上用其他的纯色背景也是可以的,只是要确保背景和前景不要有重叠的颜色,否则前景中相同颜色的部分也会被扣掉。 下面的代码就用opencv实现了一个最简单的绿幕抠图:  

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        mat src = imread("d:\\samplepic\\g1.png");

        mat hsvsrc;

        mat result(src.size(), cv_8uc3, scalar(0,0,0));

        cvtcolor(src, hsvsrc, cv_bgr2hsv);//转换到hsv颜色空间

        for(int i = 0; i < src.rows; i++)

        {

            for (int j = 0; j < src.cols; j++)

            {

                uchar b = src.at<vec3b>(i,j)[0];  

                uchar g = src.at<vec3b>(i,j)[1];  

                uchar r = src.at<vec3b>(i,j)[2];  

             

                uchar h = hsvsrc.at<vec3b>(i,j)[0];  

                uchar s = hsvsrc.at<vec3b>(i,j)[1];  

                uchar v = hsvsrc.at<vec3b>(i,j)[2]; 

                

                if (h > 60 && h <= 130 && s > 100) //判断绿色像素点

                {

                    b = 0;

                    g = 0;

                    r = 0;

                }

                result.at<vec3b>(i,j)[0] = b;  

                result.at<vec3b>(i,j)[1] = g;  

                result.at<vec3b>(i,j)[2] = r;  

            }

        }</vec3b></vec3b></vec3b></vec3b></vec3b></vec3b></vec3b></vec3b></vec3b>

原理是首先将图像的颜色从rgb转换到hsv空间,hsv分别表示:色调(h),饱和度(s),明度(v),通过h来判断大致的绿色的范围,然后将原图中判断为绿色背景的像素点rgb都置为0。

网上找的一张绿色背景图试验的效果:

当然这个只是最简单的处理,当背景不均匀时有可能会有一些残留,或者把前景图像中的某些像素扣掉,同时边缘也还有一些残留的绿色像素和锯齿,要达到理想的效果需要做进一步的处理。

自然图像抠图 绿幕抠图对图像背景有苛刻的要求,现实中蓝绿纯色背景的图片太少,更多的是平时用手机或者相机拍摄的复杂背景的图片,这时候要想分离前景,就需要用到自然图像抠图技术。

自然图像抠图基本都基于这样一种模型: c = αf + (1-α)b 这个模型把原始的图像看成了由前景和背景叠加合成所组成的图,其中:

  • c 为图像当前可观察到的颜色,是已知的
  • f 是前景色,
  • b 背景色,
  • α 不透明度([0,1]区间变化,1为不透明,0为完全透明)。

这个模型表示图像像素的颜色是已经叠加合成过的颜色了也就是c,至于α、f、b都是未知的。而抠图算法就是要把三个变量给解出来。而要解出这些变量需要引入额外的约束信息,这通常需要用户的交互,由用户来指定一些初始的背景和前景的信息。

指定约束信息通常有两种方式: 1. trimap 一般用白色部分表示前景,黑色表示背景,灰色表示待识别的部分

                      原图                                                trimap图 2. scribbles 在前景和背景画几笔的草图。

               原图                             前景scribble                     背景scribble

各种抠图算法做的事情,就是如何更准确更快速地通过用户指定的约束信息估计出未知区域的α、b、f来。抠图算法解出每个像素的α值后就可以生成一张α图,这张图前景是白色的,其余都是黑色的蒙板图,它和原图结合后就完成了抠图。

alphamatting 网站中对历年出现的45种抠图算法进行了评测和排名。评测方法是使用8张不同类型图片做标准,测试每种算法在不同的trimap下对这些图片的抠图效果。从排名来看,2017年新出现的两种算法,抠图的效果相对最好。当然也可以看到没有一种算法是在所有的评测图片中都表现最好,从这里也可以看到自然图像抠图的复杂性。

看下排名靠前的几种算法抠图的效果: information-flow matting 算法

deep matting 算法

看抠图效果是不是很惊叹,头发的细节都能扣出来,然而这些算法运算速度普遍的很慢,要想在实时性要求比较高的场景中使用,需要大量的工程化改进和优化工作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
能提供你说的绿幕抠图里的 当背景不均匀时有可能会有一些残留,或者把前景图像中的某些像素扣掉,同时边缘也还有一些残留的绿色像素和锯齿,要达到理想的效果需要做进一步的处理 的方法吗? 不胜感谢!!!
能提供你说的绿幕抠图里的 当背景不均匀时有可能会有一些残留,或者把前景图像中的某些像素扣掉,同时边缘也还有一些残留的绿色像素和锯齿,要达到理想的效果需要做进一步的处理 的方法吗? 不胜感谢!!!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
使用 OpenCV 替换图像的背景
在我们的某项业务中,需要通过自研的智能硬件“自动化”地拍摄一组组手机的照片,这些照片有时候因为光照的因素需要考虑将背景的颜色整体替换掉,然后再呈现给 C 端用户。这时就有背景替换的需求了。
fengzhizi715
2021/02/05
2.5K0
使用 OpenCV 替换图像的背景
OpenCV图像处理专栏一 | 盘点常见颜色空间互转
今天是OpenCV传统图像处理算法的第一篇,我们来盘点一下常见的6种颜色空间互转算法,并给出了一些简单的加速方案,希望可以帮助到学习OpenCV图像处理的同学。这6种算法分别是:
BBuf
2019/12/09
1.2K0
OpenCV图像处理专栏十七 | 清华大学《基于单幅图像的快速去雾》C++复现(有一定工程意义)
这是OpenCV图像处理算法朴素实现专栏的第17篇文章。今天为大家带来一篇之前看到的用于单幅图像去雾的算法,作者来自清华大学,论文原文见附录。
BBuf
2020/03/19
1.5K0
OpenCV图像处理专栏十七 | 清华大学《基于单幅图像的快速去雾》C++复现(有一定工程意义)
OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法
OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法 前言: 以前笔者在项目中经常使用到OpenCV的算法,而大部分OpenCV的算法都需要进行遍历操作,而且很多遍历操作都是需要对目标像素点的
剑影啸清寒
2018/01/02
2.7K0
OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法
matting笔记_一周小结
详情见之前的笔记 matting系列论文笔记(一):Deep Image Matting
烤粽子
2021/07/21
1.2K0
OpenCV图像处理专栏十 | 利用中值滤波进行去雾
这是OpenCV图像处理专栏的第十篇文章,介绍一种利用中值滤波来实现去雾的算法。这个方法发表于国内的一篇论文,链接我放附录了。
BBuf
2019/12/26
8690
OpenCV图像处理专栏十 | 利用中值滤波进行去雾
matting系列论文笔记(二):Background Matting: The World is Your Green Screen
论文链接: 2017 Background Matting: The World is Your Green Screen 代码:http://github.com/senguptaumd/Background-Matting
烤粽子
2021/07/07
1.1K0
matting系列论文笔记(二):Background Matting: The World is Your Green Screen
快速中值滤波算法之黄氏算法
传统的中值滤波是通过滑动窗口不断在图像上移动,求出窗口内的中值作为中心像素点的像素,在这个过程中显然存在大量的重复计算,所以效率很低。所以有人提出了一个利用直方图来做中值滤波的算法,请看下图:
BBuf
2019/12/04
1.7K0
快速中值滤波算法之黄氏算法
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该方法针对图像中不同亮度区域进行亮度补偿,使得整个图像亮度背景趋于一致后,再进行常规的阈值分割。实验结果表明,用该方法能取得良好的分割效果。关于常规的阈值分割不是我这篇推文关注的,我这里只实现前面光照补偿的部分。算法的原理可以仔细看论文。论文原文见附录。
BBuf
2020/02/21
1.1K0
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
  图像几何变换又称为图像空间变换,它将一副图像中的坐标位置映射到另一幅图像中的新坐标位置。我们学习几何变换就是确定这种空间映射关系,以及映射过程中的变化参数。图像的几何变换改变了像素的空间位置,建立一种原图像像素与变换后图像像素之间的映射关系,通过这种映射关系能够实现下面两种计算:
vv彭
2020/10/27
3.9K0
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换
    


OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
OpenCV图像处理专栏十四 | 基于Retinex成像原理的自动色彩均衡算法(ACE)
这个算法是IPOL上一篇名为《Automatic Color Equalization(ACE) and its Fast Implementation》提出的,这实际上也是《快速ACE算法及其在图像拼接中的应用》这篇论文中使用的ACE算法,这个算法主要是基于Retinex成像理论做的自动彩色均衡,我用C++ OpenCV实现了,来分享一下。
BBuf
2020/02/21
1.5K0
OpenCV图像处理专栏十四 | 基于Retinex成像原理的自动色彩均衡算法(ACE)
图像分割之分水岭算法[通俗易懂]
分水岭概念是以对图像进行三维可视化处理为基础的:其中两个是坐标,另一个是灰度级。基于“地形学”的这种解释,我们考虑三类点:
全栈程序员站长
2022/07/05
2.3K0
图像分割之分水岭算法[通俗易懂]
OpenCV图像处理专栏七 | 《Contrast image correction method》 论文阅读及代码实现
这是OpenCV图像处理专栏的第七篇文章,这篇文章是在之前的推文 OpenCV图像处理专栏二 |《Local Color Correction 》论文阅读及C++复现基础上进行了改进,仍然针对数字图像的光照不均衡现象进行校正。
BBuf
2019/12/24
1.4K0
《Local Color Correction》局部颜色校正 论文复现
偶然见到了这篇paper,虽然之前复现的一些paper已经可以较好的处理低照度下的色彩恢复,然而在光度强度很大的情况下怎么恢复还不清楚,并且如果出现图片中既有很亮的部分,又有很暗的部分,又不知道怎么处理了。这篇paper,正式为了解决这一问题,他的局步颜色矫正,和He KaiMing的暗通道去雾有相似的想法,值得借鉴。
BBuf
2019/12/04
1.7K1
《Local Color Correction》局部颜色校正 论文复现
【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
【导读】图像抠图(Image Matting)是一个无论在工业界或者视觉研究领域都有非常重要价值的研究课题。从2000年开始,在进行图像抠图及相近研究问题的研究过程中,诞生了类似GrabCut、Guided Filter、Closed Form Matting、Poisson Matting、Bayesian Matting等等对各计算机视觉以及计算机图形学研究都有深远影响的工作。在好莱坞的动作大片、迪士尼的动画巨作、Office以及Adobe PhotoShop的一些功能中都能够看到抠图算法的身影。
深度学习技术前沿公众号博主
2020/06/29
1.6K0
【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
OpenCV图像处理专栏十一 | IEEE Xplore 2015的图像白平衡处理之动态阈值法
这是OpenCV图像处理专栏的第十一篇文章,之前介绍过两种处理白平衡的算法,分别为灰度世界算法和完美反射算法。今天来介绍另外一个自动白平衡的算法,即动态阈值法,一个看起来比较厉害的名字。论文原文链接放在附录。
BBuf
2019/12/30
9760
OpenCV图像处理专栏十二 |《基于二维伽马函数的光照不均匀图像自适应校正算法》
这是OpenCV图像处理专栏的第十二篇文章,今天为大家介绍一个用于解决光照不均匀的图像自适应校正算法。光照不均匀其实是非常常见的一种状况,为了提升人类的视觉感受或者是为了提升诸如深度学习之类的算法准确性,人们在解决光照不均衡方面已经有大量的工作。一起来看看这篇论文使用的算法吧,论文名为:《基于二维伽马函数的光照不均匀图像自适应校正算法》。
BBuf
2020/02/21
2.4K0
OpenCV图像处理专栏十二 |《基于二维伽马函数的光照不均匀图像自适应校正算法》
OpenCV图像处理专栏三 | 灰度世界算法原理和实现
这是 OpenCV图像处理算法专栏的第三篇文章,为大家介绍一下灰度世界算法的原理和C++实现,这个算法可以起到白平衡的作用。
BBuf
2019/12/11
1.3K0
OpenCV图像处理专栏三 | 灰度世界算法原理和实现
OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节
今天为大家介绍一个利用多尺度来提升图像细节的算法。这个算法来自于论文《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》,如果你想自己的图片细节看起来更加丰富的话可以尝试一下这个算法。
BBuf
2020/02/21
7560
OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节
【手撕算法】PatchMatch图像修复算法
PatchMatch 算法就是一个找近似最近邻(Approximate Nearest neigbhor)的方法,要比其他ANN算法快上10倍+。
AI算法与图像处理
2021/04/21
2.8K0
【手撕算法】PatchMatch图像修复算法
推荐阅读
使用 OpenCV 替换图像的背景
2.5K0
OpenCV图像处理专栏一 | 盘点常见颜色空间互转
1.2K0
OpenCV图像处理专栏十七 | 清华大学《基于单幅图像的快速去雾》C++复现(有一定工程意义)
1.5K0
OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法
2.7K0
matting笔记_一周小结
1.2K0
OpenCV图像处理专栏十 | 利用中值滤波进行去雾
8690
matting系列论文笔记(二):Background Matting: The World is Your Green Screen
1.1K0
快速中值滤波算法之黄氏算法
1.7K0
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
1.1K0
10、图像的几何变换——平移、镜像、缩放、旋转、仿射变换 OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)数字图像
3.9K0
OpenCV图像处理专栏十四 | 基于Retinex成像原理的自动色彩均衡算法(ACE)
1.5K0
图像分割之分水岭算法[通俗易懂]
2.3K0
OpenCV图像处理专栏七 | 《Contrast image correction method》 论文阅读及代码实现
1.4K0
《Local Color Correction》局部颜色校正 论文复现
1.7K1
【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
1.6K0
OpenCV图像处理专栏十一 | IEEE Xplore 2015的图像白平衡处理之动态阈值法
9760
OpenCV图像处理专栏十二 |《基于二维伽马函数的光照不均匀图像自适应校正算法》
2.4K0
OpenCV图像处理专栏三 | 灰度世界算法原理和实现
1.3K0
OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节
7560
【手撕算法】PatchMatch图像修复算法
2.8K0
相关推荐
使用 OpenCV 替换图像的背景
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档