如何从静态定位的视频流中可靠地检测滑动门的状态(打开或关闭)
为了更好地处理遮挡,我的想法是将这个问题分成检测是否:
- 第一扇门处于完全打开的位置(1)
- 第一个门处于完全关闭的位置(2)
- 第二扇门处于完全打开的位置(3)
- 第二扇门处于完全关闭的位置(4)
为了解决这些问题中的任何一个,我将应用以下算法,比如说 (1) :
1.1 从相机中拍摄一张照片作为背景图像。
1.2 裁剪它,只保留第一个门完全打开时应该在的部分,这很容易,因为相机是静态的。
1.3 对来自相机的当前图像执行相同操作。
1.4 计算这两个裁剪图像的绝对差异。
1.5 计算该 absdiff 的平均值(可选地除以裁剪部分的表面以对其进行归一化)。
1.6 根据该值确定门是否完全打开(低值表示可能已打开,低值表示可能未打开),例如使用阈值。
对于步骤 1.1-1.4,尤其是更新背景图像,您可以使用不同的背景减法算法。
一旦你可以正确地决定,如果没有太多的遮挡,如果陈述 (1-4) 是真的,你可以,为了处理遮挡,这最有效,假设两个门总是同时处于相同的打开/关闭状态:
5.1 保持每个(1-4)部分的(归一化)绝对差平均值
5.2 使用一些算法来决定门是打开还是关闭
我将以您的最后一张图片为例说明步骤 5.2,假设第一扇门是图片底部的一扇门(我们唯一能看到的门):
“门 2 完全关闭”和“门 2 完全打开”的 absdiff 平均值都很高,因为该人在这两个地方的前面。所以(3)和(4)都被说成是假的(或真取决于你如何实现它),这是不太可能的。
(2) 的 absdiff 平均值较高,但 (1) 的平均值较低。
-> 因此,5.2 的可能算法可以使用 (1) 和 (2) 以及 (3) 和 (4) 的 absdiff 平均值之间的差异作为阈值。
我认为,加上一些去噪技术,就可以完成这项工作。
如果我的解决方案对您来说不清楚,请随时在评论中询问我。
编辑:没有看到帖子的日期,我不知道为什么它在我的提要中出现这么晚,我让这个答案以防它对其他人有用。
我认为跟踪窗户的角落或把手之类的运动会起作用。考虑以下程序: 1.跟踪windwo的角点 2.如果角点的位置变化超过X像素(你确定X),改变状态我建议使用对象跟踪算法。我认为最好的候选点是窗口的角落。对于角点跟踪,我知道的最佳算法是 KLT(OpenCV 实现)和卡尔曼滤波器。我认为以下算法会起作用,并且由于这些算法逐帧更新,它们可以处理光线和障碍物的环境变化。