交互式前景提取
发布网友
发布时间:2023-06-16 07:09
我来回答
共1个回答
热心网友
时间:2024-10-25 19:32
经典的前景提取技术主要使用纹理(颜色)信息,如魔术棒工具,或根据边缘(对比度)信息,如智能剪刀等完成。2004年,微软研究院(剑桥)的Rother等人在论文GrabCut: Interactive Foreground Extraction Using Iterated Graph Cuts中提出了交互式前景提取技术。他们提出的算法,仅需要做很少的交互操作,就能够准确地提取出前景图像。
在开始提取前景时,先用一个矩形框指定前景区域所在的大致位置范围,然后不断迭代地分割,直到达到最好的效果。经过上述处理后,提取前景的效果可能并不理想,存在前景没有提取出来,或者将背景提取为前景的情况,此时需要用户干预提取过程。用户在原始图像的副本中(也可以是与原始图像大小相等的任意一幅图像),用白色标注要提取为前景的区域,用黑色标注要作为背景的区域。然后,将标注后的图像作为掩模,让算法继续迭代提取前景从而得到最终结果。
例如,对于图17-14的左图,先用矩形框将要提取的前景Lena框出来,再分别用白色和黑色对前景图像、背景图像进行标注。完成标注后,使用交互式前景提取算法,就会得到图17-14右图所示的结果图像。
PowerPoint 2016提供了“删除背景”功能。用户可以根据需要,在图像上标注出需要保留的部分和需要删除的部分,然后让PowerPoint帮助我们完成前景对象的提取。尝试在PowerPoint中删除图像背景,会帮助我们更好地理解交互式前景提取时模板的使用方式。
下面我们来看GrabCut算法的具体实施过程。
在OpenCV中,实现交互式前景提取的函数是cv2.grabCut().
【例17.8】在GrabCut算法中使用模板提取图像的前景,并观察提取的效果。
需要注意,在上述步骤中,使用画笔标记的模板图像m0不能直接作为模板(即参数mask)使用。函数cv2.grabCut()要求,参数mask的值必须是cv2.GC_BGD(确定背景)、cv2.GC_FGD(确定前景)、cv2.GC_PR_BGD(可能的背景)、cv2.GC_PR_FGD(可能的前景),或者是0、1、2、3之中的值。此时的模板图像m0中,存在着[0, 255]内的值,所以它的值不满足函数cv2.grabCut()的要求,无法作为参数mask直接使用。必须先将模板图像m0中的白色值和黑色值映射到模板m上,再将模板图像m作为函数cv2.grabCut()的模板参数。