激光三角 光平面标定之后计算深度图

到 LightPlanePose 求出来以后,整个标定已经结束了。

后面的 apply_sheet_of_light_calibration() 干的事情,本质上就是一句话:

对图像中的每一个激光亚像素点,求"相机射线"与"激光平面"的交点。交点的三维坐标就是深度。

其中

复制代码
Camera
   │
   │
   │   射线(ray)
   │
   ▼
交点(X,Y,Z)

而

复制代码
激光平面

已经知道:

复制代码
Ax+By+Cz+D=0

所以

深度 = 射线和平面的交点。

一、射线理解

这个问题其实是整个单目视觉几何的起点。

只要你把射线方程推出来,那么后面的

像素 → 射线 → 光平面 → 三维点

整个 HALCON 光平面标定流程就全部连起来了。

针孔相机模型

为什么一个像素不是一个三维点?

例如图像中 (u,v)

实际上只能说明

光线经过了这个像素。

不能说明距离。

一个像素对应的是一整条光线。

不是一个点。

把像素变成相机坐标

方向向量

为什么HALCON写成

二维 已知 起点 (x0​,y0​)

方向 (a,b)

直线

x=x0+λa

y=y0+λb

三维只是多一个坐标

HALCON里面这个 r 怎么求?

像素(u,v)

↓

去畸变

↓

乘 得到

如果光平面是在世界坐标下,

还需要

二、深度计算

1、图像输入

2 提取激光中心(Steger)

HALCON内部第一件事就是:

复制代码
lines_gauss()

或者

复制代码
compute_3d_coordinates_of_light_line()

里面调用Steger。于是得到

cpp 复制代码
(u,v)

(210.34 , 101.26)

(211.30 ,101.28)

(212.27 ,101.31)

......

全部都是亚像素

3 每个像素反投影成射线

利用相机内参 K 然后对每个点 P=

反投影出 ->

实际上

cpp 复制代码
一个像素
↓
一条射线

射线

而且上面我们已经 LightPlanePose

带入

解 λ

4、代回射线

反解出三维点

这个就是单个点的位置和深度

三、案例计算

计算流程

像素(u,v)

│

▼

去畸变

│

▼

K⁻¹

│

▼

得到射线方向 r

│

▼

LightPlanePose

│

▼

射线和平面求交

│

▼

三维点(X,Y,Z)

已知条件

第一步:图像中检测到一个激光中心

Steger算法得到 (u,v)=(760,520)

第二步:去内参得射线方向

第三步:HALCON已经标定出光平面

第四步:建立射线求出λ

第六步:求三维坐标

相关推荐
尹玉玺22 分钟前
从原子残片到天道公理:以德谟克利特思想全貌,重新定界西方唯物认知的历史层级与边界
人工智能·算法·架构
青少儿编程课堂22 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:差分数组与区间修改实战解析
c++·python·算法·bfs·信息学竞赛
重生之小比特35 分钟前
【算法拾光】二分查找|二分查找 + 再排序数组中查找元素的第一个和最后一个位置
算法·leetcode·职场和发展
零基础1231 小时前
基于模型的强化学习与不基于模型的强化学习:核心区别与实战选择
python·算法
罗西的思考12 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer12 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
高晶14 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy14 小时前
大数计算思路
算法
高晶14 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗14 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode