intel realsense SR300 深度图像和彩色图像对齐


深度图像和彩色图像对齐

原因:由于RGB图像数据与深度图像数据的空间坐标系是不同的,前者的原点是RGB摄像头,后者的原点是红外摄像头,因此两者会有相应的误差。没对齐之前的结果如下图所示:执行这个 bin/cpp-capture,我用opencv显示的

intel realsense SR300 深度图像和彩色图像对齐_第1张图片intel realsense SR300 深度图像和彩色图像对齐_第2张图片

执行bin/cpp-alignimages 实现图像对齐,如下图所示:

intel realsense SR300 深度图像和彩色图像对齐_第3张图片


对齐的原理:

       深度图上的2D点转换到世界坐标的3D点,世界坐标的3D点再投影到彩色图像上;如下图所示:

  


代码如下:

void alignmentDepthandColor(const Mat depth, const Mat color, const rs::device &dev)
{
    rs::float2 pt_depth, pt_color;
    rs::float3 pt3_depth, pt3_color;
    auto intrinDepth = dev.get_stream_intrinsics(rs::stream::depth);
    auto intrinColor = dev.get_stream_intrinsics(rs::stream::color);
    auto extrinsics = dev.get_extrinsics(rs::stream::depth, rs::stream::color);
    int y=0, x= 0;
    Mat mat = Mat::zeros(color.rows,color.cols,CV_8UC3);  
    for (int row=0; row     {
        for (int col=0; col         {
             pt_depth.x = row;
             pt_depth.y = col;
           //  cout<<"depth 2d: x="<              pt3_depth = intrinDepth.deproject(pt_depth, depth.at(row,col));
            // cout<<"depth 3d: x="<
    imshow("color2", color2);
    imwrite("color.bmp", color2);
    imshow("alignment", mat);
}

效果图:

intel realsense SR300 深度图像和彩色图像对齐_第4张图片intel realsense SR300 深度图像和彩色图像对齐_第5张图片intel realsense SR300 深度图像和彩色图像对齐_第6张图片


备注:

     最后一张图是彩色图与深度图对齐后的图像,对齐图像的大小变了,需要调整成同样大小。


你可能感兴趣的:(intel,realsense)