原文地址:http://blog.sina.com.cn/s/blog_701286210100uabp.html
学了遥感的人都知道,遥感图像的不同波段是有说法的,不同的波段所反映的波谱特征是不一样的,同样,不同的遥感波段对于地面信息的反映也是有差别的。在我们利用遥感技术进行相关分析的时候,往往要根据一些方法来选择最佳的组合以达到图像解译的目的。目前,对于最佳波段组合的方法常用的当属最佳波段法OIF。该方法的原理是波段间相关性越小,波段的标准差越大,波段组合的信息量就越大。即波段组合的信息量与波短间的相关系数成反比,与波段本身的标准差成正比。计算公式也是非常的简单。但直接计算该指标的软件尚不是很多。不同的软件计算的过程的繁简程度也各有不同。笔者在此利用ENVI软件为例,来介绍OIF的计算过程。ENVI软件相对于ERDAS软件来说更为方便和快捷。
第一,
首先将需要组合的所有波段,利用波段组合法组合为一张图像,layer stacking命令实现;
第二,
打开该图像,利用ENVI提供的compute satation命令,计算图像信息,如min,max,stev,以及相关系数,特征向量等等。此处也将计算结果保存为txt文本文件,以便后面的提取和运算;
第三,
利用excel软件打开ENVI软件计算得来的标准差和相关系数数据,根据OIF的原理来预定波段组合的方式,否则,波段组合将根据排列组合原理进行逐一组合计算,从而造成大量的数据运算。
第四,
第三步的运算可以自己编写程序来运行,但如果波段数目较少,手工计算也比较快捷,根据OIF计算公式来计算预定组合波段的OIF值,比较OIF值的大小,进而最终确定最佳的组合波段。
过程结束,具体的运算还需看客实际操作一番尚能真正领会。
下面是Matlab的代码
clear;
multBand = imread('nj.tif');
% 组合数
n = 3;
% 波段数
band = size(multBand);
combin = combntns(1:band(3),n);
sizeCombin = size(combin);
OIF = zeros(sizeCombin(1),sizeCombin(2)+1);
OIF(:,1:end-1) = combin;
for row = 1:sizeCombin(1)
bands = multBand(:,:,combin(row,:));
STDS = 0;
for b = 1:n
STDS = STDS + std2(bands(:,:,b));
end
CORRS = 0;
for b1=1:n
for b2=2:n
if b2>b1
CORRS = CORRS + abs(corr2(bands(:,:,b1),bands(:,:,b2)));
end
end
end
bandOIF = STDS/CORRS;
OIF(row,end) = bandOIF;
end
% s = size(multBand);
% n = s(3);
% bandinfo = zeros(n,3);
% for b = 1:n
% band = multBand(:,:,b);
% bandinfo(b,:) = [b max(band(:)) min(band(:))];
% end