我的问题是我现在似乎无法可靠地检测到更改,我当前的管道是这样的: 减去两张图片 - >直方图均衡差异图像 - >侵蚀和扩张差异图像以消除微小变化 - >制作二进制副本并进行距离变换 - >获得最大的斑点(对应于DT和洪水填充后的最高值) - >再次重复,直到DT返回一个小到足以忽略变化的值。
我在OpenCV和C ++中对所有这些进行编码。但我的洪水填充似乎总是要么不填充blob,因此大多数情况下我只是检测到一个变化。我也试过使用cv::inpaint
,但这也没有帮助。所以我的问题是;我只是使用错误的方法或以某种方式图灵可以使变化检测更可靠。如果是前者,人们是否可以在合理的时间内建议替代路线,最好是C ++ / Python和/或OpenCV中的可编码路径?
感谢
答案 0 :(得分:3)
可以独立解决在电路板上修复和检测部件移动的问题,假设一个人不移动电路板同时也移动电路板。
关于我如何处理它的一些想法:
检测电路板的方向
您必须能够处理正在旋转的板,并且只要保持一定的角度就可以移动,让您看到碎片。如果板上有东西可以轻松识别(例如每个角落上的标记),这将有所帮助,如果你失去了方向(例如有人将棋盘完全移开相机),你可以很容易地找到它。
为了跟踪电路板,您需要在3D空间中对相机相对于电路板的位置进行建模。这与确定相机在固定板周围移动的位置相同。 Egomotion的问题。解决之后,您可以进入下一阶段,即检测移动和跟踪对象。
检测件的移动
这可能是问题的简单部分。在视频中有很多用于对象检测的算法。我只想补充一点,你可以使用“关键”帧。我的意思是识别那些在单次移动之前和之后只能看到电路板的帧。例如你没有看到手移动它遮挡碎片等。一旦你有前/后框架,你就可以弄清楚它移动了什么以及它相对于棋盘的位置。
如果您假设连续性(即,您已经跟踪了自板的初始布置以来所有的移动,这是众所周知的),您可能无法识别每个部件的形状。