数字图像处理:实验七 遥感图像读取

实验七 遥感图像读取

一、实验目的

  1. 熟悉MATLAB中遥感图像读写的格式;
  2. 掌握多波段遥感图像的读取与存储;
  3. 掌握多波段遥感图像中单波段、不同波段的组合显示。

二、实验仪器及设备

计算机、Matlab图像处理软件、Landsat8遥感图像

三、实验基础

1.实验遥感图像简介

2013年2月11日Landsat8卫星成功发射,设计寿命为五年,星上携带两个主要设备,陆地成像仪和热红外传感器。陆地成像仪共11个波段,其中可见光,近红外,短波红外波段空间分辨率为30米,热红外波段空间分辨率为100米,全色波段分辨率为15米,成像宽幅185kmx185km。陆地成像仪包括ETEM+传感器的所有波段,但为了避免大气吸收特征,对波段进行了重新调整,比较大的调整是band5,排除了0.825um处水汽吸收特征,全做波段band8范围较窄,可以在全色图像上更好地区分植被和无植被特征,此外还增强了两个波段蓝色波段,主要应用于海岸带观测短波红外波段。包括水汽强吸收特征,可用于云检测,近红外和短波红外波段与modest对应的波段接近。

2.相关函数
MATLAB中用于多波段图像读写的函数包括multibandread和multibandwtite。

四、实验内容及步骤

  1. 遥感图像头文件读取
clc;clear;
hdrname='D:\Remote_sensing\ENVI实验数据\ENVI_shiyuan_dt\shiyan\LC81230322013276LGN00_MTL_shiyan.hdr';
 fid=fopen(hdrname,'r');
 info=fread(fid,'char=>char');
 info=info';%转置为行向量
 fprintf(info);%界面输出打印显示
 fclose(fid);
>> rs_hdr
ENVI
description = {
    
    
 Calibrated Radiance from LC81230322013276LGN00_MTL_MultiSpectral}
samples = 7771
lines   = 7901
bands   = 7
data type = 4
interleave = bil
file type = ENVI Standard
header offset = 0
byte order = 0
map info = {
    
    UTM, 1.000, 1.000, 358485.000, 4582815.000, 3.000000e+001, 3.000000e+001, 50, North, WGS-84, units=Meters}
coordinate system string = {
    
    PROJCS["WGS_1984_UTM_Zone_50N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",117.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]}
default bands = {
    
    4,3,2}
band names = {
    
    
 Coastal aerosol, Blue, Green, Red, Near Infrared (NIR), SWIR 1, SWIR 2}
wavelength = {
    
    
 0.443000, 0.482600, 0.561300, 0.654600, 0.864600, 1.609000, 2.201000}
fwhm = {
    
    
 0.016000, 0.060100, 0.057400, 0.037500, 0.028200, 0.084700, 0.186700}
wavelength units = Micrometers
data ignore value = 0.00000000e+000
sun azimuth = 156.793278

sun elevation = 43.279056
cloud cover = 6.400000
earth sun distance = 1.000646
sensor type = Landsat OLI
acquisition time = 2013-10-03T02:55:24.3050919Z
calibration scale factor = 0.100000
data units = W m^-2 sr^-1 um^-1
image quality = 9
  1. 遥感图像基本信息读取
%读取列数、行数、波段数、数据类型
 %列数
 ac=strfind(info,'samples = ');
 bc=length('samples = ');
 cc=strfind(info,'lines   ');
 samples=[];
 for i=ac+bc:cc-1
     samples=[samples,info(i)];
 end
 samples=str2num(samples);
 %行数
 ar=strfind(info,'lines   = ');
 br=length('lines   = ');
 cr=strfind(info,'bands   ');
 lines=[];
 for i=ar+br:cr-1
     lines=[lines,info(i)];
 end
 lines=str2num(lines);
 %波段数
 ab=strfind(info,'bands   = ');
 bb=length('bands   = ');
 cb=strfind(info,'data type ');
