【问题标题】:Finding point height on a cup using OpenCV使用 OpenCV 在杯子上查找点高度
【发布时间】: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


    【解决方案1】:

    考虑到准确性问题,我认为不值得对锥体进行 3D 重建。

    我会在顶部轮廓上执行“标准”椭圆拟合,这是最准确的,然后在底部进行约束,知道垂直轴的位置。减少坐标后,底椭圆可以写成

    x²/a² + (y - h)²/b² = 1
    

    可以用最小二乘法解决。

    请注意,要求用户指向底部直边的端点,加上最低点,而不是整个曲线,这可能是有利的。

    求解最近的顶部和底部点是一个纯二维问题(通过给定点和边的交点画线,并找到与椭圆的交点。

    【讨论】:

    • 关于这个问题还有很多要说的。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2016-08-09
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多