OpenCV背景分割/从单个图像中减去

Posted

技术标签:

【中文标题】OpenCV背景分割/从单个图像中减去【英文标题】:OpenCV Background Segmentation/Subtraction From Single Image 【发布时间】:2014-09-02 06:38:15 【问题描述】:

我正在寻找一些指导...我有一张护照照片的图片。我想做的是将人和背景分开。然后我会分析背景颜色、图案等。

我对分割进行了一些研究,我发现的大部分内容都使用多个帧。可惜我只有一张相框,没空拍一张没有人的背景照。

我也看过 GrabCut,但我不希望用户必须手动选择图像的背景/前景部分。有没有这样的自动化版本?

我在考虑使用轮廓/边缘(canny?)检测?...

提前谢谢你!

编辑:可在此处找到示例图像集:http://imgur.com/a/PKTDc#0


所以我听从了 Froyo 的建议,到目前为止得到了以下结果:http://imgur.com/Mvwwu9f.png

由于人脸检测矩形,一些边缘被切断,所以当检测到人脸时,我需要增加矩形的大小。

【问题讨论】:

您对图片有什么要求...您要寻找没有背景的整个人或只是脸/手/鼻子等.. ?? 我看到的主要有两种可能性: 1. 让计算机了解一个人是什么。检测此人并将其他所有内容视为背景。我猜这个任务还没有完全解决。 2. 假设前景/背景是什么。图像的主要轮廓(居中和/或最大轮廓)为前景,其余为背景。这个任务可能非常错误。也许您可以结合一些学习机制使用版本 2 的想法? ;) 能否提供一组示例图片? 你在处理什么样的背景。通常 pp 大小的图片为白色或单色,没有任何噪点。如果是这样的话,那就容易多了:) @Rahulgalgali - 感谢您的回复。我正在寻找整个人。我已经在进行特征提取,现在只是想从图像中分离出整个人的身体/头部。 【参考方案1】:

您可以使用 GrabCut 而无需手动输入。您应该使用 Haar Cascades 检测人脸并将边界框传递给 GrabCut。我认为这会奏效。

我在分割前景和背景方面有一些经验,但我也有一个视差图,所以比较容易。我使用超像素并将它们聚集在一起以提取单独的前景和背景。

SLIC 和 SLICO 是最先进的超像素分割算法。以下是该领域所做的一些工作。

https://cvhci.anthropomatik.kit.edu/~baeuml/downloads/Schick2012.pdf

http://www.cs.huji.ac.il/~daphna/papers/Rosenfeld_ICCV2011.pdf

您也可以尝试显着性地图。它们用于从图像中提取显着对象,在您的情况下是您正在寻找的前景。

Global Contrast based salient region detection http://www.slideshare.net/vicente.ordonez/visual-salency-learning-to-detect-salient-objects

【讨论】:

感谢您的帮助,Froyo!非常感谢。

以上是关于OpenCV背景分割/从单个图像中减去的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV- 分水岭算法

[opencv-python]学习-图像分割

如何使用OPENCV从原始图像中减去图像的“色调”

32opencv入门GrabCut & FloodFill图像分割

Opencv中的MeanShift图像分割和视频背景分离(python实现)

OpenCV3入门图像的阈值