bands=[];
 for i=ab+bb:cb-1
     bands=[bands,info(i)];
 end
 bands=str2num(bands);
 %数据类型
 ab=strfind(info,'data type = ');
 bb=length('data type = ');
 cb=strfind(info,'interleave');
 datatype=[];
  for i=ab+bb:cb-1
     datatype=[datatype,info(i)];
 end
 datatype=str2num(datatype);
 precision=[];
 switch datatype
     case 1
          precision='unit8=>unit8';
     case 2
          precision='int16=>int16';
     case 12
          precision='unit16=>unit16';
     case 3
          precision='int32=>int32';
      case 13
          precision='unit32=>unit32';  
      case 4
          precision='float32=>float32';  
     case 5
          precision='double=>double'; 
 end
%数据格式
 at=strfind(info,'interleave = ');
 bt=length('interleave = ');
 ct=strfind(info,'sensor type ');
interleave=[];
 for i=at+bt:ct-1
     interleave=[interleave,info(i)];
 end
interleave=strtrim(interleave);
fprintf('Lines=%i\nSamples=%i\nDataType=%s\n',lines,samples,interleave);
运行结果:
Lines=589
Samples=766
DataType=bsq
  1. 遥感图像数据读取与显示
    遥感图像大多数具有多波段,MATLAB中用于多波段图像读写的函数包括multibandread和multibandwtite。
%读取图像数据
imgfilename='F:\数字图像处理\Landsat8_image.dat';
fid=fopen(imgfilename,'r');
data=multibandread(imgfilename,[lines,samples,7],precision,0,'bsq','ieee-le');
data=double(data);
%数值转换为0-255的整型用于显示
data_unit8=data;
for k=1:bands
    min_val=min(data(:,:,k));
    max_val=max(data(:,:,k));
    for i=1:lines
        for j=1:samples
            data_unit8(i,j,k)=uint8((data_unit8(i,j,k)-min_val)/(max_val-min_val)*255);
        end
    end
end
%单波段遥感图像显示
%数值转为0-255的整型用于显示
data_show=data;
for k=1:bands
    min_val=min(data(:,:,k));
    max_val=max(data(:,:,k));
    for i=1:lines
        for j=1:samples
            data_show(i,j,k)=uint8((data_show(i,j,k)-min_val)/(max_val-min_val)*255);
        end
    end
end
 %单波段遥感图像显示
 im1=data_show(:,:,1);
 im2=data_show(:,:,2);
 im3=data_show(:,:,3);
 im4=data_show(:,:,4);
 im5=data_show(:,:,5);
 im6=data_show(:,:,6);
 im7=data_show(:,:,7);
 im1=uint8(im1);
 im2=uint8(im2);
 im3=uint8(im3);
 im4=uint8(im4);
 im5=uint8(im5);
 im6=uint8(im6);
 im7=uint8(im7);
 figure;imshow(im1);
 figure;imshow(im2);
 figure;imshow(im3);
 figure;imshow(im4);
 figure;imshow(im5);
 figure;imshow(im6);
 figure;imshow(im7);
%真彩色显示
 im3=data_show(:,:,1:3);
 im3=uint8(im3);
 figure;imshow(im3);
 %假彩色显示
 im3=data_show(:,:,4:6);
 im3=uint8(im3);
 figure;imshow(im3);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图一 遥感图像各波段显示
4. 遥感图像存储

%按照BIL存储类型存储所有波段
 multibandwrite(data,'data.bil','bil');
 %以存储32bit单波段为例
 numbands=1;
 for band=1:numbands
    multibandwrite(data(:,:,band),'banddata.bsq','bsq','machfmt','ieee-le','precision',interleave);
 end

五、实验心得

1.学会了使用multibandread和multibandwtite函数处理遥感影像。
2. 对遥感影像的头文件里的内容有了更加深入的了解。

猜你喜欢

转载自blog.csdn.net/chengzilhc/article/details/124556979