MATLAB快速讀取STL檔案
MATLAB快速讀取STL檔案
HPC_ZY
利用MATLAB快速讀取並解析STL檔案。最近需要處理大型STL檔案,使用MATLAB三方stlread僅是讀取解析就花費大量時間。故自行學習並充分利用MATLAB的機制修改了STL解析方式,速度大大提升,在這裡記錄分享。
一、STL檔案格式
binary格式
ascii格式stl
由於目前沒拿到過這種格式的stl,所以暫時不講
二、開原始碼
安裝方法
老樣子,在附加功能中搜尋“Computation of craniofacial symmetry”,看到一個藍白骷髏頭,就是它了。
使用方法
% 讀取
[v,f,n] = stlRead('newdata.stl');
% 顯示
patch('vertices',v,'faces',f,'edgecolor','none',...
'facecolor',[1 0 0],'facelighting','phong')
light
axis equal off
% 儲存
stlWrite('newdata.stl',f,v);
檢視原始碼可以發現,stlRead()
採用的是邊讀取邊解析的方式,MATLAB處理for迴圈效率不高。
三、快速讀取
由於MATLAB擅長處理矩陣運算,所以我們採取“先讀取,再解析”的方法。
binary格式stl
%% 一、以二進位制按位元組讀取資料
fp = fopen(fileName,'rb');
src = fread(fp,'uint8=>uint8');
fclose(fp);
%% 二、提取有效資訊
% 提取資料長度資訊(四位元組無符號整形)
len = typecast(src(81:84),'uint32');
% 提取三角片資訊([48有效位元組+2填充位元組]*len)
data = reshape(src(85:end),[50,len]);
data(end-1:end,:) = [];
% 型別轉換(float*12*len)
dataf = typecast(data(:),'single');
dataf = reshape(dataf,[12,len]);
%% 三、獲取v、f、n
% 獲取v,f,n(注意MATLAB是列優先的,所以必須按下列方式寫)
n = dataf(1:3,:)';
v = reshape(dataf(4:end,:),[3,len*3])';
f = reshape((1:len*3)',[3,len])';
% 去除重複頂點
[v, ~, indexn] = unique(v, 'rows');
f = indexn(f);
注:比如兩個相鄰三角片就有重複的定點,而多數原始STL資料並沒有去除這些重複定點(這也是導致某些STL資料過大的原因之一)
ascii格式stl
由於目前沒拿到過這種格式的stl,所以暫時不講
四、效果對比
fileName = 'test.stl';
tic
% MATLAB三方
[v,f,n] = stlRead(fileName);
toc
tic
% 個人
[v,f,n] = stlfastread(fileName);
toc
因為充分利用的MATLAB對矩陣的處理,提速很明顯。
其他
歡迎小夥伴提供 ascii格式的stl
相關文章
- matlab讀取npy檔案Matlab
- c/c++、matlab讀取資料夾下的檔案C++Matlab
- Golang 快速讀取處理大日誌檔案工具Golang
- 任意檔案讀取
- Java 讀取檔案Java
- go配置檔案讀取Go
- python讀取大檔案Python
- springboot讀取配置檔案Spring Boot
- 用友任意檔案讀取
- viper 讀取配置檔案
- python小白檔案讀取Python
- cocos讀取plist檔案
- python 讀取文字檔案Python
- IOC - 讀取配置檔案
- 前端讀取excel檔案前端Excel
- STL格式檔案用什麼開啟(手機檢視STL檔案工具)
- 讀取檔案流並寫入檔案流
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- java中讀取配置檔案Java
- go–讀取檔案的方式Go
- C#讀取Xml檔案C#XML
- pg從磁碟讀取檔案
- Spring之Property檔案讀取Spring
- 01 讀取模板HTML檔案HTML
- go 讀取.ini配置檔案Go
- 6.1檔案下載、讀取
- 讀取資料夾檔案
- Mysql溯源-任意檔案讀取?MySql
- Java系列:讀取XML檔案JavaXML
- python如何讀取大檔案Python
- 從Matlab到FPGA(Matlab生成coe檔案或mem檔案)MatlabFPGA
- Golang專案中讀取配置檔案Golang
- C#讀取文字檔案和寫文字檔案C#
- spark直接讀取本地檔案系統的檔案Spark
- RM-2 使用matlab進行txt檔案讀寫Matlab
- mybatis讀取properties檔案內容MyBatis
- Android讀取配置檔案的方法Android
- 使用yaml檔案讀取資料YAML