基于Opencv的交互式GrabCut分割
常情况下,我们需要图像进行前景后景进行分离,有的时候也许我们仅仅是需要前景,从而实现前景物体的提取或者背景的更换等。GrabCut是一种基于图切割的图像分割方法。GrabCut算法是基于GraphCut算法的改进。

基于要被分割对象的指定边界框开始,使用高斯混合模型估计被分割对象和背景的颜色分布(注意,这里将图像分为被分割对象和背景两部分)。简而言之,就是只需确认前景和背景输入,该算法就可以完成前景和背景的最优分割。

该算法利用图像中纹理(颜色)信息和边界(反差)信息,只要少量的用户交互操作就可得到较好的分割效果,和分水岭算法比较相似,但计算速度比较慢,得到的结果比较精确。若从静态图像中提取前景物体(例如从一个图像剪切到另外一个图像),采用GrabCut算法是最好的选择。


Opencv中的使用

核心API

mask, bgdModel, fgdModel = cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount[, mode])

img:输入图像

mask :蒙版图像,指定哪些区域是背景,前景或可能的背景/前景等.它是由下面的标志,cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或简单地将0,1,2,3传递给图像。

rect :矩形的坐标,包含了前景对象的格式(x,y,w,h)

bdgModel, fgdModel :算法内部使用的数组,只需要创建两个大小为(1,65)的np.float64类型的0数组.

iterCount :算法运行的迭代次数.

mode :cv2.GC_INIT_WITH_RECT或cv2.GC_INIT_WITH_MASK,或者组合起来决定我们是画矩形还是最后的触点.

基于矩形框的分割

1.在图片中定义含有(一个或者多个)物体的矩形

2.矩形外的区域被自动认为是背景

3.对于用户定义的矩形区域,可用背景中的数据来区别它里面的前景和背景区域

4.用高斯混合模型来对背景和前景建模,并将未定义的像素标记为可能的前景或背景

5.图像中欧冠的每一个像素都被看作通过虚拟边与周围像素相连接,而每条边都有一个属于前景或背景的概率,这基于它与周围颜色上的相似性

6.每一个像素(即算法中的节点)会与一个前景或背景节点链接

7.在节点完成链接后,若节点之间的边属于不同终端,则会切断它们之间的边,这就能将图像各部分分割出来

基于Mask的分割

1. 读取一张mask图,并且按照前后景赋像素值。
2. 在API方法中,mode改为GC_INIT_WITH_MASK。

在实际使用时,可用交互式画笔的方式得到mask,或者采用深度学习的分割网络作为mask初始值进行掩膜的生成。


效果图


初始状态


基于矩形框分割

shou
画掩膜二次确认背景

基于掩膜二次分割。

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

第三届启智杯大赛决赛-SEU小分队-算法赛道-柔性智能制造小样本缺陷检测算法

下一篇

第三届启智杯大赛决赛-开发赛道-福东三幺队-物料检测模块软件

评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 2025年5月华中区认证武汉点引导函
    2025-04-28 浏览 0
  • 海康移动机器人实施运维工程师5月培训与认证安排
    2025-04-27 浏览 0
  • 【TC0707001】databus不同级数组处理
    2025-05-14 浏览 0
  • 复合机器人资料分享
    2025-05-26 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器