一、问题描述
当我们在Agisoft PhotoScan生成密集点云并导出,但在MATLAB中读取显示之后却成了一根Z轴直线(如图一所示),无法旋转和其他操作。我们不妨看看点云的xyz信息(如图二所示),发现其xy是经纬度坐标。
![]() |
![]() |
二、原理刨析
我们不妨看看经纬度坐标系是如何表示每个点的坐标,经纬度坐标的基准坐标系是地理坐标系,是一种3D空间坐标系,原点是参考椭球的质心,其坐标的主要组成方式为(大地经度L、大地纬度B、大地高H【地面点沿着椭球面法线到椭球面的垂直距离】)。
由于经纬度的度数不对应某一标准长度,因此无法精确测量距离或面积,也难以在平面地图或计算机屏幕上显示数据。根据下面的所示,当利用MATLAB读取显示经纬度点云数据时,其默认的空间直角坐标系会将B和L(角度表示)视作Y和X(长度表示),这样就会使地面点到参考椭球质心的轴被强行默认空间直角坐标系中的Z轴,从而使XY始终在一条直线上,故呈现一条直线的情况。
三、解决方案
从上面的原理可以看出,无非就是坐标系没有转换的问题,因此有两种解决方案。
方案一:在MATLAB中利用程序将点云坐标进行投影转换为平面坐标
假设【Ai,Bi,Ci】{i~n}为原始点云坐标 ======》(高斯正算) =======》 【Di,Ei,Fi】{i~n}为转换后点云坐标
======》 (利用pointCloud函数构建新点云) ======》 point_data=pointCloud([Di,Ei,Fi]) ========>
pcshow(point_data)显示
注:有部分文章有高斯正算源码(传送门):https://blog.csdn.net/qq_55750626/article/details/127577634?spm=1001.2014.3001.5502 ;
若是不想利用程序解决,可以采用将点云点导出在软件里面转换在导入matlab进行构造点云。
方案二:在Agisoft PhotoScan中导出点云时选择投影坐标系统
当空三处理后的密集点云为经纬度坐标系,其导出点云时默认的坐标系为地理坐标系
在下拉框中选择坐标系,选择地面点所属的带号以及采用UTM进行投影转换的坐标系统
导入到MATLAB读取显示之后的的结果显示