采集数据:

通过
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);

采集出来的是这样的
demo:kinect获取三D点云并通过MeshLab渲染
不太正常,远处那堵墙成了死黑,而越远应该越白才对。近处也不太正常,笔记本的颜色比桌子还要黑。
后来查了下kinect参数,原来是教室太大了超出了范围。(图片来源见水印):
demo:kinect获取三D点云并通过MeshLab渲染
(确实不如一年前好使了,黑板、笔记本都不太对)

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

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

转化成uint8格式

坐标映射

网上博客一搜一大把,可惜我太沙雕了…
demo:kinect获取三D点云并通过MeshLab渲染
只好将彩色图手动裁一下

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
demo:kinect获取三D点云并通过MeshLab渲染
2、格式:xyzrgb
区分格式设置为space
demo:kinect获取三D点云并通过MeshLab渲染
3、把shading(底纹)设置none,这样色彩清晰
demo:kinect获取三D点云并通过MeshLab渲染

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

在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的矩阵
demo:kinect获取三D点云并通过MeshLab渲染
matlab里这个空间坐标系拖着太反人类了啊

相关文章:

  • 2021-07-04
  • 2021-09-12
  • 2021-12-10
  • 2022-01-16
  • 2021-10-28
  • 2021-10-11
  • 2021-09-20
  • 2022-12-23
猜你喜欢
  • 2021-12-23
  • 2021-08-28
  • 2021-12-17
  • 2022-03-09
  • 2022-12-23
  • 2021-07-24
  • 2022-12-23
相关资源
相似解决方案