首页 文章

如何从深度图像和从Matlab获取的彩色图像生成3D点 Cloud

提问于
浏览
4

我从kinect 1-深度图像获取2个设置数据,大小480 * 640(uint16)来自同一场景的相同大小(480 * 640 * 3单个)的场景2-彩色图像问题是如何合并这些数据在Matlab中用PLY格式生成彩色3D点 Cloud . 我需要说,不幸的是我再也无法访问kinect了,我应该只使用这些数据 .

2 回答

  • 1

    我从来没有试过在matlab中这样做,但我认为这就是你要找的:

    http://es.mathworks.com/help/vision/ref/pcfromkinect.html

    该工具位于Computer Vision System Toolbox™内 .

  • 0

    好问题 . 您应该使用Burrus的本教程 - 基本上您需要使用深度信息将颜色/深度质心转换为第三维 . 请注意,Kinect v1深度和颜色流稍有不匹配,因此也要考虑到这一点 .

    教程可以在这里找到:http://nicolas.burrus.name/index.php/Research/KinectCalibration您也可以使用这位作者的作品:Khoshelham,K . 和Elberink,S . O.(2012) - 室内 Map 绘制应用的Kinect深度数据的准确度和分辨率

    matlab代码应该是这样的:

    % All formulas and values from:
    % Khoshelham, K., & Elberink, S. O. (2012).
    % Accuracy and resolution of Kinect depth data for indoor mapping applications.
    % Sensors (Basel, Switzerland), 12(2), 1437–54. doi:10.3390/s120201437
    
    load('janFrameThousand.mat')
    pc=zeros([size(D) 3]);
    W=size(D,2);
    H=size(D,1);
    f=5.453;
    for indWidth = 1:W
        for indHeight= 1:H
            % copy z value
            pc(indHeight,indWidth,3)=D(indHeight,indWidth);
            % calc x value
            pc(indHeight,indWidth,1)=-(pc(indHeight,indWidth,3)/f)*...
                ((indWidth-W/2)*0.0093+0.063);
            % calc y value
            pc(indHeight,indWidth,2)=-(pc(indHeight,indWidth,3)/f)*...
                ((indHeight-H/2)*0.0093+0.039);
        end
    end
    X=pc(:,:,1);
    % X=X(:);
    Y=pc(:,:,2);
    % Y=Y(:);
    Z=-pc(:,:,3);
    Z(Z==0)=NaN;
    
    Surface=surf(X,Y,Z,'edgecolor','none','facecolor','interp');
    lighting gouraud
    camlight
    % colormap(repmat(winter,20,1))
    axis image
    axis vis3d
    xlabel('X axis')
    ylabel('Y axis')
    zlabel('Z axis')
    

相关问题