因為,寫FORTRAN/Matlab的人不會想到從一堆雜亂的資料中,挖出自己想要的內容, 可能情願自己打一個簡單清楚的資料檔,或者用記事本、Execl先把資料處理處理,在拿給Fortran/Matlab程式讀取使用。
例如,有一個ENVI軟體產生的header,其內容如下
ENVI description = { Create New File Result [Fri Jul 22 14:32:54 2005]} samples = 5760 lines = 9092 bands = 4 header offset = 0 file type = ENVI Standard data type = 2 interleave = bsq sensor type = Unknown byte order = 0 map info = {UTM, 1.000, 1.000, 231562.584, 2598337.772, 1.0000000000e+000, 1.0000000000e+000, 51, North, WGS-84, units=Meters} wavelength units = Unknown pixel size = {1.00000000e+000, 1.00000000e+000, units=Meters}
上面這個檔案是由ENVI自動產生,其中samples=5760表示影像矩陣的nx大小, lines=9092表示影像矩陣的ny大小,我們該如何讀出這二個值呢?
function envi_header fid=open('envi_image.hdr','r') % 跳過3列資料 tline=fgetl(fid); tline=fgetl(fid); tline=fgetl(fid); % 將資料讀入 aLine 字串變數. tline=fgetl(fid); % 算出等號之後一位的位置 n=strfind(tline,'=')+1; % 從等號之後一位的位置到第最後一個字元讀入nx nx=sscanf(tline(n:end),'%d'); tline=fgetl(fid);% 算出等號之後一位的位置 n=strfind(tline,'=')+1; % 從等號之後一位的位置到第最後一個字元讀入nx ny=sscanf(tline(n:end),'%d');fclose(fid); disp(['nx,ny=' num2str(nx) ', ' num2str(ny)]) % 動態配置矩陣. red=uint8(zeros(nx,ny));green=uint8(zeros(nx,ny));
blue=uint8(zeros(nx,ny)); ......