OpenCV各种遥感指数计算
植被指数
比值被指数
归一化植被指数
土壤调节植被指数
修正的土壤调节植被指数
三波段梯度差植被指数
水体指数
归一化水体指数
MNDWI
AWEI
EWI
NWI
建筑指数
DBI
NDBI
IBI
归一化差值裸地与建筑用地指数
裸土指数
代码
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
using namespace std;
using namespace cv;//植被指数计算void RVI(const Mat &nir, const Mat &r,Mat &rvi)
{divide(nir, r, rvi,1,CV_32F);
}void NDVI(const Mat &nir, const Mat &r, Mat &ndvi)
{divide(nir - r, nir + r, ndvi, 1, CV_32F);
}void SAVI(const Mat &nir, const Mat &r, double L,Mat &savi)
{divide((nir - r)*(1 + L), nir + r + L, savi, 1, CV_32F);
}void MSAVI(const Mat &nir,const Mat &r,Mat &msavi)
{Mat tmp1, tmp2,tmp3;pow(2 * nir + 1, 2, tmp1);tmp2 = tmp1 - 8 * (nir - r);tmp2.convertTo(tmp2, CV_32F);pow(tmp2, 0.5, tmp3);subtract(2 * nir + 1, tmp3, msavi, noArray(), CV_32F);msavi *= 0.5;return;
}//水体指数计算
void NDWI(const Mat &nir, const Mat &g, Mat & ndwi)
{divide(g - nir, g + nir, ndwi, 1, CV_32F);
}void MNDWI(const Mat &swir, const Mat &g, Mat &mndwi)
{divide(g - swir, g + swir, mndwi, 1, CV_32F);
}//建筑指数计算
void DBI(const Mat &mir, const Mat & nir, Mat & dbi)
{dbi = mir - nir;
}void NDBI(const Mat &swir, const Mat &nir, Mat & ndbi)
{divide(swir - nir, swir + nir, ndbi, 1, CV_32F);
}//OTSU 阈值分割
void OTSUSegmentation(const Mat & input, Mat & output, double &value)
{double minv, maxv;minMaxLoc(input, &minv, &maxv);Mat tmp;divide(input - minv, maxv - minv, tmp, 1, CV_32F);tmp = tmp * 255;tmp.convertTo(tmp, CV_8U);value = threshold(tmp, output, 128, 255, ThresholdTypes::THRESH_BINARY | ThresholdTypes::THRESH_OTSU);value /= 255;value = value * (maxv - minv) + minv;
}int main()
{Mat nir = imread("./tifs/tm4.tif", ImreadModes::IMREAD_GRAYSCALE);Mat r = imread("./tifs/tm3.tif", ImreadModes::IMREAD_GRAYSCALE);Mat swir = imread("./tifs/tm5.tif", ImreadModes::IMREAD_GRAYSCALE);Mat b= imread("./tifs/tm1.tif", ImreadModes::IMREAD_GRAYSCALE);Mat g=imread("./tifs/tm2.tif", ImreadModes::IMREAD_GRAYSCALE);Mat mir= imread("./tifs/tm7.tif", ImreadModes::IMREAD_GRAYSCALE);Mat rvi;RVI(nir, r, rvi);imwrite("./tifs/rvi.tif", rvi);Mat rviArea;double rviV;OTSUSegmentation(rvi, rviArea, rviV);imwrite("./tifs/rviArea.tif", rviArea);cout << "rvi阈值:" << rviV << endl;Mat ndvi;NDVI(nir, r, ndvi);imwrite("./tifs/ndvi.tif", ndvi);Mat ndviArea;double ndviV;OTSUSegmentation(ndvi, ndviArea, ndviV);imwrite("./tifs/ndviArea.tif", ndviArea);cout << "ndvi阈值:" << ndviV << endl;Mat savi;SAVI(nir, r, 0.5,savi);imwrite("./tifs/savi.tif", savi);Mat saviArea;double saviV;OTSUSegmentation(savi,saviArea,saviV);imwrite("./tifs/saviArea.tif", saviArea);cout << "savi阈值:" << saviV << endl;Mat msavi;MSAVI(nir, r,msavi);imwrite("./tifs/msavi.tif", msavi);Mat msaviArea;double msaviV;OTSUSegmentation(msavi, msaviArea, msaviV);imwrite("./tifs/msaviArea.tif", msaviArea);cout << "msavi阈值:" << msaviV << endl;Mat ndwi;NDWI(nir, g,ndwi);imwrite("./tifs/ndwi.tif", ndwi);Mat ndwiArea;double ndwiV;OTSUSegmentation(ndwi, ndwiArea, ndwiV);imwrite("./tifs/ndwiArea.tif",ndwiArea);cout << "ndwi阈值:" << ndwiV << endl;Mat mndwi;MNDWI(swir, g, mndwi);imwrite("./tifs/mndwi.tif", mndwi);Mat mndwiArea;double mndwiV;OTSUSegmentation(mndwi, mndwiArea, mndwiV);imwrite("./tifs/mndwiArea.tif", mndwiArea);cout << "mndwi阈值:" << mndwiV << endl;Mat dbi;DBI(mir, nir, dbi);imwrite("./tifs/dbi.tif", dbi);Mat dbiArea;double dbiV;OTSUSegmentation(dbi, dbiArea, dbiV);imwrite("./tifs/dbiArea.tif", dbiArea);cout << "dbi阈值:" << dbiV << endl;Mat ndbi;NDBI(swir, nir, ndbi);imwrite("./tifs/ndbi.tif", ndbi);Mat ndbiArea;double ndbiV;OTSUSegmentation(ndbi, ndbiArea, ndbiV);imwrite("./tifs/ndbiArea.tif", ndbiArea);cout << "dbi阈值:" << ndbiV << endl;system("pause");return 0;
}
结果
ndvi
nvdi阈值分割
rvi
rvi阈值分割
savi
savi阈值分割
msavi
msavi阈值分割
ndwi
ndwi阈值分割
mndwi
mndwi阈值分割
dbi
dbi阈值分割
ndbi
ndbi阈值分割
分割阈值输出
OpenCV各种遥感指数计算相关推荐
- QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(1)-数据预处理
本文演示使用QGIS基于NDVI遥感指数阈值法结合决策树提取冬小麦种植面积的过程,总体思路为:根据研究区域冬小麦生长周期特点,选择关键生长期多期遥感影像,计算NDVI指数,并根据NDVI提取关键地类, ...
- QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(4)-分类精度评价
本文继续介绍使用QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布,本文为教程的第四部分:分类结果精度评价.所使用的示范数据下载地址为: 链接: https://pan.baidu.com/s/1 ...
- QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布(3)-NDVI阈值
本文继续介绍使用QGIS基于多期哨兵2影像遥感指数阈值法提取冬小麦分布,本文为教程的第三部分:NDVI阈值选择和冬小麦种植面积提取.所使用的示范数据下载地址为: 链接: https://pan.bai ...
- 部分常见遥感指数(RSEI)原理与计算方法,以及效果比较
目录 前言 指数使用前需知 遥感指数 植被指数 归一化植被指数NDVI 归一化差值山地植被指数NDMVI 增强型植被指数EVI 比值植被指数SR/植被指数RVI 差值植被指数DVI 调节土壤的植被指数 ...
- GEE系列:第6单元 在 Google 地球引擎中构建各种遥感指数
GEE从入门到实战的10个系列单元: GEE系列:第1单元 Google地球引擎简介 GEE系列:第2单元 探索数据集 GEE系列:第3单元 栅格遥感影像波段特征及渲染可视化 GEE系列:第4单元 ...
- 使用OpenCV和Python高效计算视频的总帧数
使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...
- opencv 2d人脸姿态计算
opencv 2d人脸姿态计算 可以的: # -*- coding: utf-8 -*- # 测试使用opencv中的函数solvepnp import cv2 import numpy as np ...
- OpenCV中直方图的计算和绘制
OpenCV中直方图的计算和绘制 主要记录一下几个关键的API: cvRound(输入一个浮点数 );//返回一个整型数,取整的方法为四舍五入 split(输入多通道图像,数组或者vector变量. ...
- ENVI_建模工具的使用——以“指数计算”批处理为例
总流程图如下 一.插入数据集 二.插入迭代 三.插入指数计算
最新文章
- 10秒一部电影,全球首个5G数据连接完成
- python自学流程-python 学习流程
- LeetCode26. Remove Duplicates from Sorted Array
- 网站性能优化之HTTP请求过程简述!
- Spark(十二) -- Spark On Yarn Spark as a Service Spark On Tachyon
- linux中网页播放音乐,Linux_在Linux系统下播放网页中的背景音乐技巧,在Linux中的firefox浏览许多网页 - phpStudy...
- 加快liferay 7的启动速度
- JAVA https证书相关
- php正则表达式以及正则函数详解
- mysql 从库relay_MySQL主库binlog(master-log)与从库relay-log关系代码详解
- Juniper SSG 550M HA配置文档
- HDU 3729【二分匹配】
- LoRaWAN网络协议与LoRa私有协议相比有哪些优势
- WDM驱动开发 电源管理
- Hadoop笔记(1)——hdfs命令访问方式
- 递归函数c语言求爬格子,指标的含义,真或假.doc
- 一本程序员黑话进阶指南!拿走不谢!
- TextSymbol使用方法
- 初等矩阵及初等变换中的符号意义
- www.wolframalpha.com
热门文章
- 纯css实现3D立方体
- ntdll.dll故障(资源管理器无法打开)
- 如何配置java环境?
- 查找表(LUT,Look-up Table)的简单理解
- excel不能自动筛选原因
- Dagger2图文完全教程
- Java入门(项目三,职员管理系统)
- 人工智能的降维映射,实在智能数字员工为企业转型创新解
- java枚举后面括号是什么意思_浅谈java枚举类
- org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to localhost:9876 failed