Opencv 跨立体视图查找相应对象的快速方法

Opencv 跨立体视图查找相应对象的快速方法,opencv,computer-vision,geometry,computational-geometry,analytical,Opencv,Computer Vision,Geometry,Computational Geometry,Analytical,感谢您花时间阅读本文 我们有固定的立体摄像机对,可以观察到一个封闭的区域。我们知道体积的尺寸,并有内部和外部校准值 对于相机对。目标是能够准确识别多个重复对象的三维位置。 这自然导致了文学中所谓的对应问题。我们需要一种快速的技术来匹配图1中的球a和图2中的球a,以此类推。 目前,我们使用极线几何入口(基本矩阵)的属性以粗略的方式匹配来自不同视图的球,并且在对象稀疏时工作正常, 但是如果物体密集分散,就会产生很多误报。由于图1中的球A可以位于穿过图2的极线上的任何位置,因此会导致不匹配 当多个对象

感谢您花时间阅读本文

我们有固定的立体摄像机对,可以观察到一个封闭的区域。我们知道体积的尺寸,并有内部和外部校准值 对于相机对。目标是能够准确识别多个重复对象的三维位置。 这自然导致了文学中所谓的对应问题。我们需要一种快速的技术来匹配图1中的球a和图2中的球a,以此类推。 目前,我们使用极线几何入口(基本矩阵)的属性以粗略的方式匹配来自不同视图的球,并且在对象稀疏时工作正常, 但是如果物体密集分散,就会产生很多误报。由于图1中的球A可以位于穿过图2的极线上的任何位置,因此会导致不匹配 当多个对象位于该直线上且看起来相似时

有没有办法将其重新建模为三维直线相交问题或其他问题?由于图像1中的球A只能接受3d值的有界限制,是否有方法表示 它在3d中是一条直线吗?然后做一个相交测试,在图2中找到最接近的匹配球

或者有没有办法生成一个3d值的稀疏列表,该列表对应于图像1和2中的每个2d像素网格,并进行相交测试 要在两个摄影机之间查找匹配对象,需要使用这些值中的哪一个

因为对象可以是相同的,OpenCV特征匹配算法(如FLANN、ORB)无法工作

欢迎以公式或代码形式提出任何想法

谢谢! 萨克


对于不同类型的对象,使用绝对差之和很容易找到匹配项。对于类似的对象,这些想法可能会导致发表一篇好论文。无论如何,这里有一个快速算法:

  • 检测第一幅图像中的两个球(使用对象检测方法)
  • 将图像分成包含两个球的两段
  • 对第二个图像也重复步骤1和2
  • 两幅图像中线段的方向应给出两个球的对应关系

  • 试试这个,它应该适用于两个球。

    对于不同类型的物体,使用绝对差之和很容易找到匹配项。对于类似的对象,这些想法可能会导致发表一篇好论文。无论如何,这里有一个快速算法:

  • 检测第一幅图像中的两个球(使用对象检测方法)
  • 将图像分成包含两个球的两段
  • 对第二个图像也重复步骤1和2
  • 两幅图像中线段的方向应给出两个球的对应关系

  • 试试这个,它应该对两个球有效。

    你给自己设定了一个相当困难的任务。因为视图中的一个点可以遮挡另一个点,所以通常甚至不可能计算点的数量。如果每个视图有两个点,但这些点落在另一个视图的同一极线上,则可以计算2到4个点之间的任意位置

    假设要最小化这些点,这看起来就像一个稠密的二分图,每条边表示每个视图中一个点的关联,每条边的权重取自关联每个视图中相应点(顶点)的注册错误。当然,MVC是NP难的,如果你把这个问题当作一般的MVC问题来处理,那么你永远不会比O(n^2)做得更好,因为这就是要检查的边的数量


    您的特定MVC问题可能具有可利用的结构,以执行更有效的近似。特别是,我可能建议在一个视图中计算对极线,按与对极线的角度对其排序,并类似地从对极线对该视图中的点排序。然后,您可以大致并行地迭代两个排序列表,贪婪地将每个点与附近的极线相关联。然后,您可以在另一个视图中执行相同的操作,但只查看该视图中在上一个过程中尚未关联的点。我认为,使用动态规划(特别是如果严格限制注册错误的话),可能会有一种更严格且可证明最优的方法,这种方法不需要第二次通过,但我不能马上画出来。

    你给自己设置了一个相当困难的任务。因为视图中的一个点可以遮挡另一个点,所以通常甚至不可能计算点的数量。如果每个视图有两个点,但这些点落在另一个视图的同一极线上,则可以计算2到4个点之间的任意位置

    假设要最小化这些点,这看起来就像一个稠密的二分图,每条边表示每个视图中一个点的关联,每条边的权重取自关联每个视图中相应点(顶点)的注册错误。当然,MVC是NP难的,如果你把这个问题当作一般的MVC问题来处理,那么你永远不会比O(n^2)做得更好,因为这就是要检查的边的数量

    您的特定MVC问题可能具有可利用的结构,以执行更有效的近似。特别是,我可能建议在一个视图中计算对极线,按与对极线的角度对其排序,并类似地从对极线对该视图中的点排序。然后,您可以大致并行地迭代两个排序列表,贪婪地将每个点与附近的极线相关联。然后,您可以在另一个视图中执行相同的操作,但只查看该视图中在上一个过程中尚未关联的点。我认为,使用动态规划(特别是在严格限制注册错误的情况下)可能会有一种更严格且可证明最优的方法,这种方法不需要第二次通过,但我不能马上画出来。

    谢谢你的建议