【问题标题】:OpenCV Background Segmentation/Subtraction From Single ImageOpenCV背景分割/从单个图像中减去
【发布时间】: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 - 感谢您的回复。我正在寻找整个人。我已经在进行特征提取,现在只是想从图像中分离出整个人的身体/头部。

标签: c++ opencv edge-detection background-subtraction


【解决方案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

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

【讨论】:

  • 感谢您的帮助,Froyo!非常感谢。
猜你喜欢
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
相关资源
最近更新 更多