删除背景并将鹿作为前景?

时间:2014-06-24 12:17:43

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

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

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

enter image description here

enter image description here

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

enter image description here

我参与其中并尝试了许多方法来获得解决方案,但每次在特定时刻都失败了。所以请先了解我的确切问题。

  1. 图像由跟踪相机捕获,相机是运动检测器。当鹿来到相机前拍摄图像时。
  2. 场景模式因天气变化或昼夜等而改变。所以我不能使用帧差或类似的东西。
  3. 分割可能无法正常工作,因为前景(鹿)和背景在许多情况下颜色相同。
  4. 如果有人在我的问题中仍有任何含糊之处,请先请我清楚然后回答,我们将不胜感激。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

这就是我要做的事情:

正如你的问题所评论的那样,你可以检测到亲爱的,然后执行抓取以从图片中对其进行分割。

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

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

看看OpenCV中的一些人脸检测示例,它基本上是相同的(滑动窗口+分类器),其中分类器是哈尔级联。

现在,我没有提到“亲爱的分类器”可以是什么。您可以使用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

你需要在亲爱的初始涂鸦上进行抓取。你可以在边界框的中间取一条水平线,并希望它会在亲爱的躯干上。更精细的方法是找到亲爱的对称轴并将其用作涂鸦,但你必须谷歌,研究工具一些方法从图像中提取对称轴。

就是这样。不是直截了当的,但问题也是如此。

如果您有任何疑问,请与我们联系。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

因为你只想将背景与前景分开,我认为你不需要识别鹿。您需要识别场景中的运动对象。你只需要将重要的时间间隔(背景)中的静态与非静态时间的静态分开:鹿。

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

你提到考虑到不同鹿的照片,场景模式会根据天气变化或日夜变化。

你可以在检测到动作时实现一个解决方案,而不是拍摄一张照片,它可能会花费一些时间间隔。

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