txt格式的點雲檔案的優點在于可讀性強且較為直覺,其格式上,每個點雲為一個txt檔案,檔案中有n行,表示點雲中含有n個點,每一行含有三個浮點數表示每個點的三維坐标值。現筆者用MATLAB代碼寫了一個代碼,其功能是将目前目錄下的所有ply格式點雲檔案顯示成圖像并生成同名的txt格式點雲檔案。其中,筆者所用的ply格式點雲檔案來源于斯坦福點雲資料集,文末附上斯坦福資料集的下載下傳連結。
%函數功能
%讀取目前目錄下的所有ply格式點雲檔案,顯示圖像,輸出為同名稱的txt格式檔案
path=pwd; %目前所在目錄
file = dir(fullfile(path,'*.ply')); %讀取所有ply格式檔案
filenames = {file.name}';
filelength = size(filenames,1); %ply格式檔案數
for idx = 1 : filelength %批處理
filedir = strcat(path, filenames(idx));
ptcloud=pcread(filenames{idx}); %ply格式檔案用pcread讀取
figure;
pcshow(ptcloud);
xlabel('X');
ylabel('Y');
zlabel('Z');
title(filenames{idx});
Data(:,1)= double(ptcloud.Location(1:5:end,1)); %提取所有點的三維坐标
Data(:,2)= double(ptcloud.Location(1:5:end,2));
Data(:,3)= double(ptcloud.Location(1:5:end,3));
namesplit=strsplit(filenames{idx},'.'); %分割ply檔案的名稱,分成檔案名與ply字尾名
frontname=namesplit{1}; %提取檔案名,舍棄字尾名
% fid=fopen(strcat(frontname,'.txt'),'wt');
eval(['fid=fopen(''',frontname,'.txt'',''wt'');']);
[b1,b2]=size(Data);
for i=1:b1 %将二維數組Data寫入txt格式檔案中
for j=1:b2-1
fprintf(fid,'%.4f\t ',Data(i,j)); %所有坐标資料保留小數點後四位
end
fprintf(fid,'%.4f\n',Data(i,b2));
end
clear Data;
fclose(fid);
end