【发布时间】:2020-01-13 18:20:18
【问题描述】:
假设我想通过旋转找到一个杯子的 3D 位置,图像输入如下(这个杯子可以旋转指向任何方向):
鉴于我有一堆 2D 点指定顶圆和底圆,如下图所示。 (假设这些点是由在杯子周围画线的人给出的,所以它不会很准确。可能需要椭圆拟合或 SolvePnP 来恢复一个好的近似值。底部的圆圈不是一个完整的圆圈,它只是一个圆圈的一部分。有时顶部也会被遮挡,所以我们不能相信会有一个完整的圆圈)
我也知道上下圆的物理半径,以及它们之间的距离,用尺子预先测量它们。
我想找到完整的 2 圆,如下图所示(我想我需要找到杯子的位置及其向上的方向,然后才能投影完整的圆):
假设我的最终目标是能够找到最近的 2D 顶部和最近的 2D 底部,给定杯子侧面的 2D 点,如下图所示:
让我们将distance(a, b) 定义为以像素为单位计算点a 和点b 的欧式距离的函数。
据此我可以计算出distance(side point, bottom point) / distance(top point, bottom point),它是一个从 0 到 1 的刻度数,如果我将此数字乘以尺子测量的杯子的物理高度,那么我就会知道它有多高点是从杯子底部开始的公制单位。
我可以用什么方法在边上找到对应的顶部和底部点给定点,以便我最终可以找出点到杯子底部的高度?
我正在考虑使用 PnP 来解决这个问题,但我的观点没有与之关联的正确 ID。而且我不想知道杯子的确切旋转方向,我只想知道杯子的向上方向。 我也认为拟合椭圆可能会有所帮助,但可能不是最好的,因为圆圈不完整。 如果您有任何建议,请告诉我如何获得杯底点高。
【问题讨论】:
标签: opencv image-processing computational-geometry perspectivecamera