【发布时间】:2015-01-18 01:58:55
【问题描述】:
我目前正在研究基于视频监控的入侵系统。为了完成这项任务,我拍摄了场景背景的快照(假设它完全干净,没有人或移动物体)。然后,我比较从(静态)摄像机获得的帧并寻找差异。我必须能够检查任何差异,而不仅仅是人类形状或其他任何东西,所以我无法提取特定的特征。
通常,我有:
我使用的是 OpenCV,所以比较我基本上是这样做的:
cv::Mat bg_frame;
cv::Mat cam_frame;
cv::Mat motion;
cv::absdiff(bg_frame, cam_frame, motion);
cv::threshold(motion, motion, 80, 255, cv::THRESH_BINARY);
cv::erode(motion, motion, cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3)));
结果如下:
如您所见,手臂被剥离(我猜是由于色差冲突),遗憾的是这不是我想要的。
我考虑过使用cv::Canny() 来检测边缘并填充手臂的缺失部分,但遗憾的是(再次),它只解决了少数情况而不是大多数情况下的问题。
我可以使用任何算法或技术来获得准确的差异报告吗?
PS:对不起图片。由于我是新订阅的,我没有足够的声誉。
编辑 我在这里使用灰度图像,但我愿意接受任何解决方案。
【问题讨论】:
-
看看,已经内置了什么(如果效果更好的话),是的。
-
你转换成灰度了吗?如果您不想使用 openCV 类:尝试计算每个通道的差异并将它们组合,尝试 HSV 图像的差异。如果您想使用现有技术,请尝试 ViBe。请记住,即使是光照变化也会是“任何差异,不仅仅是人体形状或其他任何差异”,这对于大多数背景减除方法来说可能是一个问题。
-
一般来说,随着时间的推移构建一个背景模型,使用许多图像,将击败任何一次性方法。另外,Vibe
-
好吧,这里的问题不是建立背景模型,而是更好地找到“差异”(这在灰度图像中很难)。 @ValentinTrinqué 您能否添加原始单张图片,我已经实现了您的代码的多通道版本,但我无权访问原始图片。试图裁剪你的双重图像,但它们看起来有点翻译......
标签: image opencv image-processing computer-vision difference