OpenCV笔记之solvePnP函数和calibrateCamera函数对比
文章目录
- OpenCV笔记之solvePnP函数和calibrateCamera函数对比
- 1.cv::solvePnP
- 2.cv::solvePnP函数的用途和工作原理
- 3.cv::solvePnP背后的数学方程式
- 4.cv::SOLVEPNP_ITERATIVE、cv::SOLVEPNP_EPNP、cv::SOLVEPNP_P3P
- 5.一个固定位置的棋盘格标定板的一张图像就可以使用cv::solvePnP标定处相机的外参吗?
- 6.关于相机坐标系的XYZ方向
- 7.关于世界坐标的原点位置
- 8.cv::calibrateCamera
- 9.cv::calibrateCamera和cv::solvePnP对比
1.cv::solvePnP
2.cv::solvePnP函数的用途和工作原理
3.cv::solvePnP背后的数学方程式
4.cv::SOLVEPNP_ITERATIVE、cv::SOLVEPNP_EPNP、cv::SOLVEPNP_P3P
当使用 cv::solvePnP
函数来解算相机姿态时,您可以选择不同的解算方法,这些方法用于确定物体在相机坐标系中的旋转和平移变换。下面我将详细解释三种常用的解算方法:cv::SOLVEPNP_ITERATIVE
、cv::SOLVEPNP_EPNP
和 cv::SOLVEPNP_P3P
。
-
cv::SOLVEPNP_ITERATIVE
:cv::SOLVEPNP_ITERATIVE
方法是一种迭代求解相机姿态的方法。它基于迭代优化算法,在每一步迭代中,它将计算物体点的投影并与图像上的对应点进行比较,然后调整相机姿态以最小化投影误差。这个方法通常对初始姿态的猜测要求不高,因此适用于各种场景,但可能需要更多的迭代步骤才能收敛到准确的解。 -
cv::SOLVEPNP_EPNP
:cv::SOLVEPNP_EPNP
方法使用 EPnP(Efficient Perspective-n-Point)算法来求解相机姿态。EPnP 是一种快速而精确的方法,特别适用于含有较少物体点(通常为4个)的情况。它要求提供物体点在物体坐标系中的坐标,以及这些点在图像上的投影,然后通过求解非线性方程组来计算相机姿态。由于使用了更少的点,cv::SOLVEPNP_EPNP
可能比其他方法更快且更准确。 -
cv::SOLVEPNP_P3P
:cv::SOLVEPNP_P3P
方法是一种采用 P3P(Perspective-Three-Point)算法的方法。它要求至少提供3对物体点和图像点的对应关系,然后通过求解一个三次方程组来计算相机姿态。由于仅需要3对点,因此这个方法对于标定板等具有三个已知角点的场景非常有效。但是,由于使用了较少的点,可能会导致解的不稳定性。
在选择解算方法时,需要考虑数据的质量、物体的特性以及计算速度等因素。如果您拥有更多的对应点,可能更倾向于使用 cv::SOLVEPNP_ITERATIVE
方法。如果您有少量的点且需要更快的计算速度,可以尝试 cv::SOLVEPNP_EPNP
方法。对于只有三个已知角点的场景,cv::SOLVEPNP_P3P
方法可能是一个不错的选择。
总之,选择合适的解算方法取决于您的具体应用场景和数据特点。您可以根据问题的需求和性能要求来选择最适合的方法。
5.一个固定位置的棋盘格标定板的一张图像就可以使用cv::solvePnP标定处相机的外参吗?
是的,使用一张固定位置的棋盘格标定板图像可以使用 cv::solvePnP
来估计相机的外参。这是一种相机标定的方法,其中你提供了标定板在世界坐标系中的物理坐标,以及在图像中检测到的标定板角点的像素坐标。通过这些信息,cv::solvePnP
可以计算出相机的旋转和平移向量(外参),从而确定相机的姿态和位置。
使用一张图像和固定位置的标定板,首先检测标定板的角点,然后使用 cv::solvePnP
计算相机的外参,包括旋转矩阵和平移向量。通过将旋转向量转换为旋转矩阵,并将其与平移向量组合在一起,你可以得到一个完整的外参矩阵,表示相机在世界坐标系中的姿态和位置。
这种方法适用于在已知的标定板位置和相机内参情况下估计相机的外参。然后,你可以使用估计的外参来将相机拍摄的图像映射到世界坐标系中,或者将世界坐标映射到图像坐标中,以便进行其他操作,比如增强现实、位姿估计等。
6.关于相机坐标系的XYZ方向
在计算机视觉中,通常使用的相机坐标系(Camera Coordinate System)与一般的三维坐标系有所不同。在相机坐标系中,相机本身是位于原点的,其视线方向通常与Z轴平行,而X轴和Y轴则与图像平面的水平和垂直方向相对应。这意味着:
- X轴:指向图像的右侧,与图像平面的水平方向平行。
- Y轴:指向图像的下方,与图像平面的垂直方向平行。
- Z轴:指向相机的观察方向,与视线方向平行。
需要注意的是,相机坐标系通常是针对相机设备本身定义的坐标系,而不同的相机可能有不同的约定。在使用cv::solvePnP
进行相机标定时,你提供的物理坐标点(标定板角点的物理坐标)与相机坐标系之间的关系将用于估计相机的外参(旋转和平移)。因此,确保在标定时使用一致的坐标系约定非常重要。
7.关于世界坐标的原点位置
对于车载传感器标定:世界坐标系一般会选择与车辆坐标系完全重合,即世界坐标系的原点为车辆坐标系的原点——车辆后轴中心
8.cv::calibrateCamera
9.cv::calibrateCamera和cv::solvePnP对比
- 1.cv::solvePnP可以用一张棋盘格的图像进行相机外参标定
- 2.cv::calibrateCamera可以用多张棋盘格的图像进行相机外参标定