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

参考上图:

像平面是相机的成像平面,也就是感光芯片所在的平面。

光心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点沿相机坐标系的XY轴在待测对像所在平面建立坐标系 { 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)∗dy2+f2 (u−cx)∗dx∗h2+PO22

如上,就可以求出目标点Q在坐标系 { x 1 O 2 y 1 } \{x_1O_2y_1\} {x1O2y1}上Y轴上的坐标

值得注意的是:

  • 以上仅考虑了投影点出现在图像平面第二象限的情况,如果目标点在图像平面的第三/四象限,还需对计算结果符号进行调整。

  • 计算中涉及到除法,还需考虑除以零的情况。

reference

相关推荐
C++ 老炮儿的技术栈15 分钟前
如何利用 OpenCV 将图像显示在对话框窗口上
c语言·c++·人工智能·qt·opencv·计算机视觉·github
大江东去浪淘尽千古风流人物1 小时前
【OpenCV parallel_for_】并行框架源码深度解析:7种后端调度、线程池自旋等待、工作窃取与跨平台CPU Yield指令全拆解
人工智能·opencv·计算机视觉·多线程·parallel_for_·tbb
还是叫明2 小时前
指针式仪表读数(机器视觉、OpenCV)
人工智能·opencv·计算机视觉
Angelina_Jolie2 小时前
CVPR 2026 Highlight | VideoCUPS:利用运动与深度线索,首个无监督视频全景分割框架,性能刷新 SOTA
计算机视觉
LabVIEW开发3 小时前
LabVIEW 做双目视觉测距?精度不输激光雷达!
人工智能·数码相机·计算机视觉·labview·labview知识·labview功能·labview程序
深度学习lover3 小时前
<数据集>yolo月球陨石坑识别<目标检测>
人工智能·yolo·目标检测·计算机视觉·数据集·月球陨石坑识别
qq_526099133 小时前
双目立体视觉相机技术原理、性能影响因素与工业应用研究
数码相机
❀抽抽3 小时前
[特殊字符] 证件照制作+检测一体化API:一次调用,过审无忧!
图像处理·人工智能·计算机视觉
奔袭的算法工程师3 小时前
论文解读--BEV-radar:: bidirectional radar-camera fusion for 3D object detection
人工智能·算法·目标检测·计算机视觉·自动驾驶·信号处理
勤自省3 小时前
OpenCV 30 讲学习总结:从零基础到机器人视觉
人工智能·opencv·计算机视觉·机器人