kinect深度图与彩图匹配
理论部分
参数说明
- p_rgb,p_ir分别为彩图、深度图的像素坐标
- P_rgb,P_ir分别为彩色摄像头、深度摄像头对应的相机坐标系下的三维点坐标矩阵P=[X,Y,Z]’
- X_rgb,Y_rgb,Z_rgb表示彩色摄像头下三维点坐标值,以此类推深度摄像头
- K_rgb,K_ir分别为彩图、深度图的内参矩阵
- R_rgb,T_rgb为彩图的外参矩阵,同理可以得到深度图的外参矩阵R_ir,T_ir
公式推导
整个过程可以理解为,已知深度图对应的像素点–>(小孔成像原理)相对于深度图的三维点坐标–>(两相机之间的外参)相对于彩图的三维点坐标–>(小孔成像原理)彩图像素点
由小孔成像原理可得
p = K * P
即相对于深度相机三维点坐标
P_ir = K_ir ^(-1)* p_ir
深度相机与彩图相机之间的外参
R_ir2rgb = R_rgb * R_ir^(-1)
T_ir2rgb = T_rgb - R_rgb * R_ir^(-1) * T_ir = T_rgb - R * T_ir
相对于彩图相机三维点坐标
P_rgb = R_ir2rgb * P_ir + T_ir2rgb
对应彩图像素点
p_rgb = K_rgb * P_rgb
最后得到关系式
Z_rgb∗p_rgb=K_rgb∗R_ir2rgb∗K_ir^(-1)∗Z_ir∗p_ir+K_rgb∗T_ir2rgb
总结一下,整个匹配过程就是将彩图像素点附在深度图图之上,从而实现匹配,而匹配的过程涉及三个步骤,第一步是将深度图像素点坐标转换为深度图相机的相机坐标,第二步是将深度图相机的相机坐标转换为彩图相机的相机坐标,第三步把彩图的相机坐标转换为对应的彩图像素坐标,从而找到每一个深度图中像素点对应彩图的像素值,进而做到匹配。
代码部分
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <fstream>
#include <iostream>
#include <sstream>
#include <Eigen/Core>
#include <Eigen/LU>
#include <thread&