波段组合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
学了遥感的人都知道,遥感图像的不同波段是有说法的,不同的波段所反映的波谱特征是不一样的,同样,不同的遥感波段对于地面信息的反映也是有差别的。在我们利用遥感技术进行相关分析的时候,往往要根据一些方法来选择最佳的组合以达到图像解译的目的。目前,对于最佳波段组合的方法常用的当属最佳波段法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
相关文章推荐
- 人工智能1:基本概念
- 如何成为好的领导者
- 网页布局基础浅谈
- 用CocoaPods做iOS程序的依赖管理
- WebView无法弹窗的问题。
- 带大三个hybird app项目的设计管理笔记
- mysql服务突然丢失解决方案
- Exchange2013/2016 ECP/OWA无法通过用户验证EventID3002/3005
- java与&或|非~运算
- text-decoration:none; 为什么不生效
- 树莓派配置静态id和dns服务器
- px 与 dp, sp换算公式?
- JS 筛选出1-100间的素数
- 《chkconfig核心案例和核心原理》
- iOS-银行卡四位数分隔效果
- c++第一次上机实
- frame,bounds和center
- 详解Python设计模式编程中观察者模式与策略模式的运用
- uml用例
- [LeetCode]229. Majority Element II