demo:kinect获取三D点云并通过MeshLab渲染

采集数据:

通过
color= getdata(colorVid);
depth= getdata(depthVid);

这两个函数,就可以获得424x512的深度数据和1080x1920的RGB数据

colorVid = videoinput('kinect',1);
depthVid = videoinput('kinect',2);
triggerconfig(depthVid,'manual');
triggerconfig(colorVid,'manual');
depthVid.FramesPerTrigger = 1;
depthVid.TriggerRepeat = inf;
set(getselectedsource(depthVid),'EnableBodyTracking','on');
colorVid.FramesPerTrigger = 1;
colorVid.TriggerRepeat = inf;

start(depthVid);
start(colorVid);
trigger(colorVid);
trigger(depthVid);
color= getdata(colorVid);
depth= getdata(depthVid);
imshow(img2,[0 4096])

stop(colorVid);
stop(depthVid);

采集出来的是这样的
在这里插入图片描述
不太正常,远处那堵墙成了死黑,而越远应该越白才对。近处也不太正常,笔记本的颜色比桌子还要黑。
后来查了下kinect参数,原来是教室太大了超出了范围。(图片来源见水印):
在这里插入图片描述
(确实不如一年前好使了,黑板、笔记本都不太对)

然后
由于深度图是uint16格式,所以要

depth=uint8(double(depth)/4096*255);

转化成uint8格式

坐标映射

网上博客一搜一大把,可惜我太沙雕了…
在这里插入图片描述
只好将彩色图手动裁一下

figure
[color,rect] = imcrop(color);
imshow(color);

再imresize一下应付过这一步去了
毕竟对后边也用不着

输出TXT

得到的图像是2个矩阵,把他们转化[x,y,z,r,g,b]这种,一行一行排下去,输出到txt。

[R,L]=size(depth);
data=zeros(R*L,6);
j=0;
for x=1:R
    for y=1:L
        j=j+1;
        z=double(depth(x,y));%必须的必
        r=double(color(x,y,1));
        g=double(color((x,y,2));
        b=double(color((x,y,3));
        data(j,:)=[x,y,z,r,g,b];
    end
end
save('data.txt','data','-ascii')

运行中有两个注意点
1、必须要double下,虽然data是double格式,x和y也是,但z,rgb都是uint8。matlab会进行格式统一,这样,x和y中大于255的部分全部变成255了(为啥不是zrgb变double?)
2、save的时候注意’-ascii’,否则打开乱码

由于采集中,有许多死黑区域,实际记录时,加了一个if depth(x,y)>0,才记录信息,滤掉无效点。

在MeshLab中绘制

1、图标左起第三个,直接导入txt
在这里插入图片描述
2、格式:xyzrgb
区分格式设置为space
在这里插入图片描述
3、把shading(底纹)设置none,这样色彩清晰
在这里插入图片描述

  • 结果:
    在这里插入图片描述

在matlab中绘制

x=data(:,1);
y=data(:,2);
z=data(:,3);
color(:,1)=data(:,4);
color(:,2)=data(:,5);
color(:,3)=data(:,5);
color=uint8(color);
pcshow([x(:),y(:),z(:)],color);

color是nx3的矩阵
在这里插入图片描述
matlab里这个空间坐标系拖着太反人类了啊

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Azure Kinect是一种先进的深度摄像头设备,能够获取维场景的点云数据。使用Azure Kinect进行点云获取非常简单。首先,我们需要连接Azure Kinect设备到计算机,并确保设备和计算机的驱动程序已经正确安装。接下来,我们可以使用Azure Kinect SDK中的开发工具或编程语言来访问设备。 在编程中,我们可以使用Azure Kinect SDK提供的API,通过编写代码来获取点云。在获取点云之前,我们需要首先打开Azure Kinect设备,并创建一个点云数据存储对象。然后,我们可以通过调用相关的函数或方法来启动Azure Kinect设备的深度图像和颜色图像流,并持续获取数据。 在获取到深度图像和颜色图像之后,我们可以使用这些图像来计算点云数据。通过使用深度图像的像素坐标以及该像素在世界坐标系下的维坐标,可以将深度图像中的每个像素点转换为维空间中的一个点。然后,可以将这些点存储到之前创建的点云数据存储对象中。 在点云获取完成后,我们可以对点云数据进行处理或使用。例如,可以应用算法来对点云数据进行分割、滤波、拟合等操作。然后,可以将这些处理后的点云数据用于维建模、虚拟现实、增强现实以及其他应用领域。 总之,通过使用Azure Kinect设备和相应的开发工具,我们可以相对容易地获取点云数据。这些点云数据可以用于许多不同的应用,为我们提供更丰富和真实的维场景信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值