【发布时间】:2014-03-28 13:58:20
【问题描述】:
我想在使用固定相机拍摄的多张图像中找到背景。相机检测移动物体(动物)并捕获连续图像。所以我需要通过处理5到10张具有相同背景的捕获图像来找到一个简单的背景模型图像。
有人可以帮帮我吗?
【问题讨论】:
标签: c++ algorithm opencv image-processing computer-vision
我想在使用固定相机拍摄的多张图像中找到背景。相机检测移动物体(动物)并捕获连续图像。所以我需要通过处理5到10张具有相同背景的捕获图像来找到一个简单的背景模型图像。
有人可以帮帮我吗?
【问题讨论】:
标签: c++ algorithm opencv image-processing computer-vision
你的最终目标是寻找前景吗?你能展示一些图片吗?
如果动物移动得足够快,它们会产生大量强度变化,而背景像素将在大多数帧之间保持密切相关。我不会给你写真正的代码,但会给你一个 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)
为了改善结果,您可以降低图像分辨率或应用模糊来增强相关性。例如,您还可以通过腐蚀从小型连接组件中清除每个遮罩。
【讨论】:
如果您只有 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
【讨论】:
如果
然后有一个非常简单的算法:对于每个像素位置,只取所有帧的中值强度。
怎么会?假设图像是灰度图像(这更容易解释,但该过程也适用于彩色图像——只需分别处理每个颜色分量)。如果某个特定像素在超过一半的帧中显示为背景,那么当您在所有帧中获取该像素的强度并对它们进行排序时,背景色像素必须出现在中间(中值)位置。 (在最坏的情况下,所有背景色像素都会按此顺序被推到最前面或最后面,但即便如此,它们也足以覆盖中途点。)
【讨论】: