投影仪+结构光深度相机联合标定实现触控思路"/>
投影仪+结构光深度相机联合标定实现触控思路
概要
近期接到项目是投影仪+结构光深度相机联合标定实现触控,技术难点是实现双结构光相机与投影仪的联合标定,其中触控部分对标定精度要求比较高,先简单写一下处理思路和公式推导。
1. 深度图→相机坐标系
1.1矩阵转换
相机内参矩阵K是:
[[fx 0 cx]
[0 fy cy]
[0 0 1 ]]
其中fx和fy是以像素为单位的焦距。 由于fx和fy以像素为单位,使用相似三角形来获取x和y坐标:
x / z = (x_pixel - cx) / fx
y / z = (y_pixel - cy) / fy
那么
x = (x_pixel - cx)/fx * z
y = (y_pixel - cy)/fy * z
视情况需要乘以-1
1.2图像转化
上图中u0,v0为主点的uv坐标,此处基于像元尺寸dx×dy得到图像坐标系至成像面坐标系转换关系
下面由成像面坐标系(平面xy)转换至相机坐标系(xyz),此处Zc=图像深度值z=λ,作为尺度因子参与后续运算。
综上可得
1.3深度图像转化
深度图像素坐标转相机三维坐标的公式如下:
2. 相机坐标系→投影面(世界)坐标系
2.1投影面
投影仪投影至墙面,模组安装与墙面正上方,角度倾斜较大使墙面在深度图上无法成像,仅地面与投影墙面相交处呈明显边界,即“踢脚线”。
另一方面红外相机离墙稍远,人体手臂等物体碰触墙面的情况下,深度图中的‘手臂’会贴近或越过踢脚线。
算法计算深度图中贴近墙面的手臂并取中心,输出深度图坐标值,坐标转换则将其uvz值转换为投影面坐标系的xy值。
2.2投影面宽w高h
取标准件L/R距踢脚线直线距离为3/4h,
标准件L/R距M的距离=1/4(√(w²+h²))
2.3投影面坐标系
投影面左下方为世界坐标系的坐标原点,投影面z=0,可对应计算相机坐标系→世界坐标系的外参矩阵R&T。
2.4图像坐标→世界坐标
综上可得图像坐标uv与投影面世界坐标系的映射关系:
其中s为K中的倾斜因子,一般取零,具体值可查阅给定的内参矩阵。
将公式简化:
3. 标定
3.1标准件角点提取
提取角点获得PL、PR、PM的深度图坐标xy及深度值z
3.2拟合踢脚线直线
拟合得到直线方程的四参数ABCD,针对左右模组,可分别在深度图中取接近边界的两个点作为标定点。
3.3参数列表
3.3.1内参
参数 | 变量名 | 示例 | 说明 | 备注 |
内参矩阵K | 倾斜因子s可取0 | |||
fx | ||||
fy | ||||
cx | ||||
cy | ||||
像元尺寸 |
3.3.1外参
参数 | 变量名 | 示例 | 说明 | 备注 |
投影面宽w | Proj_w | 5.24 | ||
投影面高h | Proj_h | 2.15 | ||
投影仪横向分辨率 | ProjPix_w | |||
投影仪纵向分辨率 | ProjPix_h | |||
射影变换H | Mat_H | 单应性变换矩阵H,3×3按行排列 | ||
模组夹角 | Ang | -66 | 两模组夹角 | 左侧为基础视角,右侧模组为正数,左侧为负 |
旋转矩阵R | 3x3的单位正交旋转矩阵 | 两相机的相对位姿以及两坐标系转换由RT表示PR=[Rt]PL | ||
平移矩阵T | 3x1的平移矢量 | |||
模组悬挂高度 | ||||
投影面距地高度 | ||||
变量
深度图像 | ||||
3.4方程求解待定参数
针对单个模组,可得到4点的投影面坐标(已知投影面长宽,后续可以设置归一化因子,通过深度值计算得出投影面长宽)和对应的深度图(图像uv)坐标及深度值,可通过求解PnP问题计算Rt矩阵,OpenCV中cv::solvePnP,使用P3P输入4组点,3组求出多个解,第四组确定最优解。
3.5求解H加速计算
对单个模组求取单应性矩阵H=KM=KRt,方便后续坐标转换
计算
4.1深度图坐标输入
输入深度图中识别的触墙物体点Ph坐标及深度值(u,v,,z),即可得到投影面坐标系中的点Pw(xw,yw,zw),xw与yw即为投影面坐标值。
4.2对投影面坐标值转换为投影仪像素坐标
根据投影仪长宽对坐标值归一化,分别乘投影仪横纵方向的分辨率可得到像素坐标。
更多推荐
投影仪+结构光深度相机联合标定实现触控思路
发布评论