为减少信息冗余,同时为了对数据进行降维,采用最佳指数因子(Optimum Index Factor,OIF)建立最优波段特征组合。其基本原理是:图像中所涵盖的信息量与其标准差成正比,标准差越大,信息量就越多;图像的独立性与波段间的相关系数成反比,其相关系数越低,信息冗余度越小,其独立性越好。此方法综合了各波段间的关联性及单波段图像的信息量,得到了广泛应用。

可以参考以下论文:
Chavez P S, GL B, LB S. Statistical method for selecting Landsat MSS ratios[J]. 1982.
(最早由Chavez提出的OIF)
赵庆展,刘伟,尹小君,张天毅.基于无人机多光谱影像特征的最佳波段组合研究[J].农业机械学报,2016,47(03):242-248+291.
裴欢,孙天娇,王晓妍.基于Landsat 8 OLI影像纹理特征的面向对象土地利用/覆盖分类[J].农业工程学报,2018,34(02):248-255.

OIF计算公式
原始论文中这样写

通常写成这种形式

选择3 个波段组合并计算其OIF 值,OIF 值越大,波段标准差越小,波段间相关性系数越小,说明波段组合数据质量最优。

matlab程序计算OIF
1)因为我既用了原始影像计算OIF,也用了不同波段之间的比值计算OIF,所以代码开头会有两个部分,但其实参与OIF运算的主变量是X。而且我把波段比值中出现的异常值(主要是0,其实还有负值没处理)赋成了NaN,如果不处理0则计算OIF的结果会出现NaN。部分函数中omitnan是忽略了NaN值。
2)我的matlab版本较低,计算标准差是自己写的过程,因为是多维数组,所以没法直接用std计算,据官网文档显示2018b以上版本可以直接计算多维数组所有元素的标准差。
而且自己写的计算标准差公式为

这里用1/(n-1)考虑到无偏估计量的概念,详情参考数理统计部分。

3)我的原始影像为int16型,在这里转为了double类型,目的是为了后续计算波段比值,如果用int16型计算比值结果不对

clear all
clc
Image = imread('20180316QFLY_GS.tif');  % 读取影像,为int16类型,如果直接把异常值换为NaN则换不了,转成double类型
Image_D = double(Image);% 波段比值
Image_D(Image_D == 0) = NaN;
XRatio_Combination = nchoosek(1:size(Image_D,3),2);  % 比值的组合
X_Combination = nchoosek(1:size(XRatio_Combination,1),3);  % 从那么多比值组合里选三个
X = zeros(size(Image,1),size(Image,2),size(XRatio_Combination,1));
for m = 1:size(XRatio_Combination,1)% 计算波段比值并按照XRatio_Combination的顺序存储到XX(:,:,m) = Image_D(:,:,XRatio_Combination(m,1)) ./ Image_D(:,:,XRatio_Combination(m,2));
end% 原始影像
% X = Image_D;  % 原始波段计算OIF
% X_Combination = nchoosek(1:size(X,3),3);  % n选3,n是波段数,这个用于原始波段计算OIF%%
% 计算标准差和相关系数
X_StdDev = zeros(1,size(X,3));
% 不含NaN可以直接用std2
% for i = 1:size(X,3)
%     X_StdDev(i) = std2((X(:,:,i)));  % 各波段标准差
% end
for i = 1:size(X,3)X_Mean1 = mean(mean(X(:,:,i),'omitnan'));X_Sq = (X(:,:,i) - X_Mean1).^2;numNaN = length(find(isnan(X)));  % 统计X中的NaN个数,在后续计算标准差时去除这一部分X_StdDev(i) = sqrt(sum(sum(X_Sq),'omitnan')/(size(X,1) * size(X,2) - numNaN - 1));  %这里未将NaN统计到总数中
end
XCom_StdDev = [X_Combination,zeros(size(X_Combination,1),1)];for i = 1:size(X_Combination,1)  % 注意这里的循环结尾值是组合数,也就是X_Combination的行数XCom_StdDev(i,4) = X_StdDev(X_Combination(i,1)) + X_StdDev(X_Combination(i,2)) + ...X_StdDev(X_Combination(i,3));  % 计算组合波段的StdDev之和
end
XCom_Corr = [X_Combination,zeros(size(X_Combination,1),1)];
for j = 1:size(X_Combination,1)% corrcoef的'Rows','complete'用于忽略NaN值c1 = corrcoef(double(X(:,:,X_Combination(j,1))),double(X(:,:,X_Combination(j,2))),'Rows','complete');c2 = corrcoef(double(X(:,:,X_Combination(j,1))),double(X(:,:,X_Combination(j,3))),'Rows','complete');c3 = corrcoef(double(X(:,:,X_Combination(j,2))),double(X(:,:,X_Combination(j,3))),'Rows','complete');XCom_Corr(j,4) = c1(2,1) + c2(2,1) + c3(2,1);
end
%%
% 计算OIF
OIF = [X_Combination,zeros(size(X_Combination,1),1)];
OIF(:,4) = XCom_StdDev(:,4) ./ XCom_Corr(:,4);  % 初步计算出OIF
X_OIF = sortrows(OIF,-4);  % 按照OIF值进行降序排序
fprintf('最优组合波段比为 %d/%d、%d/%d、%d/%d,其OIF值为%.3f\n',XRatio_Combination(X_OIF(1,1),:),...XRatio_Combination(X_OIF(1,2),:),XRatio_Combination(X_OIF(1,3),:),X_OIF(1,4));  % 波段比
% fprintf('最优组合波段为 %d、%d、%d,其OIF值为%.3f\n',X_OIF(1,:));  % 原始波段

