b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

计算机的性能分类 Python] OpenCV 中的图像处理 部分 IV (六(6)

电脑杂谈  发布时间:2018-02-11 00:30:37  来源:网络整理

练习

1. OpenCV 自带的示例中有一个交互式分水岭分割程序:watershed.py。

自己玩玩吧。

目标

在本节中我们将要学习:

?? GrabCut 算法原理,使用 GrabCut 算法提取图像的前景

?? 创建一个交互是程序完成前景提取

原理

GrabCut 算法是由微软剑桥研究院的 Carsten_Rother,Vladimir_Kolmogorov和 Andrew_Blake 在文章《GrabCut”: interactive foreground extraction using iterated graph cuts》中共同提出的。此算法在提取前景的操作过程中需要很少的人机交互,结果非常好。

从用户的角度来看它到底是如何工作的呢?开始时用户需要用一个矩形将前景区域框住(前景区域应该完全被包括在矩形框内部)。然后算法进行迭代式分割直达达到最好结果。但是有时分割的结果不够理想,比如把前景当成了背景,或者把背景当成了前景。在这种情况下,就需要用户来进行修改了。用户只需要在不理想的部位画一笔(点一下鼠标)就可以了。计算机的性能分类画一笔就等于在告诉计算机:“嗨,老兄,你把这里弄反了,下次迭代的时候记得改过来呀!”。然后,在下一轮迭代的时候你就会得到一个更好的结果了。

如下图所示。运动员和足球被蓝色矩形包围在一起。其中有我做的几个修正,白色画笔表明这里是前景,黑色画笔表明这里是背景。最后我得到了一个很好的结果。

GrabCut in Action

在整个过程中到底发生了什么呢?

?? 用户输入一个矩形。矩形外的所有区域肯定都是背景(我们在前面已经提到,所有的对象都要包含在矩形框内)。矩形框内的东西是未知的。同样用户确定前景和背景的任何操作都不会被程序改变。

?? 计算机会对我们的输入图像做一个初始化标记。它会标记前景和背景像素。

?? 使用一个高斯混合模型(GMM)对前景和背景建模。

?? 根据我们的输入,GMM 会学习并创建新的像素分布。对那些分类未知的像素(可能是前景也可能是背景),可以根据它们与已知分类(如背景)的像素的关系来进行分类(就像是在做聚类操作)。

?? 这样就会根据像素的分布创建一副图。图中的节点就是像素点。除了像素点做节点之外还有两个节点:Source_node 和 Sink_node。所有的前景像素都和 Source_node 相连。所有的背景像素都和 Sink_node 相连。

?? 将像素连接到 Source_node/end_node 的(边)的权重由它们属于同一类(同是前景或同是背景)的概率来决定。两个像素之间的权重由边的信息或者两个像素的相似性来决定。如果两个像素的颜色有很大的不同,那么它们之间的边的权重就会很小。

?? 使用 mincut 算法对上面得到的图进行分割。它会根据最低成本方程将图分为 Source_node 和 Sink_node。成本方程就是被剪掉的所有边的权重之和。在裁剪之后,所有连接到 Source_node 的像素被认为是前景,所有连接到 Sink_node 的像素被认为是背景。

?? 继续这个过程直到分类收敛。

下图演示了这个过程(Image Courtesy: ):

Simplified Diagram of GrabCut Algorithm

28.1 演示

现在我们进入 OpenCV 中的 grabcut 算法。OpenCV 提供了函数:

cv2.grabCut()。我们来先看看它的参数:

?? img - 输入图像

?? mask-掩模图像,用来确定那些区域是背景,前景,可能是前景/背景等。可以设置为:cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接输入 0,1,2,3 也行。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70909-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...