我正在构建一个系统,用于检测从托盘中拾取的硬币。此托盘将保存在公共场所。人们会拿起一个或多个硬币,但预计会在一段时间后让它们恢复。
我会通过位于顶部的网络摄像头直播。我将在一天开始时进行校准步骤,捕获用于与实时馈送进行比较的托盘的初始状态。正如您在示例图像中看到的那样,开始时可能会有几个插槽为空。
我需要检测最初有硬币的插槽,但在白天的任何给定时间点都会丢失相同的插槽。
我正在尝试使用OpenCV的几种方法:
SSIM差异:我可以使用SSIM在我的实时图像帧和初始状态之间找到差异。然而,许多槽大于相应的硬币尺寸(例如,前两行)。这可能意味着如果硬币最初被放置在中心位置,但后来被放回触摸其中一个边缘,我们可能会出现误报。
Blob检测:或者,我可以预先提供(或检测)插槽坐标。然后在每个插槽中进行blob检测。如果原始状态中存在斑点,但相机框架中缺少斑点,则表示已拾取硬币。但是,如果硬币和托盘之间的对比度很低,准确的斑点检测可能是一个挑战。
我可能还需要注意由于人们四处移动的阴影而导致的灯光微小变化。
关于可以尝试的替代方法的这些或任何指针的任何想法?我可以从中学到任何类似的实现吗?
非常感谢提前。
编辑:感谢@ I.Newton的建议。对于那些偶然发现这个问题并将从示例实现中受益的人,请查看:https://github.com/kewats/computer-vision-samples/tree/master/image-processing/missing-coins-detection