19.单目测距原理介绍

文章目录


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


根据相机成像的原理,在满足一定约束条件下,理论上是可以根据目标点的像素坐标计算出其对应的深度信息的。

相机成像模型的再次介绍

根据,

1.基本相机模型及参数

2.OpenCV相机标定

这两部分的介绍,我们可以知道相机的基本模型,其原理本质上还是小孔成像,感光芯片记录下成像信息变成图片来实现的。

现在我们来看下OpenCV相机标定的结果,为了简化介绍,畸变系数这里不再重复介绍,可以参考上面两个博客。

相机标定的内参矩阵为:

f x 0. c x 0 f y c y 0 0. 1 \] = \[ 1044.43 0. 959.5 0 1047.87 541.5 0 0. 1 \] \\begin{bmatrix} f_x \& 0. \& c_x \\\\ 0 \& f_y \& c_y \\\\ 0 \& 0. \& 1 \\\\ \\end{bmatrix} = \\begin{bmatrix} 1044.43 \& 0. \& 959.5 \\\\ 0 \& 1047.87 \& 541.5 \\\\ 0 \& 0. \& 1 \\\\ \\end{bmatrix} fx000.fy0.cxcy1 = 1044.43000.1047.870.959.5541.51 相机原始分辨率为:`WxH=1920x1080` 相机的焦距为`2.93mm` 相机的感光芯片上像元大小是 d x × d y d_x\\times d_y dx×dy=`2.8umx2.8um` 根据相机内参的公式: f x = f d x f_x=\\frac{f}{d_x} fx=dxf,在这里其中 d x = 2.8 u m d_x=2.8um dx=2.8um是像元的大小, f = 2.93 m m f=2.93mm f=2.93mm是焦距,因此 f x = 2.93 2.8 × 1 0 − 3 = 1046.43 f_x=\\frac{2.93}{2.8\\times10\^{-3}}=1046.43 fx=2.8×10−32.93=1046.43这和上面标定的结果`1044.43/1047.87`十分接近,这也验证了相机模型的正确性。 ### 单目测距的几何原理 单目测距的几何原理可以借用下面这张图来做介绍: > [reference: > https://zhuanlan.zhihu.com/p/664389534](https://zhuanlan.zhihu.com/p/664389534) > > ![](https://file.jishuzhan.net/article/1796573565718368257/c58ebc24d1ce62c4188161e224da0052.webp) 参考上图: 像平面是相机的成像平面,也就是感光芯片所在的平面。 光心`O`处的坐标系`{C}`是相机所在的坐标系,点 O 1 O_1 O1,点 O O O和点`Z_c`共线,线 O 1 Z c O_1Z_c O1Zc是相机的主轴,相机安装时有一定的俯仰角,因此相机主轴和水平线的夹较为 α \\alpha α 相机的光心 O O O到待测对像所在平面的垂直高度为 O O 2 OO_2 OO2,记为 h h h 在 O 2 O_2 O2点沿相机坐标系的`X`轴`Y`轴在待测对像所在平面建立坐标系 { x 1 O 2 y 1 } \\{x_1O_2y_1\\} {x1O2y1} 待测对像上的目标点为 Q Q Q,其在像平面上的成像点为 Q ′ Q' Q′,记其在坐标系 { x 1 O 2 y 1 } \\{x_1O_2y_1\\} {x1O2y1}中的坐标为 ( x , y ) (x,y) (x,y),在图像上的像素坐标为 ( u , v ) (u,v) (u,v) 目标点`Q`向坐标系 { x 1 O 2 y 1 } \\{x_1O_2y_1\\} {x1O2y1}的`X`轴做垂线,得点`P`,连接`OP`其和像平面的`Y`轴交于点 P ′ P' P′,同时点 P ′ P' P′也是 Q ′ Q' Q′到像平面`Y`轴的垂足。 记 ∠ P ′ O O 1 \\angle{P'OO_1} ∠P′OO1为 β \\beta β,作为其对角 ∠ P O Z c \\angle{POZ_c} ∠POZc也为 β \\beta β,从图上看以看出 γ = α + β \\gamma=\\alpha+\\beta γ=α+β β \\beta β角很容易求出: β = a r c t a n P ′ O 1 O 1 O β = a r c t a n ( c y − v ) ∗ d y f \\beta = arctan{\\frac{P'O_1}{O_1O}} \\\\ \\beta = arctan{\\frac{(c_y -v)\*d_y}{f}} \\\\ β=arctanO1OP′O1β=arctanf(cy−v)∗dy 求得 β \\beta β后可得 γ \\gamma γ,由此 P O 2 PO_2 PO2即目标点在 X X X轴上的距离为: P O 2 = h t a n γ PO_2 = \\frac{h}{tan\\gamma} PO2=tanγh **以上就求出了目标点Q在坐标系 { x 1 O 2 y 1 } \\{x_1O_2y_1\\} {x1O2y1}上`X`轴上的坐标。** 再来看`Y`轴上的坐标: 根据三角形 △ P ′ Q ′ O \\triangle P'Q'O △P′Q′O相似于三角形 △ P Q O \\triangle PQO △PQO,容易求得`PQ`的长度为: P Q = ( u − c x ) ∗ d x ∗ h 2 + P O 2 2 \[ ( c y − v ) ∗ d y \] 2 + f 2 PQ = \\frac{(u-cx)\*d_x \* \\sqrt{h\^2+PO_2\^2}}{\\sqrt{\[(cy-v)\*d_y\]\^2+f\^2}} PQ=\[(cy−v)∗dy\]2+f2 (u−cx)∗dx∗h2+PO22 **如上,就可以求出目标点Q在坐标系 { x 1 O 2 y 1 } \\{x_1O_2y_1\\} {x1O2y1}上`Y`轴上的坐标**。 值得注意的是: * 以上仅考虑了投影点出现在图像平面第二象限的情况,如果目标点在图像平面的第三/四象限,还需对计算结果符号进行调整。 * 计算中涉及到除法,还需考虑除以零的情况。 #### reference > * [1.https://zhuanlan.zhihu.com/p/664389534](https://zhuanlan.zhihu.com/p/664389534) > * [2.https://zhuanlan.zhihu.com/p/24651968](https://zhuanlan.zhihu.com/p/24651968)

相关推荐
__lost3 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
欣然~12 分钟前
借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
人工智能·计算机视觉
豆豆38 分钟前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
白熊1881 小时前
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
人工智能·yolo·计算机视觉
电鱼智能的电小鱼2 小时前
基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
linux·网络·嵌入式硬件·数码相机·无人机·边缘计算
硅谷秋水3 小时前
通过模仿学习实现机器人灵巧操作:综述(上)
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
何大春4 小时前
【视频时刻检索】Text-Video Retrieval via Multi-Modal Hypergraph Networks 论文阅读
论文阅读·深度学习·神经网络·计算机视觉·视觉检测·论文笔记
猿饵块4 小时前
opencv--图像变换
人工智能·opencv·计算机视觉
jndingxin5 小时前
OpenCV 图形API(63)图像结构分析和形状描述符------计算图像中非零像素的边界框函数boundingRect()
人工智能·opencv·计算机视觉
知来者逆5 小时前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr