【发布时间】:2015-04-05 14:11:54
【问题描述】:
Python 中有几种用于分割的包和方法。但是,如果我先验地知道某些像素(而不是其他像素)对应于特定对象,我如何使用它来分割其他对象?
在 python 中实现的哪些方法适合这种方法?
谢谢。
【问题讨论】:
标签: python image opencv image-processing image-segmentation
Python 中有几种用于分割的包和方法。但是,如果我先验地知道某些像素(而不是其他像素)对应于特定对象,我如何使用它来分割其他对象?
在 python 中实现的哪些方法适合这种方法?
谢谢。
【问题讨论】:
标签: python image opencv image-processing image-segmentation
您需要了解半自动图像分割。半自动透视中的图像分割意味着您事先知道某些像素属于哪个类别 - 前景或背景。鉴于此先验信息,目标是最小化一个能量函数,该能量函数最好地将其余像素分割成前景和背景。
我所知道的最好的两种方法是 Graph Cuts 和 Random Walks。如果你想研究它们的基础知识,你应该分别阅读 Boykov (Graph Cuts) 和 Grady (Random Walks) 的规范论文:
对于 Graph Cuts,OpenCV 使用 GrabCut 算法,它是原始 Graph Cuts 算法的扩展:http://en.wikipedia.org/wiki/GrabCut。本质上,您在要分割的对象周围环绕一个框,并且使用高斯混合模型对前景和背景进行建模,并且该对象将从该框内的背景中分割出来。此外,您可以在框内添加前景和背景标记,以进一步约束解决方案,以确保获得良好的结果。
查看这个官方 OpenCV 教程了解更多详情:http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html
对于 Random Walks,这是在 scikit-image 库中实现的,这里有一个很棒的教程,介绍如何在他们的官方网站上启动和运行分段:http://scikit-image.org/docs/dev/auto_examples/plot_random_walker_segmentation.html
祝你好运!
【讨论】: