【发布时间】:2014-01-17 19:41:23
【问题描述】:
我是一个新的 MATLAB 用户,几乎没有编程经验(我有机械工程背景),所以如果这是一个简单的问题,我提前道歉!
我正在尝试将大型点云文件(.pts 文件扩展名)导入 MATLAB 进行处理。我被引导相信该文件包含一个文本标题和 3 列整数数据(x、y 和 z 坐标) - 我设法将文件的第一部分作为文本文件打开,就是这种情况。
我无法将文件直接导入 MATLAB,因为它太大(8.75 亿点)并且一次只能导入 9000000 行,因此我编写了下面的脚本将文件导入(并因此保存)为 9000000x3块,保存为 MATLAB 文件(或其他适当的格式)。
脚本:
filename='pointcloud.pts';
fid = fopen(filename,'r');
frewind(fid);
header=fread(fid,8,'*char');
points=fread(fid,1,'*int32');
pointsinpass=9000000;
numofpasses=(points/pointsinpass)
counter = 1;
while counter <= numofpasses;
clear block;
block=zeros(pointsinpass,3);
for p=1:pointsinpass;
block(p,[1:3])=fread(fid, 1,'float');
end;
indx=counter;
filename=sprintf('block%d',indx);
save (filename), block;
disp('Iteration')
disp(counter)
disp('complete')
counter=counter+1;
end;
fclose(fid);
脚本运行良好,循环 5 次迭代,导入 5 个数据块。然后,当它尝试导入第 6 个块时,我收到以下错误:
Subscripted assignment dimension mismatch.
Error in LiDARread_attempt5 (line 22)
block(p,[1:3])=fread(fid, 1,'float');
我不确定是什么导致了错误,我相信它与fread 命令大小有关,因为我已经尝试了各种值,例如 3,这使得在尺寸不匹配错误发生之前只导入一个块.
如果我错过了一些非常基本的东西,我再次道歉,我对编程技术的理解非常有限,直到几个月前才被介绍。
【问题讨论】:
-
第 6 个块中的数据文件本身可能有错误。为什么不使用调试器? (
dbstop if error)
标签: matlab point-clouds pts lidar