matlab计算遥感影像最“佳”指数因子OIF相关推荐

  1. 计算遥感影像变异系数以及像元值变化趋势的小软件

    计算遥感影像变异系数以及像元值变化趋势的小软件 最近由于学习上的需要,需要计算很多遥感影像的相关系数,使用envi软件波段计算比较繁琐,就在网上找了不少计算相关指数的python代码,并且自己写了一些 ...

  2. matlab对遥感影像投影转换,在matlab中实现遥感影像和shp文件的结合显示

    clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); % ...

  3. ArcGIS中ArcMap快速自动计算单一波段或多波段栅格遥感影像NDVI的方法

      本文介绍在ArcMap软件中,快速对单一波段或多波段栅格遥感影像自动计算NDVI数值的方法.   计算遥感影像的NDVI值是一个很常见.也很基础的操作,基于ENVI.ERDAS等专业遥感影像数据处 ...

  4. 数字图像处理:基于NDVI的遥感影像植被提取

    文章目录 一.实验任务与内容 二.实验原理 三.编程思路 四.实验成果图 五.源代码 ImageProcessing.h ImageProcessing.cpp Main.cpp 一.实验任务与内容 ...

  5. 基于多特征的遥感影像阴影提取(python+matlab代码)

    来源: 那些年"南方测绘杯"科技论文比赛做的工作 先看效果: 实现思路: 由于遮挡物的存在,会使辐射源(太阳)辐射能量不能到达地面某些区域,这些区域就是遥感影像上的阴影区域,它们通 ...

  6. 8影像计算ndvi landsat_使用GDAL读取遥感影像的信息

    读取影像数据集的元数据 GDAL已经提供了足够方便的函数,可以读取影像的一些元数据信息, 从而方便对数据进行处理.GDAL一般是以字典的形式对元数据进行组织的, 但是对于不同的栅格数据类型,元数据的类 ...

  7. 在matlab中进行遥感影像地理坐标的相互转换

    在matlab中进行图像处理,一般使用的都是图像本地坐标,以左上角(1,1)开始.处理完成后,如果要将结果在带地理坐标的遥感影像中显示,或者需要输出成shp文件,就需要涉及到本地坐标和地理坐标的转换, ...

  8. GEE:变异系数法在遥感影像分析中的应用及权重计算

    作者:CSDN @ _养乐多_ 本文介绍了在Google Earth Engine(GEE)平台上基于变异系数法的多指标加权遥感影像分析方法.该方法通过计算每个指标的平均值和标准差,进而计算变异系数来 ...

  9. 手把手教程:零基础使用MATLAB完成基于深度学习U-Net模型的遥感影像分类

    背景: 很多初入深度学习的学生都会遇到各种环境配置问题,环境搭建不好模型就跑不了,所以这是限制新手的一大难点,MATLAB具有成熟的运行环境,无需配置,这点对于想跑通一个深度学习模型的新手是非常有利的 ...

  10. matlab 算 cramer s v,基于Cramer’s V指数的遥感影像特征选择方法专利_专利查询 - 天眼查...

    1.基于Cramer' S V指数的高分辨遥感影像特征选择方法,其特征在于:包括以下步 骤: 步骤1 :对获取的遥感影像进行预处理以及影像特征提取: 步骤2 :基于Cramer' s V关联指数的连续 ...

最新文章

  1. 大龄码农经验那么丰富,为什么很多公司都不招?
  2. Jedis连接redis
  3. requests记录
  4. python数字类型转换函数_python中的各种数据类型中的数据格式转换
  5. micropython固件源码_Micropython加速物联网开发7 - Micropython源码编译与固件更新
  6. Oreo易支付程序开源源码分享发行版V1.3
  7. IOS 如何获取ppi
  8. python中数据类型转换_Python(二).数据类型,数据类型转换
  9. 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
  10. elasticsearch常用配置
  11. ZOJ 3981 2017CCPC秦皇岛 A:Balloon Robot
  12. Python-Matplotlib可视化(10)——一文详解3D统计图的绘制
  13. 解决相片上传主键唯一性问题,java 上传相片到服务器的时候,相片保存主键用guid。...
  14. mac上键盘说明以及intellij 快捷键的使用
  15. linux vi 底行命令,Linux下vi命令详解
  16. OSChina 周五乱弹 —— 程序猿真是令人感到担忧!
  17. MongoDB的授权和权限
  18. MySQL 从删库到跑路
  19. M4A格式的ID3信息提取
  20. 论文分栏前后内容不连续?教你word如何删除分节符

热门文章

  1. uniapp底部导航栏中间凸起_PPT导航栏,真的非常好用!
  2. 计算机组成原理地址线不够,计算机组成原理小结和习题2
  3. uV胶点胶机器人_解析手机用粘合剂十大用胶点
  4. Guava学习笔记(零):Google Guava 类库简介
  5. FFmpeg学习(10)—— ffmpeg最全的命令参数
  6. ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
  7. python之三元表达式、列表生成式、字典表达式、生成器表达式
  8. 太真实了!工业界AI项目落地血泪教训总结
  9. ROS与Orocos
  10. Web前端开发规范 之html命名规范