我有从单个图像数据中提取的 2D 线段,并希望与从其他来源提取的 3D 线段相匹配。为此,首先我想使用共线性方程(我知道外部方向参数)将 3D 线段投影到图像空间。由于现在两条线段都在同一坐标系中,我想找到与该线最匹配的线段。
我正在寻找一种快速且稳健的算法来匹配相应的线段,以便稍后更新我的 3D 线段。
如果有人对此有想法,请提出一些建议。提前致谢。
最佳答案
您正在查看类似于 line segment intersection 的问题.不出所料,它的解决方案可能也很相似。
直接的方法是将每个 2D 片段与每个 3D 片段进行比较,最佳匹配是与实际长度和位置相比预测长度和位置最接近的匹配。实际是二维段。这类似于 O(AB),其中 A 是 2D 线段的数量,B 是 3D 线段的数量。
您可以通过按字典顺序对 2D 段进行排序来稍微加快该方法,然后使用我在这个 question 中询问过的同一种算法。获取所有线段,其 x 值在一定量内到一个或两个线段端点 * 的预期 x 值。在最坏的情况下,您仍然可能遇到 O(AB),但平均时间应该更接近 O(B log A)。虽然,根据您所说的,您是否可以使用此方法尚不清楚,因此本段应更多地视为一个大纲。
比 O(B log A) 或 O(A log B) 更快可能要求这是一个经过充分研究的问题。
- 如果您按字典顺序对 2D 端点进行排序,您可能只需要 1 个端点即可。
关于c++ - 匹配线段 - 稳健且快速的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14194716/