如何比较相机拍摄的两张图片并判断是否有足够的差异来检测运动?


18

我想将手机用作CCTV系统来控制房屋中的房间,并在有东西移动时显示警报。

现在,我成功完成的工作是每分钟抓一张图片,并通过PHP脚本将其上传到我的服务器。现在,我想比较当前图片和1分钟前的图片,并检测是否有人进入了房间。因此,基本上,我需要比较图片上像素的差异(但还要考虑到云可能只是打个招呼并在一分钟内改变了亮度)

有谁知道如何实现这一目标或阅读一些文档吗?


4
我几年前做了类似的事情。我的技术是将图像分解成20 * 20的网格,找到每个单元格中平均颜色的值(通过获取该单元格中每个像素的平均颜色)并将其存储。对下一张图像进行相同的操作,如果平均颜色之间有足够的差异(我会把容忍度留给您),您可以假设移动。不要让宽容那么细,它会发现在光或阴影传递等微妙的变化

1
这是一篇关于该主题的有趣文章,您可能会找到有用的codeproject.com/KB/audio-video/Motion_Detection.aspx

CHDK还将图像分成网格。 chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD 对于检测运动而不是检测照明变化,我想说很多网格单元的变化不是运动,而只有几个网格单元的变化是运动。
endolith

Answers:


10

在我看来,您正在寻找的是背景减法技术。在嘈杂的图像和不断变化的照明条件下,这可能并非易事。用于此目的的当前技术水平是低秩矩阵表示,但是它不需要两个,而是需要许多(约)个图像。一些重型数学运算如下:将每个图像视为像素向量,将向量组合成矩阵,然后将这个矩阵分解为低秩矩阵和残差。低阶矩阵列是背景,剩余部分是移动的对象。有一些开源的实现,但是仅用于分解本身,而不是完整的图像管道IIRC

这是用于矩阵分解的论文和代码 http://www.ece.rice.edu/~aew2/sparcs.html

这是CS博客的概述,并链接到其他代码:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

其他一些技术的调查:http : //www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf


1
您是否有意制作此CW?
Lorem Ipsum

1
“ CW”是什么意思?
mirror2image 2011年

啊,维基问题。我认为最好引入这种相当新的技术来做实际的事情。如果您不同意,请随时将其删除。另外,其他人可能会对这项技术有更多的经验-我才刚开始使用它。
mirror2image 2011年

CW是社区Wiki问题。这意味着您不会因答案的投票而获得声誉(在这种情况下为4x10 = 40)。有些人是故意这样回答的,但更多的是偶然的。我已为您还原了此信息,以便您获得代表。现在从126开始是181 :)
Lorem Ipsum

5

切记:有阴影(不只是亮度)。

我真的不喜欢詹姆斯·韦伯斯特(James Webster)的想法,因为它基本上是缩小每个维度的分辨率并比较缩小的图像(我也不喜欢阈值-它们是任意的,您必须对其进行测试和调整直到获得良好的价值,第二天由于不同的天气或其他一些环境影响,这些价值可能已过时)

但公平地说,我也没有一个很好的解决方案。我的第一个想法是将每个图像与空房间的参考图像进行比较,并对比较图像进行边缘检测。但这也会检测到阴影。但是我想你在阴影和其他物体之间不能有区别……至少我不知道该怎么做。但是也许您可以在两帧之间的边缘检测之后比较结果,因为阴影大部分在缓慢移动(当汽车经过或云层经过时仍然会有问题)


您想检测突然改变的东西。阴影从一分钟到下一分钟变化不大。不过,太阳的整体亮度会。
endlith 2011年

2
如果有一辆汽车在驶过,或者通过窗户将其自身的阴影投下,或者通过其前灯将其他物体的阴影投下,则阴影将快速移动。
Philipp Wendt

4

“矩阵分解”技术将无法帮助您完成工作!@ mirror2image引用的论文是关于背景减法的,但不是基于“矩阵分解”的。

使用跑步视频检测运动物体(是人类还是车辆)是研究的活跃领域。

作为基本原理,该系统通过对多张图片进行采样并估计传入图像与背景之间的能量差来估计典型的静态背景。如果能量很大,则将像素分类为前景。这样的前景集告诉您系统中是否存在对象的条目。

你的研究论文(还有,如果你想真正实施起来相对简单)的最佳参考是- W4系统发现它这里看看皮卡迪纸这里作为系统中的其他技术的更详细的调查。

有许多挑战适用于该问题:

  1. 噪声的存在产生了很大的歧义性问题。这里的方法是应用有效的时间滤波并考虑噪声的方差以使其不受阈值影响。

  2. 阴影的存在既不会成为前景也不会造成歧义。有些论文对颜色与强度的区别进行建模,以区分阴影与真实的前景。

  3. 背景可能很复杂,例如挥舞着树木或大海等。

  4. 背景可以具有缓慢或突然的照明变化,其中较早的“学习”背景随后适应于新的背景。

引用最多的地标论文之一是“ 壁花算法”,它显示了组合各种此类方案以产生可靠的移动物体检测的最佳方法。


2

我不知道确切的解决方案,但是您应该对图像进行某种哈希处理;从图像中提取的较小数据集,比整个图像具有更好的可比性。

我认为,颜色直方图是一个不错的选择

如果将图像划分为多个区域,并为这些区域制作单独的直方图,则可以确定入侵者的位置/路径。


非常感谢,我将等待其他解决方案,如果我找不到更好的解决方案,将接受您的解决方案。仅供参考,我不想确定入侵者的路径,因为1分钟还不够,但是发送警报非常好。谢谢。

1
注意,某些入侵者可能会在1分钟内完成!尽可能进行频繁检查。如果程序太慢,请降低图像分辨率。

1
是的,事实上,我计划每10秒拍摄一张照片,并且仅在检测到入侵者时才上传照片,或者在没有问题时才上传每分钟。

1

两次求差即差的差异可能会有所帮助..因此,如果在某些区域中像素的双导数大于阈值,则可以将其称为有人进入房间。亮度变化将在整个图像中产生近似恒定的渐变,但是采用Hessian或双导数将很好地指示房间的移动或主要变化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.