【问题标题】:Remove background and get deer as a fore ground?删除背景并将鹿作为前景?
【发布时间】:2014-08-14 16:54:02
【问题描述】:

我想去除背景并将鹿作为前景图像。

这是我的跟踪相机拍摄的源图像:

这就是我想要的。此输出图像可以是二值图像或 RGB。

我对此进行了研究并尝试了多种方法来获得解决方案,但每次都在特定点失败。所以请先了解我的确切问题。

  1. 图像由跟踪摄像机捕获,摄像机是运动检测器。当鹿出现在相机前时,它会捕捉图像。
  2. 场景模式会根据天气变化或昼夜变化等而变化。所以我不能使用帧差或类似的东西。
  3. 分割可能无法正常工作,因为在许多情况下,前景(鹿)和背景颜色相同。

如果有人对我的问题仍有任何歧义,请先让我澄清然后回答,我们将不胜感激。 提前致谢。

【问题讨论】:

    标签: image matlab opencv image-processing computer-vision


    【解决方案1】:

    我会这样做:

    正如对您问题的评论,您可以检测到亲爱的,然后执行抓取以将其从图片中分割出来。

    为了检测亲爱的,我会将分类器与滑动窗口方法结合起来。这意味着您将拥有一个分类器,它在图像中给出一个补丁(可以是一个大补丁),输出该补丁与亲爱的相似程度的分数。滑动窗口方法意味着您循环窗口大小,然后循环窗口位置。对于图像中窗口的每个位置,您应该在该窗口上应用分类器并获得该窗口“看起来像”亲爱的程度的分数。完成此操作后,将所有分数设置为阈值以获得“最佳窗口”,即与亲爱的最相似的窗口。这背后的原因是,如果我们亲爱的出现在图像中的某个位置,分类器将在所有与实际亲爱的位置接近/重叠的窗口输出高分。我们想将所有这些位置合并到一个位置。这可以通过应用 OpenCV 中的 groupRectangles 函数来完成:

    http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html#grouprectangles

    看看一些来自 OpenCV 的人脸检测示例,它的作用基本相同(滑动窗口 + 分类器),分类器是 Haar 级联。

    现在,我没有提到“亲爱的分类器”可以是什么。您可以使用 HOG+SVM(两者都包含在 OpenCV 中)或使用更强大的方法来运行深度卷积神经网络(深度 CNN)。幸运的是,您不需要训练深度 CNN。您可以将以下软件包与他们的“现成”ImageNet 网络一起使用(它们非常强大,甚至可以在没有进一步培训的情况下识别亲爱的):

    Decaf- 仅可用于研究目的: https://github.com/UCB-ICSI-Vision-Group/decaf-release/

    或 Caffe - 获得 BSD 许可:

    http://caffe.berkeleyvision.org/

    您可以在此处阅读其他软件包: http://deeplearning.net/software_links/

    最常见的是 Theano、Cuda ConvNet 和 OverFeat(但这确实是基于意见的,您应该从我链接到的列表中选择最佳包)。

    “现成的”ImageNet 网络在来自 1000 个类别的大约 1000 万张图像上进行了训练。如果这些类别包含“亲爱的”,那么您可以按原样使用它们。如果没有,您可以使用它们来提取特征(在 Decaf 的情况下作为 4096 维向量)并在正负图像上训练分类器以构建“亲爱的分类器”。

    现在,一旦你检测到亲爱的,这意味着你周围有一个边界框,你可以应用抓取:

    http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html

    您需要在亲爱的上面写上初始涂鸦才能执行抓斗。你可以在边界框的中间画一条水平线,希望它会在亲爱的躯干上。更复杂的方法是找到亲爱的对称轴并将其用作涂鸦,但你必须谷歌,研究实现一些从图像中提取对称轴的方法。

    就是这样。不简单,但问题也是如此。

    如果您有任何问题,请告诉我。

    【讨论】:

    • 谢谢@GiLevi。我觉得我需要一些研究和学习来理解你上面提到的所有这些技术,然后我会尝试实施。希望它会给出+ve的结果。再次感谢。
    • 确实是一个复杂的解决方案。如果你愿意,我可以一步一步指导你。给我发邮件到 gil.levi100@gmail.com,我很乐意提供帮助。
    • 好的,非常感谢您的帮助。我会尽快与您联系。
    【解决方案2】:

    由于您只想将背景与前景分开,我认为您不需要识别鹿。您需要识别场景中运动的物体。您只需将重要时间间隔(背景)内的静态与非静态(鹿)区分开来。

    有些算法会组合来自同一场景的多个帧以确定背景,例如THIS ONE

    您提到考虑到不同鹿的照片,场景模式会随着天气变化或昼夜变化而变化。

    您可以在检测到运动时实施解决方案,而不是拍摄单张照片,而是在一定时间间隔内拍摄几张照片。

    这个间隔必须足够长,才能让鹿处于不同的位置或离开场景,同时又足够短,不会受到场景变化的太大影响。也许您需要处理一些亮度变化,但我认为使用这些帧确定背景并最终在“运动帧”中分割鹿是可行的。

    【讨论】:

    • “有组合多个帧的算法” - 请说明算法或给出几个链接。
    • 首先感谢您的回答。我想你无法理解我的问题,正如我所说的,可能只是在特定时间拍摄的一两张图像,然后鹿在一小时后回来,或者可能是在深夜,那么你就不能使用这种技术。
    • 还记得相机是自动的,当检测到运动时会自动捕捉图像。我已经尝试平均图像并找到背景,然后找到帧差异,但它不适用于我的情况。
    • Asif,我想说的是:由于这些限制(两个图像的时间完全不同),您将需要开发一个非常复杂的解决方案。此外,这种解决方案可能不太稳定和可靠,而且支持成本更高。换句话说,也许您可​​以分析消除这些限制的可能性,并将您的问题转化为更容易解决的问题。
    • 只需控制相机拍摄,您将拥有一切,以简单的方式解决这个问题。如果您无法重新定义您的问题,您将需要使用在不同情况下捕获的这些图像构建背景模型或真正识别动物/鹿。祝你好运!
    【解决方案3】:

    使用混合高斯模型尝试 OpenCV Background Substraction。它们应该足以适应您的场景。当然,最终的表现将取决于场景,但值得一试。

    【讨论】:

    • 是的,但它需要背景模型,这在我的情况下不可用。
    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2011-12-02
    • 2021-07-29
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多