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

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已经标定出光平面

第四步:建立射线求出λ

第六步:求三维坐标

相关推荐
Tisfy1 小时前
LeetCode 1288.删除被覆盖区间:排序(非二重循环暴力)
算法·leetcode·题解·排序
阿文的代码库1 小时前
经典算法题剖析:按奇偶排序数组
数据结构·算法
AI小码1 小时前
WAIC 2026前瞻:AI产业进入拼落地的下半场
人工智能·算法·ai·程序员·大模型·编程·智能体
珠海西格电力2 小时前
零碳园区数据应用的具体场景有哪些?
大数据·人工智能·算法·架构·能源
geovindu3 小时前
CSharp: Dijkstra Algorithms
开发语言·后端·算法·c#
学逆向的3 小时前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发3 小时前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法
学究天人3 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷2)
算法·数学建模·动态规划·图论·抽象代数·拓扑学
玛卡巴卡ldf4 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