您的位置:首页 > 其它

波段组合OIF指数计算

2016-03-02 15:32 288 查看
原文地址:http://blog.sina.com.cn/s/blog_701286210100uabp.html

学了遥感的人都知道,遥感图像的不同波段是有说法的,不同的波段所反映的波谱特征是不一样的,同样,不同的遥感波段对于地面信息的反映也是有差别的。在我们利用遥感技术进行相关分析的时候,往往要根据一些方法来选择最佳的组合以达到图像解译的目的。目前,对于最佳波段组合的方法常用的当属最佳波段法OIF。该方法的原理是波段间相关性越小,波段的标准差越大,波段组合的信息量就越大。即波段组合的信息量与波短间的相关系数成反比,与波段本身的标准差成正比。计算公式也是非常的简单。但直接计算该指标的软件尚不是很多。不同的软件计算的过程的繁简程度也各有不同。笔者在此利用ENVI软件为例,来介绍OIF的计算过程。ENVI软件相对于ERDAS软件来说更为方便和快捷。

第一,

首先将需要组合的所有波段,利用波段组合法组合为一张图像,layer
stacking命令实现;

第二,

打开该图像,利用ENVI提供的compute
satation命令,计算图像信息,如min,max,stev,以及相关系数,特征向量等等。此处也将计算结果保存为txt文本文件,以便后面的提取和运算;

第三,

利用execl软件打开ENVI软件计算得来的标准差和相关系数数据,根据OIF的原理来预定波段组合的方式,否则,波段组合将根据排列组合原理进行逐一组合计算,从而造成大量的数据运算。

第四,

第三步的运算可以自己编写程序来运行,但如果波段数目较少,手工计算也比较快捷,根据OIF计算公式来计算预定组合波段的OIF值,比较OIF值的大小,进而最终确定最佳的组合波段。

过程结束,具体的运算还需看客实际操作一番尚能真正领会。

下面是Mmatlab的代码

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: