问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计

创作时间:
作者:
@小白创作中心

OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计

引用
CSDN
1.
https://blog.csdn.net/csdn_xmj/article/details/136444850

本文主要介绍如何使用单个相机对已知物体进行3D位置估计,并给出实现步骤。

在计算机视觉中,有很多方法可以找到物体的3D位置,例如使用立体摄像头、激光雷达、雷达等。但有时仅用单个摄像头就可以实现3D感知。使用单相机找到3D位置的一个条件是,需要知道图片中需要估计位置的物体的大小。请记住,当对象的方向发生变化时,图片中的对象可能会具有不同的大小。在本文中,为了避免这种需要我们了解对象方向的复杂性,我们将尝试估计球的 3D 位置。因为一个球,无论从任何方向看,都具有相同的大小。

下面是它的工作原理:

  • 我们计算Camera坐标系中的3D世界与图像中的2D像素坐标之间的关系。此步骤称为相机标定,更具体地说是内参计算。
  • 然后我们使用对象分割算法来找到感兴趣的对象。
  • 接下来测量物体的大小。
  • 我们使用步骤 1 中获得的内部参数,使用对象的大小和对象中心的像素位置来估计3D位置。

本文将涵盖理解该算法所需的基本背景知识并解释该算法。

相机坐标系

相机坐标系是一个3D笛卡尔坐标系,原点位于相机的焦点处,Z轴是相机的光轴。这用于了解3D中对象相对于相机位置的位置。

像素坐标系

像素坐标就是图像中每个像素从左上角开始的位置。

相机标定

相机标定是理解相机的内部参数和外部参数的过程。简单地说,外部参数告诉我们世界上给定的3D坐标系与相机位置之间的关系,而内部参数告诉我们物体的3D坐标与相机捕获的图像的2D像素坐标之间的关系。

我们将只关注相机的内部参数。下面的方程将帮助您从数学上理解内在参数。X、Y、Z 值是现实世界中一点的笛卡尔坐标,相机位于原点,Z 轴与相机光轴共线。

对焦参数

fx 和 fy 是 x 轴和 y 轴上的焦点(以像素为单位)。在针孔相机模型中,焦点以距离为单位,并且 x 轴和 y 轴上的焦点相同。但在数码相机中,由于相机传感器的尺寸和镜头引起的畸变等因素,x 轴和 y 轴的焦点并不总是相同。

这是一个理解“像素焦点”概念的方程式, fx = F * W/w,其中参数解释如下:

  • fx 是 x 轴的焦点(以像素为单位)
  • F 是相机的焦点,单位为毫米
  • W 是相机传感器的宽度,单位为毫米
  • w 是图像的宽度(以像素为单位)

内参矩阵通过使用像素值的焦点,将现实世界从距离(毫米)测量单位映射到图像中的像素单位。

主点参数

主点表示两个坐标系(像素坐标和相机坐标系)之间的像素偏移。相机坐标系的原点通常位于图像的中心,而像素坐标系的原点通常位于图像的左上角。因此,cx 的值通常是图像宽度的一半,cy 的值通常是图像高度的一半。

如何得到内参矩阵

OpenCV提供了进行相机标定的工具和步骤。您可以从OpenCV官方文档学习如何校准相机并获取内部参数。

对象分割

我们需要进行对象分割而不仅仅是对象检测,因为我们不仅需要知道图像中对象的位置,还需要知道图像中对象的宽度,以便我们可以将其与对象的真实宽度进行比较。

使用 Masked R-CNN 等神经网络进行对象分割有多种方法。或者对于类似的情况,例如检测彩色球,我们可以对图像进行颜色分割,然后进行形状分析。

尺寸估计

一旦我们从对象分割中知道了属于该对象的像素,我们就可以计算图像中属于该对象的像素的数量。这将为我们提供图像中物体的大小。

计算3D位置

现在我们以查找图像中已知大小的彩球的 3D 位置为例。我们假设球的直径为 8 厘米。

Z = (fx * 0.08) / (d_pix)
X = ((x-cx)*Z)/fx
Y= ((y-cy)*Z)/fy

  • d_pix - 直径(以像素数为单位)
  • x,y - 图像中球的中心
  • 物体在相机坐标系中的X,Y,Z -3D位置
  • cx,cy - 要点。

这种寻找 3D 位置的方法可能并不总是可行,但当满足条件时,它可以为您节省很多成本。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号