我正在开发一个具有计算机视觉的项目(c++ 上的 opencv 2.4)。在这个项目中,我试图检测某些特征以构建周围世界的地图(内部表示)。
我可用的信息是相机姿势(具有 3 个位置和 3 个角度值的 6D 矢量)、校准值(焦距、失真等)和在被跟踪对象上检测到的特征(这些特征基本上是对象的轮廓但这并不重要)
由于相机位姿、特征位置和其他变量会出现误差,我想将对象建模为 3D 概率密度函数(在空间上给定 3D 点上找到“对象”的概率,这是很重要,因为每个轮廓都有一个概率与它是实际对象轮廓而不是噪声轮廓的可能性相关联(请耐心等待))。
示例:如果对象是一个球体,我会检测到一个圆(轮廓)。由于我知道相机姿势,但没有深度信息,因此该对象的内部表示应该是模糊圆柱体(或圆锥体,如果包括相机的视角但不相关)。如果有新信息可用(来自不同位置的新图像),则会检测到新轮廓,并将其自己的模糊圆柱与以前的数据合并。现在我们应该有一个区域,在某些区域找到对象的概率更大,而在其他地方则更弱。当新信息可用时,模型应该收敛到原始对象形状。
我希望这个想法现在很清楚。
该模型应该能够:
- 如果需要,动态增长。
- 在进行新的观察时有效地更新(更新内部的概率,使多次观察到的区域更强,否则更弱)。理想情况下,系统应该能够实时更新。
现在的问题是:我怎样才能以一种可以在其上执行这些任务的方式 来计算地表示这种模糊信息?
任何合适的算法、数据结构、c++ 库或工具都会有所帮助。