【深度如何正确地转换为点云】

介绍

深度图和点云是两种存储3D测量结果的常见数据形式。深度图保存了场景中的点沿成像光轴Z向的距离分量,而点云图保存了XYZ三个方向的全部信息,两种直接存在一定的转换关系。本文介绍如何将深度图正确的转换为点云。

所需参数

1. 获取相机内参

由于深度图仅保存了Z轴距离,要正确转换为点云,必须需要知道XY方向的信息,这些信息需要通过查询相机内参得到。内参由相机标定获得,而3D相机出厂都是经过标定的,SDK通常都提供了获取相机内参的接口。内参包含相机的主点 c x , c y c_x,c_y cx,cy,焦距 f x , f y f_x,f_y fx,fy,有时还包括相机的图像分辨率 W × H W\times H W×H,以及畸变参数。当无法获得相机内参的时候,事情就比较麻烦了,虽然可以自行对相机进行标定,但获取的内参与相机内部计算深度的内参难免存在差异,导致后续点云转换存在误差。

2. 处理畸变

原理上,双目和单目结构光计算深度需要经过去畸变、极线校正、图片匹配的过程,得到的深度图是不包含畸变的。而ITOF相机,深度图是否有畸变则取决于相机厂商的设置。

如果深度图包含畸变,则需要根据内参中的畸变模型和畸变参数,对畸变进行处理。最常用的畸变模型是Brown模型,畸变参数为表征径向畸变的 k 1 , k 2 , k 3 k_1,k_2,k_3 k1,k2,k3和表征切向畸变的 p 1 , p 2 p_1,p_2 p1,p2,如果是鱼眼镜头,使用的可能是KB模型,畸变参数为 k 1 , k 2 , k 3 , k 4 k_1,k_2,k_3,k_4 k1,k2,k3,k4。两种模型的去畸变方法可以参考博客【相机畸变:Brown-Conrady、Kanala-Brandt畸变模型与迭代去畸变】

3.尺度

最后一步则是要搞清楚深度图的灰度尺度,即深度图中的1个灰度,对于现实世界的多少尺寸。具体的比例系数取决于设备厂商的设置,常见的是1mm/DN,即1数字灰度等于现实世界的1mm。

转换流程

1. 计算归一化平面的坐标 ( x , y ) (x,y) (x,y)

x = ( u − c x ) / f x y = ( v − c y ) / f y x = (u-c_x)/f_x\\y = (v-c_y)/f_y x=(ucx)/fxy=(vcy)/fy其中, u , v u,v u,v分别是像素的水平和竖直方向像素坐标, u ∈ [ 0 , W − 1 ] , v ∈ [ 0 , H − 1 ] u\in[0,W-1],v\in [0,H-1] u[0,W1],v[0,H1],W和H分别为图像宽度和高度。

2. 去畸变

x , y = undistort ( x , y ) x,y = \text{undistort}(x,y) x,y=undistort(x,y)详细参考博客【相机畸变:Brown-Conrady、Kanala-Brandt畸变模型与迭代去畸变】

3. 计算点云坐标 ( X , Y , Z ) (X,Y,Z) (X,Y,Z)

X = x ⋅ Depth ⋅ Scale Y = y ⋅ Depth ⋅ Scale Z = Depth ⋅ Scale X = x\cdot \text{Depth} \cdot \text{Scale}\\Y = y\cdot \text{Depth} \cdot \text{Scale}\\Z = \text{Depth}\cdot\text{Scale} X=xDepthScaleY=yDepthScaleZ=DepthScale其中,Depth为深度,Scale为深度尺度。

  • 28
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值