matlab建图库,【Matlab Computer Vision System ToolBox】学习笔记-2-3D立体图创建 | 视差图 | 3D点云图...

本系列博客将介绍Matlab中机器视觉工具箱的应用,部分案例,主要关于点云处理方面,更多内容见Matlab官方文档。如有翻译错误请批评指正!所有代码经自己运行测试通过。

英文原版下载地址

1. Create 3-D Stereo Display -创建3D立体图

>> load('webcamsSceneReconstruction.mat'); //导入双目标定的结果文件

>> I1=imread('sceneReconstructionLeft.jpg'); //导入左右图像

>> I2=imread('sceneReconstructionRight.jpg');

>> [J1,J2]=rectifyStereoImages(I1,I2,stereoParams); //立体矫正

>> A=stereoAnaglyph(J1,J2); //创建立体图

>> figure;

>> imshow(A);

0818b9ca8b590ca3270a3433284dd417.png

2. Reconstruct 3-D Scene from Disparity Map -从视差图中重建3D场景

>> load('webcamsSceneReconstruction.mat');

>> I1=imread('sceneReconstructionLeft.jpg');

>> I2=imread('sceneReconstructionRight.jpg');

>> [J1,J2]=rectifyStereoImages(I1,I2,stereoParams);

>> figure;

>> imshow(cat(3,J1(:,:,1),J2(:,:,2:3)),'InitialMagnification',50); //合并矩阵并显示,效果同上stereoAnaglyph

0818b9ca8b590ca3270a3433284dd417.png

>> disparityMap=disparity(rgb2gray(J1),rgb2gray(J2)); //计算视差

>> figure

>> imshow(disparityMap,[0,64],'InitialMagnification',50); //adjust the display range [0,64]

0818b9ca8b590ca3270a3433284dd417.png

当把上述的 [0,64] 改成 [0,255] 后显示效果如下:

0818b9ca8b590ca3270a3433284dd417.png

从视差图中计算像素在世界坐标系中的位置,并把距离摄像机3.2米到3.7米的区域分割出来。

>> xyzPoints=reconstructScene(disparityMap,stereoParams);

>> Z=xyzPoints(:,:,3);

>> mask=repmat(Z>3200 & Z<3700,[1,1,3]);

>> J1(~mask)=0;

>> imshow(J1,'InitialMagnification',50);

0818b9ca8b590ca3270a3433284dd417.png

3. Read Point Cloud from a PLY File -读入点云数据

>> ptCloud=pcread('teapot.ply');

>> pcshow(ptCloud);

点云是以 ply 结尾的数据格式存储,具体点云数据 ply 见后文。可对点云可视化图进行放大缩小旋转等操作。

0818b9ca8b590ca3270a3433284dd417.png

同时可将3D点云数据写入 PLY 文件。如果显示没有写入权限,则关闭Matlab,用管理员权限打开。

pcwrite(ptCloud,'teapotOut','PLYFormat','binary');

4. Visualize the Difference Between Two Point Clouds -可视化观察两个点云的区别

>> load('livingRoom'); //88个点云数组集

>> pc1=livingRoomData{1};

>> pc2=livingRoomData{2}; // 取前2组点云

>> figure;

>> pcshowpair(pc1,pc2,'VerticalAxis','Y','VerticalAxisDir','Down'); //显示点云

>> title('Difference Between Tow Point Clouds')

>> xlabel('X(m)');

>> ylabel('Y(m)');

>> zlabel('Z(m)');

0818b9ca8b590ca3270a3433284dd417.png

5. View Rotating 3-D Point Cloud

>> pcCloud=pcread('teapot.ply');

>> x=pi/180;

>> R=[cos(x) sin(x) 0 0;-sin(x) cos(x) 0 0;0 0 1 0;0 0 0 1];

>> tform=affine3d(R); //定义旋转矩阵和3D平移

>> lower=min([pcCloud.XLimits pcCloud.YLimits]);

>> upper=max([pcCloud.XLimits pcCloud.YLimits]);

>> xlimits=[lower upper];

>> ylimits=[lower upper];

>> zlimits=pcCloud.ZLimits; //找出xy的最小最大值,防止不被显示

>> player=pcplayer(xlimits,ylimits,zlimits);

>> xlabel(player.Axes,'X(m)');

>> ylabel(player.Axes,'Y(m)');

>> zlabel(player.Axes,'Z(m)');

>> for i=1:360 //以Z轴旋转

ptCloud=pctransform(pcCloud,tform);

view(player,pcCloud);

end

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值