移除移动物体以从多个图像中获取背景模型
Posted
技术标签:
【中文标题】移除移动物体以从多个图像中获取背景模型【英文标题】:Remove moving objects to get the background model from multiple images 【发布时间】:2014-03-28 13:58:20 【问题描述】:我想在使用固定相机拍摄的多张图像中找到背景。相机检测移动物体(动物)并捕获连续图像。所以我需要通过处理5到10张具有相同背景的捕获图像来找到一个简单的背景模型图像。
有人可以帮帮我吗?
【问题讨论】:
【参考方案1】:你的最终目标是寻找前景吗?你能展示一些图片吗?
如果动物移动得足够快,它们会产生大量强度变化,而背景像素将在大多数帧之间保持密切相关。我不会给你写真正的代码,但会给你一个 openCV 中的伪代码。主要思想是仅对相关像素进行平均:
Mat Iseq[10];// your sequence
Mat result, Iacc=0, Icnt=0; // Iacc and Icnt are float types
loop through your sequence, i=0; i<N-1; i++
matchTemplate(Iseg[i], Iseq[i+1], result, CV_TM_CCOEFF_NORMED);
mask = 1 & (result>0.9); // get correlated part, which is probably background
Iacc += Iseq[i] & mask + Iseq[i+1] & mask; // accumulate background infer
Icnt += 2*mask; // keep count
end of loop;
Mat Ibackground = Iacc.mul(1.0/Icnt); // average background (moving parts fade away)
为了改善结果,您可以降低图像分辨率或应用模糊来增强相关性。例如,您还可以通过腐蚀从小型连接组件中清除每个遮罩。
【讨论】:
是的,我想通过应用帧差法找到前景对象,为此我需要一个简单的背景图像,但我的相机仅在检测到运动时才拍照。另一个问题是背景随着时间的推移而变化(在捕获 10 或 20 之后),所以我需要在运行时找到 BG。你可以在这里看到图片。 link 查看您的图像,我会尝试在实验室空间中转换它们以消除照明变化,甚至更好地切换到灰色渐变。运行运动检测器将有助于找到车站背景。请注意,您可以通过在图像的多个部分运行 matchTemplate 来简单地检测运动的缺失,而不是运动。四叉树可以更好地分割图像。我相信 Maltab 有一个很好的四叉树样本 是的,它很棒,我认为它对我来说会很好用。我不太了解 Matlab 的用法,但让我试试。谢谢@Vlad【参考方案2】:如果您只有 5 张图片,则很难识别背景,并且最复杂的技术可能无法正常工作。一般背景识别方法见http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=280225&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel3%2F1352%2F6939%2F00280225.pdf%3Farnumber%3D280225
【讨论】:
【参考方案3】:如果
每个像素位置在超过一半的帧中显示为背景,并且 像素的颜色在作为背景的帧子集中变化不大,然后有一个非常简单的算法:对于每个像素位置,只取所有帧的中值强度。
怎么会?假设图像是灰度图像(这更容易解释,但该过程也适用于彩色图像——只需分别处理每个颜色分量)。如果某个特定像素在超过一半的帧中显示为背景,那么当您在所有帧中获取该像素的强度并对它们进行排序时,背景色像素必须出现在中间(中值)位置。 (在最坏的情况下,所有背景色像素都会按此顺序被推到最前面或最后面,但即便如此,它们也足以覆盖中途点。)
【讨论】:
好主意,但可能会受到光照或曝光变化的影响。 @Vlad:是的,但问题是“相同的背景”。如果允许这些类型的更改,那么问题就会变得更加困难。 在现实生活中的问题中,如果不是错误的陈述,很少会出现这种情况。事实上,他所说的相机是运动激活的,运动来自动物,这表明光线变化、噪音和自动曝光变化是存在的。话虽如此,有些方法可以调整,有些方法不能,从简单开始是合理的。以上是关于移除移动物体以从多个图像中获取背景模型的主要内容,如果未能解决你的问题,请参考以下文章