从相机中查找物体的真实世界坐标
Finding the real world coordinates of an object from a camera
我正在尝试使用 OpenCV 查找从单个相机检测到的对象的坐标。摄像头将安装在无人机上,直接观察地面。
我有:
-来自无人机 GPS 传感器的相机坐标。
-相机高度.
-相机的内在参数。
3D Reconstruction formula
根据这个公式,我需要求出外参来求出真实世界的坐标。我想是使用 OpenCV 的 solvePnP 方法来查找外部参数。据我所知,外部参数与相机位置有关,但我的相机将在无人机上并且位置会发生变化。外部参数是否与内部参数一样恒定?
还有其他方法可以进行此计算吗?
你要做的是所谓的单图。为了从单个图像估计 XY 真实世界坐标,您需要了解以下内容:
- 您相机的 X0、Y0、Z0 真实世界坐标
- 相机的外部方向(俯仰、滚动和偏航)
- 相机的内部方向(焦距、x 和 y 方向的主点、径向和切向畸变参数)
所以您的相机的 XYZ 和外部方向通常存储在图像的 exif 数据中。然而,这确实取决于无人机。有一些很好的 python 模块可用于在图像中提取此信息。我用exifread.
内部方向可能更难获得,因为您需要在相机校准时执行,您可以使用 OpenCV 执行此操作。您应该可以使用 Yunus link 在他的评论中编辑的教程。但是,如果您使用 pix4D 的摄影测量软件,则有一个捷径,您可以使用他们的相机数据库,该数据库存储有关许多不同无人机及其内部方向的信息。它们并不完美,但对于许多用例来说应该没问题,请参阅 link。
当您拥有所有这些参数后,您需要执行以下操作:
- 不扭曲你的图像
- 创建您想知道其真实世界坐标的点的图像坐标,使用未失真的图像。
- 创建沿 X、Y、Z 轴旋转的旋转矩阵,并对它们进行矩阵乘法运算 (RXRYRZ)
- 应用共线性方程
关于 1. 你可以使用 cv2.undistort,link Yunus 提供的也有这方面的教程。
关于 3,我相信 OpenCV 可能可以为您提供这个矩阵,但是为您自己创建函数非常容易并且有助于理解正在发生的事情。参见维基百科:link 对于哪些矩阵使用哪个俯仰角、滚动角、偏航角可能有点令人困惑。这完全取决于您的相机外部坐标系。典型的约定是 pitch 是围绕 x,roll 是围绕 y,yaw 是围绕 z。
关于 4. 共线性方程取决于您创建的旋转矩阵,请参阅:link 术语 Z-Z0 仅表示您尝试为其查找坐标的对象上方的负相对高度。因此,如果您没有无人机的相对高度,则需要知道物体的高度并从物体高度中减去无人机高度(您将得到一个负数)。
希望这对您有所帮助,并为您指明了正确的方向。
我正在尝试使用 OpenCV 查找从单个相机检测到的对象的坐标。摄像头将安装在无人机上,直接观察地面。
我有:
-来自无人机 GPS 传感器的相机坐标。
-相机高度.
-相机的内在参数。
3D Reconstruction formula
根据这个公式,我需要求出外参来求出真实世界的坐标。我想是使用 OpenCV 的 solvePnP 方法来查找外部参数。据我所知,外部参数与相机位置有关,但我的相机将在无人机上并且位置会发生变化。外部参数是否与内部参数一样恒定? 还有其他方法可以进行此计算吗?
你要做的是所谓的单图。为了从单个图像估计 XY 真实世界坐标,您需要了解以下内容:
- 您相机的 X0、Y0、Z0 真实世界坐标
- 相机的外部方向(俯仰、滚动和偏航)
- 相机的内部方向(焦距、x 和 y 方向的主点、径向和切向畸变参数)
所以您的相机的 XYZ 和外部方向通常存储在图像的 exif 数据中。然而,这确实取决于无人机。有一些很好的 python 模块可用于在图像中提取此信息。我用exifread.
内部方向可能更难获得,因为您需要在相机校准时执行,您可以使用 OpenCV 执行此操作。您应该可以使用 Yunus link 在他的评论中编辑的教程。但是,如果您使用 pix4D 的摄影测量软件,则有一个捷径,您可以使用他们的相机数据库,该数据库存储有关许多不同无人机及其内部方向的信息。它们并不完美,但对于许多用例来说应该没问题,请参阅 link。
当您拥有所有这些参数后,您需要执行以下操作:
- 不扭曲你的图像
- 创建您想知道其真实世界坐标的点的图像坐标,使用未失真的图像。
- 创建沿 X、Y、Z 轴旋转的旋转矩阵,并对它们进行矩阵乘法运算 (RXRYRZ)
- 应用共线性方程
关于 1. 你可以使用 cv2.undistort,link Yunus 提供的也有这方面的教程。
关于 3,我相信 OpenCV 可能可以为您提供这个矩阵,但是为您自己创建函数非常容易并且有助于理解正在发生的事情。参见维基百科:link 对于哪些矩阵使用哪个俯仰角、滚动角、偏航角可能有点令人困惑。这完全取决于您的相机外部坐标系。典型的约定是 pitch 是围绕 x,roll 是围绕 y,yaw 是围绕 z。
关于 4. 共线性方程取决于您创建的旋转矩阵,请参阅:link 术语 Z-Z0 仅表示您尝试为其查找坐标的对象上方的负相对高度。因此,如果您没有无人机的相对高度,则需要知道物体的高度并从物体高度中减去无人机高度(您将得到一个负数)。
希望这对您有所帮助,并为您指明了正确的方向。