• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Matlab
  • 标签: matlab  

资源简介

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


评论

共有 条评论