ENVI 格式遙感圖像頭文件的讀取
%設置函數HDR_Read,返回值爲parameter,參數爲HDRfilename
function parameter =HDR_Read(HDRfilename)
fileID = fopen(HDRfilename, 'r'); %以只讀方式打開.hdr頭文件
%一直讀取頭文件的內容直至文件末尾
while ~feof(fileID)
fileline=fgetl(fileID);
C = cellstr(strsplit(fileline,'= ')); %按"="分割每一行
if(C(1)=="samples ")
samples=str2double(cell2mat(C(2))); %存儲列數samples
end
if(C(1)=="lines ")
lines=str2double(cell2mat(C(2))); %存儲行數lines
end
if(C(1)=="bands ") %存儲波段數bands
bands=str2double(cell2mat(C(2)));
end
if(C(1)=="interleave ") %存儲envi中數據存儲方式
interleave=cell2mat(C(2));
end
if(C(1)=="data type ") %存儲數據類型
datatype=cell2mat(C(2));
end
end
fclose(fileID); %關閉文件的讀取
%定義ENVI中的數據類型格式
data_type = {'uint8' 'int16' 'int32' 'float32' 'float64' 'uint16' 'uint32' 'uint64'};
%將envi中不同的數據格式轉換成matlab中的特定格式
switch datatype
case '1'
datatype = cell2mat(data_type(1)); %灰度範圍0-255
case '2'
datatype = cell2mat(data_type(2)); %16位整數
case '3'
datatype = cell2mat(data_type(3)); %32位整數
case '4'
datatype = cell2mat(data_type(4)); %32位浮點數
case '5'
datatype = cell2mat(data_type(5)); %64位浮點數
case '6'
datatype = cell2mat(data_type(6)); %灰度範圍0-2^16
case '7'
datatype = cell2mat(data_type(7)); %灰度範圍0-2^32
case '8'
datatype = cell2mat(data_type(8)); %灰度範圍0-2^64
end
%將各數據存入返回值參數parameter中
parameter = {samples,lines,bands,interleave,datatype};
end