使用OpenCV在杯子上的拐点高度

问题描述 投票:0回答:1

[我想通过旋转并通过这样的图像输入来找到杯子的3D位置(可以旋转杯子以指向任何方向):enter image description here

鉴于我有一堆2D点指定了上图和下图,如下图所示。 (让我们假设这些点是由一个人在杯子周围画线而给出的,所以它不是很准确。可能需要椭圆拟合或SolvePnP才能获得良好的近似值。并且底圆不是一个完整的圆,它只是一个圆的一部分。有时顶部也会被遮挡,所以我们不能依靠它会有一个完整的圆)enter image description here

我还知道顶部和底部圆的物理半径,以及它们之间的距离,方法是使用尺子预先测量它们。

我想找到完整的2个圆,如下图所示(我想我必须先找到杯子的位置及其向上方向,然后才能投射完整的圆):

enter image description here

假设我的最终目标是能够找到最接近的2D顶点和最接近的2D底点,给定杯子侧面的2D点,如下图所示:

enter image description here

一个点也可以在杯子内部,如下所示:enter image description here

让我们将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个回答
0
投票

考虑到精度问题,我认为不应该对锥体进行3D重建。

我将在最精确的顶部轮廓上执行“标准”椭圆拟合,然后在知道垂直轴位置的情况下在底部进行受限的椭圆拟合。减少坐标后,下椭圆可以写成

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

可以用最小二乘法解决。

请注意,要求用户指向底部笔直边缘的端点,再加上最低点,而不是整个曲线,可能会有所帮助。

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

© www.soinside.com 2019 - 2024. All rights reserved.