实验七 读取遥感图像
一、实验目的
- 熟悉MATLAB读写中遥感图像的格式;
- 掌握多波段遥感图像的读取和存储;
- 掌握多波段遥感图像中单波段、不同波段的组合显示。
二、实验仪器及设备
计算机、Matlab图像处理软件,Landsat8遥感图像
三、实验基础
1.实验遥感图像简介
2013年2月11日Landsat8.卫星发射成功,设计寿命为5年,携带陆地成像仪和热红外传感器两种主要设备。陆地成像仪有11个波段,其中可见光、近红外、短波红外波段空间分辨率30米,热红外波段空间分辨率100米,全色波段分辨率15米,成像宽度185米。kmx185km。包括陆地成像仪ETEM 传感器的所有波段,但为了避免大气吸收特性,重新调整了波段,较大的调整是band5,排除了0.825um处理水蒸气吸收特性,全波段band8范围狭窄,可以更好地区分植被和无植被特征的全色图像。此外,还增强了两个波段的蓝色波段,主要用于海岸带观测短波红外波段。可用于云检测、近红外和短波红外波段及modest接近相应的波段。
2.相关函数 MATLAB多波段图像读写中使用的函数包括multibandread和multibandwtite。
四、实验内容及步骤
- 读取遥感图像头文件
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
- 遥感图像基本信息读取
%读取列数、行数、波段数、数据类型
%列数
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
- 遥感图像数据读取与显示 遥感图像大多数具有多波段,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. 对遥感影像的头文件里的内容有了更加深入的了解。