我想在固定相机拍摄的多个图像中找到背景。摄像机检测运动物体(动物)并捕获连续图像。因此,我需要通过处理5到10个具有相同背景的捕获图像来找到简单的背景模型图像。
有人能帮我一下吗?你的最终目标是寻找前景吗?你能展示一些图片吗?
如果动物移动得足够快,它们将产生很多强度变化,而背景像素将在大多数帧之间保持密切相关。我不会写你真正的代码,但会给你一个伪代码在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)
为了改善结果,您可以降低图像分辨率或应用模糊来增强相关性。例如,您还可以通过腐蚀清洁每个小连接组件的掩膜。
If
- 每个像素位置在超过一半的帧中作为背景出现,并且
- 像素的颜色在作为背景的帧子集中变化不大,
有一个非常简单的算法:对于每个像素位置,取所有帧的中值强度。
如何来吗?假设图像是灰度的(这使其更容易解释,但该过程也适用于彩色图像-只需分别处理每个颜色组件)。如果一个特定的像素在超过一半的帧中作为背景出现,那么当您在所有帧中取该像素的强度并对它们进行排序时,背景颜色的像素必须出现在中间(中间)位置。(在最坏的情况下,所有背景颜色的像素都被按这个顺序推到最前面或最后面,但即使这样,它们的数量也足够覆盖中间点。)
如果你只有5张图片,很难识别背景,最复杂的技术可能不会起作用。有关一般背景识别方法,请参见链接