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

5
我想去除背景并得到鹿作为前景图像。
这是由拍摄照相机捕获的源图像:
这就是我想要得到的。此输出图像可以是二进制图像或RGB。
我已经尝试了许多方法来解决问题,但每次都在特定点失败。所以请先了解我的确切问题。
1. 图像是由拍摄照相机捕获的,该相机是运动检测器。当鹿出现在相机前面时,它会捕捉图像。 2. 场景模式会随着天气变化或昼夜变化而改变。因此,我不能使用帧差异或类似的东西。 3. 分割可能无法正确工作,因为前景(鹿)和背景在许多情况下具有相同的颜色。
如果有任何不清楚的地方,请先问清楚再回答,将不胜感激。谢谢。
3个回答

1

以下是我会做的:

正如评论中提到的,你可以检测鹿并对其进行grabcut以将其从图片中分割出来。

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

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

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

现在,我没有提到那个“亲爱的分类器”可以是什么。您可以使用HOG + SVM(两者都包含在OpenCV中),或者使用运行深度卷积神经网络(deep 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万张图像上进行训练的。如果这些类别包含“dear”,那么您可以直接使用它们。如果没有,您可以使用它们提取特征(在Decaf的情况下为4096维向量),并对正负图像进行分类器训练,以构建“dear分类器”。

现在,一旦您检测到了“dear”,也就是说,您在其周围有一个边界框,您可以应用grabcut:

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

你需要在鹿的身上进行初始涂鸦才能执行grabcut。你可以在边界框的中间取一条水平线,希望它在鹿的躯干上。更复杂的方法是找到鹿的对称轴并将其用作涂鸦,但你需要搜索、研究并实现某种从图像中提取对称轴的方法。
大概就是这样。不是很简单,但问题也是如此。
如果有任何问题,请告诉我。

谢谢@GiLevi。我认为我需要研究和学习所有你上面提到的技术,然后尝试去实现它们。希望能够取得积极的成果。再次感谢。 - Gujjar
这确实是一个复杂的解决方案。如果您愿意,我可以逐步指导您。请发送电子邮件至gil.levi100@gmail.com,我很乐意提供帮助。 - GilLevi
好的,非常感谢您的帮助。我会尽快与您联系。 - Gujjar

0

尝试使用混合高斯模型的OpenCV 背景减除。它们应该足够适应您的场景。当然,最终的性能将取决于具体情况,但值得一试。


是的,但它需要背景模型,而在我的情况下不可用。 - Gujjar

-1

由于您只想将背景与前景分离,我认为您不需要识别鹿。您需要识别场景中的运动物体。您只需要在相当长的时间间隔内分离静态的部分(背景)和非静态的部分:鹿。

有一些算法可以结合同一场景中的多个帧来确定背景,比如这个

您提到了随着天气变化或白天和黑夜的变化考虑不同鹿的照片,场景模式会发生变化。

您可以实现一个解决方案,当检测到运动时,它可以拍摄几张照片,并在一定时间间隔内拍摄。

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


有一些算法可以将多个帧结合起来,请说明算法或提供几个相关链接。 - 2vision2
首先感谢您的回答。我认为您可能无法理解我的问题,因为我说可能只有一两张图像在特定时间被捕获,然后鹿会在一个小时后或晚上回来,那么您就不能使用这种技术。 - Gujjar
同时请记住,相机是自动的,并在检测到运动时自动捕获图像。我已经尝试过对图像进行平均处理,找到背景,然后找到帧差异,但对于我的情况效果不佳。 - Gujjar
Asif,我的意思是:由于这些限制(两个不同时间点的图像),你需要开发一个非常复杂的解决方案。此外,可能这个解决方案会更不稳定、不可靠和更昂贵的支持。换句话说,也许你可以分析一下去除这些限制的可能性,并把你的问题变成更简单的问题来解决。 - Gabriel Archanjo
只需控制相机拍摄,您就能简单地解决这个问题。如果您无法重新定义问题,您需要使用在不同情况下捕获的这些图像构建背景模型,或者真正识别动物/鹿。祝你好运! - Gabriel Archanjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接