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

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

第四步:建立射线求出λ

第六步:求三维坐标

相关推荐
203号居民1 天前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真1 天前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
地平线开发者1 天前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠1 天前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc
2401_862880821 天前
数据结构 --- 栈
c语言·数据结构·算法
致Great1 天前
Qwen3.8-27B 接入 DSH 全流程实测:写代码、跑长任务,都没问题
算法
Tisfy1 天前
LeetCode 3471.找出最大的几近缺失整数:三种情况判断
算法·leetcode·题解·分类讨论
linux-hzh1 天前
百日算法修炼 · Day 12
算法·深度优先
额额额对了1 天前
数据结构:二叉树
c语言·数据结构·算法
iNeuOS工业互联网1 天前
iNeuOS_Vision_视觉分析,增加SAM3模型对实例分割和目标检测AI自动标注图片样本功能
人工智能·算法·目标检测