天天看點

MATLAB 讀取 ply格式點雲檔案并顯示圖像并輸出為txt格式點雲檔案

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