请教光点检测光源碰撞后id丢失问题
我是用阈值检测光点移动,如果目标间距离大,没什么问题,如果目标出现碰撞或距离过近,会造成id的污染,比如1号和2号靠在一起以后又分开变成了只有一号
if x_chazhi ** 2 + y_chazhi ** 2 < 50:
if len(center) < 3:
center = center + [pre_center[2]]
now_lists.append(center)
cv2.putText(im, "{}".format(center[2]), (int(center[0] - 6), int(center[1] - 4)),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 1)
continue
elif len(center) == 3:
center[2]=pre_center[2]
now_lists.append(center)
cv2.putText(im, "{}".format(center[2]), (int(center[0] - 6), int(center[1] - 4)),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255),
我使用的代码如上,是利用了坐标点与上一帧坐标点间距的平方进行判定,先遍历现在帧的坐标点,每个坐标点再与上一帧的所有坐标点进行比较,按距离进行id继承。这方法一旦碰上目标间碰撞就会出现以下情况
两光点靠近后,阈值分割是一个整体,进行距离判定时,这个点只会判定一次,只有一个id,他们分开以后就会追踪两个一模一样的id。光点运动轨迹还非常不规律不太好写预测点
针对光源追踪中id丢失的问题,可以尝试以下解决方案:
使用更精确的光流估计方法:传统的光流估计方法有对亮度恒定、相邻帧连续、空间一致性等条件的限制,可能不适用于光源追踪中光点运动轨迹不规律的情况。可以尝试使用基于深度学习的光流估计方法,如Spynet网络,来提高光流估计的准确性。
引入更多的特征和信息:除了光流,还可以通过引入其他特征和信息来进行光源的追踪,如光源的颜色、形状、运动方向等。可以使用计算机视觉领域的相关技术,如颜色分割、形状识别、目标跟踪等来提取和利用这些特征和信息来辅助光源追踪,并避免id丢失的问题。
使用轨迹预测算法:针对光点运动轨迹不规律的问题,可以尝试使用轨迹预测算法来推测光点的下一个位置,从而更准确地判断光点的id。常见的轨迹预测算法包括卡尔曼滤波、粒子滤波等。可以根据实际情况选择合适的轨迹预测算法,并结合光流估计和其他特征进行综合判断和预测。
调整阈值和距离判定:为了避免阈值分割将靠近的光点视为一个整体,可以尝试调整阈值的大小或使用不同的分割方法,如基于像素颜色相似性的分割算法。同时,在距离判定时,可以考虑使用更准确的距离度量方法,如欧氏距离、曼哈顿距离等,以更精确地判断光点之间的距离和关系。
以上是一些常见的解决方案,希望对您的问题有所帮助。如有更多具体的代码实现细节或其他问题,还请提供更多详细信息,以便能够提供更具体的解决方案。