MATLAB点云处理:4点云变换及显示

这次记录一下对点云进行变换和显示的另一个函数pcshowpair

点云变换

如果是刚性变换,一般是齐次变换矩阵,包含旋转和平移两个部分,MATLAB提供了函数rigid3d来构建矩阵

tform = rigid3d
tform = rigid3d(t)
tform = rigid3d(rot,trans)

这里简单说一下这3种构造方法

1. tform = rigid3d
是直接建立一个R=I,t =[0 0 0]的齐次变换矩阵
在这里插入图片描述
2. tform = rigid3d(t)
这里需要我们自己把齐次变换矩阵T作为输入,函数在创建时会判断这个矩阵的数值是否合理,如果不合理是会报错的,必须得是刚性变换

3. tform = rigid3d(rot,trans)
这个应该会是用的最多的构造方法,分别讲R和t作为输入

点云显示

当希望两片点云同时显示出来时候,pcshowpair是一个不错的选择,结合上面的点云变换,这里展示一下结果

clc,clear
rabbit = pcread('rabbit.pcd')
theta = 30;
R = [cosd(theta) sind(theta) 0;
    -sind(theta) cosd(theta) 0;
    0 0 1];
t = [0.05 0.05 0.1];
T = rigid3d(R,t);
new_rabbit = pctransform(rabbit,T);
pcshowpair(rabbit,new_rabbit)

在这里插入图片描述

隧道点云中心线提取一直是计算机视觉领域的一个重要研究方向。在MATLAB中,我们可以使用以下代码来提取隧道点云的中心线。 ```MATLAB % 读取点云数据 ptCloud = pcread('tunnel.pcd'); % 去除地面 groundIdx = segment_ground(ptCloud); groundRemoved = select(ptCloud, find(groundIdx == 0)); % 点云滤波 filteredCloud = pcdenoise(groundRemoved,'NumNeighbors',30); % 点云分割 clusters = pcsegdist(filteredCloud,0.3); % 计算每个簇的中心点 centers = zeros(clusters.Count,3); for i = 1:clusters.Count cluster = select(filteredCloud,clusters.PixelIdxList{i}); centers(i,:) = mean(cluster.Location); end % 将中心点连线形成中心线 connectivityMatrix = zeros(clusters.Count); for i = 1:clusters.Count pt1 = centers(i,:); for j = i+1:clusters.Count pt2 = centers(j,:); dist = norm(pt1-pt2); if dist < 5 connectivityMatrix(i,j) = dist; connectivityMatrix(j,i) = dist; end end end % 应用最短路径算法找到中心线 distMatrix = zeros(size(connectivityMatrix)); distMatrix(connectivityMatrix ~= 0) = 1; [~,path] = dijkstra(distMatrix,1,clusters.Count); centerLine = centers(path,:); % 可视化结果 figure; pcshow(filteredCloud); hold on; plot3(centerLine(:,1), centerLine(:,2), centerLine(:,3), 'r', 'LineWidth', 2); hold off; title('隧道点云中心线提取'); ``` 在这段代码中,我们首先读取隧道点云数据,并进行地面移除和滤波处理。然后,利用点云的距离信息进行分割,找到各个簇的中心点。接着,根据中心点之间的距离构建连接矩阵,应用最短路径算法找到中心线,并将结果进行可视化展示。 需要注意的是,这段代码中的一些参数(如去除地面的阈值、点云滤波的参数等)可能需要根据具体情况进行调整。此外,代码中使用了一些MATLAB内置函数,如`pcread`、`select`、`pcdenoise`等。如果需要运行代码,请确保计算机上已安装相关的MATLAB工具箱。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值