資源簡介
matlab讀取并顯示envi標注格式img圖像,支持顯示單波段圖像、多波段圖像,用戶可以根據需要選擇不同波段組合顯示,提供三種不同圖像顯示方法可供學習,另附詳細注釋說明

代碼片段和文件信息
?%freadenvi(‘06newmul01‘)
function?data?=?freadenvi(imgfilename)??%freadenvi(imgfilename)
%本函數讀取img格式,前提是img圖像顯式帶有‘.img‘后綴名
%?if?length(imgfilename)>=4??%freadenvi(‘06newmul01‘)
%?????switch?strcmp(imgfilename(length(imgfilename)-3:end)‘img‘)
%?????????case?0
%?????????????hdrfilename=strcat(imgfilename?‘.hdr‘);
%?????????case?1
%?????????????hdrfilename?=?strcat(imgfilename(1:(length(imgfilename)-4)‘.hdr‘));
%?????end
%?else
%?????hdrfilename=strcat(imgfilename?‘.hdr‘);
%?end
?hdrfilename?=?strcat(imgfilename?‘.hdr‘);
imgfilename?=?strcat(imgfilename‘.img‘);%‘.img‘??dat
%讀取ENVI標準格式圖像文件
%讀取圖像頭文件
????fid?=?fopen(hdrfilename?‘r‘);
????info?=?fread(fid‘char=>char‘);%從二進制文件中讀取數據???fread(fid1‘char=>char‘)
????info?=?deblank(info);
????info=info‘;%默認讀入列向量,須要轉置為行向量才適于顯示
????if??fid?==?-1
????????error(‘Input?header?file?does?not?exist‘);??
????end
????%r?to?display
????fclose(fid);
%查找列數
????a=strfind(info‘samples?=?‘);?????
????b=length(‘samples?=?‘);
????c=strfind(info‘lines‘);
????samples=[];
????for?i=a+b:c-1??%讀取hdr文件中samples的數值,除去換行和空行,所以c-3,或者c-1
????????samples=[samplesinfo(i)];?
????end?
????%samples2?=?strrep(samples?‘?‘?‘‘)???%刪除字符串中間的空格
???samples=str2num(?samples?);
%查找行數
????a=strfind(info‘lines???=?‘);
????b=length(‘lines???=?‘);
????c=strfind(info‘bands‘);
????lines=[];
????for?i=a+b:c-1
????????lines=[linesinfo(i)];
????end
????lines?=?str2num(lines);
%查找波段數
????a=strfind(info‘bands???=?‘);
????b=length(‘bands???=?‘);
????c=strfind(info‘header?offset‘);%對于多波段
????%c=strfind(info‘data?type‘);%對于單多波段;
????bands=[];
????for?i=a+b:c-1
????????bands=[bandsinfo(i)];
????end
???bands=str2num(bands);
%查找數據類型
????a=strfind(info‘data?type?=?‘);
????b=length(‘data?type?=?‘);
????c=strfind(info‘interleave‘);
????datatype=[];
????for?i=a+b:c-1
????????datatype=[datatypeinfo(i)];
????end
????datatype=str2num(datatype);
????precision=[];
????switch?datatype
????????case?1
????????????precision=‘uint8=>uint8‘;?%頭文件中datatype=1對應ENVI中數據類型為Byte,對應MATLAB中數據類型為uint8
????????case?2
????????????precision=‘int16=>int16‘;?%頭文件中datatype=2對應ENVI中數據類型為Integer,對應MATLAB中數據類型為int16
????????case?12
????????????precision=‘uint16=>uint16‘;%頭文件中datatype=12對應ENVI中數據類型為Unsighed?Int,對應MATLAB中數據類型為uint16
????????case?3
????????????precision=‘int32=>int32‘;%頭文件中datatype=3對應ENVI中數據類型為Long?Integer,對應MATLAB中數據類型為int32
????????case?13
????????????precision=‘uint32=>uint32‘;%頭文件中datatype=13對應ENVI中數據類型為Unsighed?Long,對應MATLAB中數據類型為uint32
????????case?4
????????????precision=‘float32=>float32‘;%頭文件中datatype=4對應ENVI中數據類型為Floating?Point,對應MATLAB中數據類型為float32
????????case?5
????????????precision=‘double=>double‘;%頭文件中datatype=5對應ENVI中數據類型為Double?Precision,對應MATLAB中數據類型為double
????????otherwise
????????????error(‘invalid?datatype‘);%pp=‘invalid?datatype‘;%除以上幾種常見數據類型之外的數據類型視為無效的數據類型
????end
%查找數據格式
????a=strfind(info‘interleave?=?‘);
????b=length(‘interleave?=?‘);
????%c=strfin
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5759??2018-10-03?14:50??envi_matlab\freadenvi.m
?????文件???????1944??2018-10-03?14:53??envi_matlab\imgshow.m
?????目錄??????????0??2018-10-03?15:53??envi_matlab
-----------?---------??----------?-----??----
?????????????????7703????????????????????3
評論
共有 條評論