OpenCV特征对到点云

2022-12-01 04:05:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在两个立体图像中有一些SIFT特征,我试着把它们放在3D空间中。我已经找到了三角点,这似乎是我想要的,然而,我有麻烦的论点

triangulatePoints有4个参数,projMatr1和projMatr2是我的问题的起点,projPoints1和projPoints2是我的特征点。OpenCV文档建议使用stereocorrect来查找投影矩阵

StereoConvertive采用固有的相机矩阵(我之前用CalibleCamera计算过)和来自校准的图像大小。以及两个参数R(旋转矩阵)和T(平移向量),这两个参数可以通过立体标定找到

然而,stereoCalibrate需要“对象点”,我很确定我无法计算没有参考的图像,这有点困难

这是从一对特征计算三维位置的最佳方法吗?如果是这样,我如何计算projMatr1和projMatr2没有立体校准


Tags: 图像参数空间矩阵特征校准起点sift立体论点triangulatepointsprojpoints1三角点projmatr1projmatr2
1条回答
网友
1楼 · 发布于 2022-12-01 04:05:41

正如你所说,你没有校准,所以让我们忘记校正。你想要的是点的深度,所以你可以将它们投影到3D中(然后只使用一个相机的固有校准,主要是焦距)

由于您没有校正,因此无法预期准确的结果,因此让我们尽量接近:

深度是焦距乘以基线除以视差,视差和焦距以像素为单位,深度和基线以(推荐)米为单位

为了获得准确的视差,你需要一个校正过的相机和两幅图像中你的特征之间的对应关系。由于没有校准,你没有希望纠正,你可以尝试只使用原始图像代替。相机越平行,效果就越好。如果它们不平行,您将在这里引入一个错误,您的结果将变得不那么准确。如果这变得糟糕,你必须找到一个方法来校准你的相机

但最重要的是,两幅图像中的特征之间需要对应。在两个图像中运行SIFT是不行的。更好的方法是只在一幅图像中运行SIFT,然后为另一幅图像中的每个特征找到相应的像素。有很多方法,我相信OpenCv有一些简单的块匹配内置