最近在做一些遥感相关的图像处理项目,涉及到遥感生态指数的计算。由于项目要求Python实现,搜索互联网关于Python实现的遥感生态指数计算程序资料很少,于是就自己实现了一个并分享在这里,供需要的朋友参考。
首先需要了解遥感生态指数是什么,不是很清楚的朋友可以参考下面的几篇文章:
城市遥感生态指数的创建及其应用
区域生态环境变化的遥感评价指数
基于遥感生态指数的南京市生态变化分析
知道了遥感生态指数是什么后,程序实现其实比较简单,这里直接贴出程序。

"""
利用湿度、绿度、热度、干度计算遥感生态指数
"""
import os
import time
import numpy as np
from scipy import misc
from osgeo import gdal, gdalconst
from sklearn.decomposition import PCAclass CalIntegratedEcoIndex:def __init__(self, img_path, res_save_dir):self.img_width, self.img_height, self.img = self.read_img(img_path)self.deno_bias = 0.00001  # 分母偏置,防止除0self.res_save_dir = res_save_dirdef read_img(self, img_path):"""读取遥感数据信息"""dataset = gdal.Open(img_path, gdalconst.GA_ReadOnly)img_width = dataset.RasterXSizeimg_height = dataset.RasterYSizeimg_data = np.array(dataset.ReadAsArray(0, 0, img_width, img_height), dtype=float)  # 将数据写成数组,对应栅格矩阵del datasetreturn img_width, img_height, img_datadef get_wet_degree(self):"""获取湿度指标"""return 0.2626 * self.img[0] + 0.2141 * self.img[1] + 0.0926 * self.img[2] + \0.0656 * self.img[3] - 0.7629 * self.img[4] - 0.5388 * self.img[6]def get_green_degree(self):"""获取绿度指标"""return (self.img[3] - self.img[2]) / (self.img[3] + self.img[2] + self.deno_bias)def get_temperature(self):"""获取热度指标"""gain = 3.20107  # landsat5 第6波段的增益值bias = 0.25994  # 第6波段的偏置值K1 = 606.09K2 = 1282.71_lambda = 11.45_rho = 1.438e10-2_epsilon = 0.96  # 比辐射率DN = self.img[4] * 299/1000 + self.img[3] * 587/1000 + self.img[2] * 114/1000  # 获取象元灰度值L6 = gain * DN + biasT = K2 / np.log(K1 / L6 + 1)LST = T / (1 + (_lambda * T / _rho) * np.log(_epsilon))return LSTdef get_dryness_degree(self):"""获取干度指标"""band5_plus_band3 = self.img[4] + self.img[2]band4_plus_band1 = self.img[3] + self.img[0]SI = (band5_plus_band3 - band4_plus_band1) / (band5_plus_band3 + band4_plus_band1 + self.deno_bias)left_expr = 2 * self.img[4] / (self.img[4] + self.img[3] + self.deno_bias)right_expr = self.img[3] / (self.img[3] + self.img[2] + self.deno_bias) + \self.img[1] / (self.img[1] + self.img[4] + self.deno_bias)IBI = (left_expr - right_expr) / (left_expr + right_expr + self.deno_bias)NDBSI = (IBI + SI) / 2return NDBSIdef arr2img(self, save_path, arr):misc.imsave(save_path, arr)def normlize(self, img_arr):arr = np.array(img_arr)return (arr - arr.min()) / (arr.max() - arr.min())def get_rsei(self):"""获取遥感生态指数"""wet = self.get_wet_degree()ndvi = self.get_green_degree()lst = self.get_temperature()ndbsi = self.get_dryness_degree()data = np.array([self.normlize(wet), self.normlize(ndvi), self.normlize(lst), self.normlize(ndbsi)])data = data.reshape(data.shape[0], -1).Tpca = PCA(n_components=1)rsei = self.normlize(1 - np.reshape(pca.fit_transform(data), newshape=(self.img_height, self.img_width)))return wet, ndvi, lst, ndbsi, 1 - rseidef save_result(self, wet, ndvi, lst, ndbsi, rsei):"""将各指数结果保存为图片"""res_dict = {"wet": wet, "green": ndvi, "temperature": lst, "dry": ndbsi, "rsei": rsei}for k, v in res_dict.items():self.arr2img(os.path.join(self.res_save_dir, k + ".jpg"), v)def get_average_index(self, wet, ndvi, lst, ndbsi, rsei):"""获取归一化后各指标的平均值"""return np.mean(self.normlize(wet)), np.mean(self.normlize(ndvi)), \np.mean(self.normlize(lst)), np.mean(self.normlize(ndbsi)), np.mean(self.normlize(rsei))

程序可以按照下面的方式进行使用(注意输入图像是Landsat七波段的图像):

if __name__ == '__main__':start = time.time()cal = CalIntegratedEcoIndex("/your/path/to/Landsat/image", "./result")wet, ndvi, lst, ndbsi, rsei = cal.get_rsei()aver_wet, aver_ndvi, aver_lst, aver_ndbsi, aver_rsei = cal.get_average_index(wet, ndvi, lst, ndbsi, rsei)cal.save_result(wet, ndvi, lst, ndbsi, rsei)end = time.time()print("归一化后各指数的平均值\n湿度", aver_wet, "绿度", aver_ndvi, "热度", aver_lst, "干度", aver_ndbsi,"遥感生态指数", aver_rsei, "Total cost time %.2f s" % (end - start))

因为对遥感领域不很了解,这也是我的初次尝试。如果程序中有什么错误及不足,欢迎读者朋友们在评论区批评指正。

Python实现遥感生态指数计算相关推荐

  1. ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

    一.数据介绍 由于时间跨度较大,用到了三种不同的landsat传感器的影像,先分别介绍这三种传感器的波段信息: 1.1Landsat5TM产品说明 Landsat主题成像仪 (TM)是Landsat4 ...

  2. 利用GEE计算城市遥感生态指数(RSEI)——Landsat 8为例

    文章目录 前言 第一步:定义研究区,自行更换自己的研究区 第二步:加载数据集,定义去云函数 第三步:主函数,计算生态指标 第四步:PCA融合,提取第一主成分 第五步:利用PC1,计算RSEI,并归一化 ...

  3. GEE学习记录(一)基于GEE利用LANDSAT 8数据计算遥感生态指数(RSEI)

    最近老师让看一下关于GEE的东西,实现大面积的反演.计算地表温度等,也算熟悉一下.参考网上很多大佬的文章,按照自己的思路和想法算出了RSEI,参考的文章都有列出来. 目录 所用数据集 影像数据 矢量数 ...

  4. 我的Python实例一——BIM指数计算

    # 开发人员:W.Y.B # 开发时间:2019/12/817:00 height=float(input("请输入您的身高(单位为米):")) print("您的身高: ...

  5. Python地球科学领域应用:python处理遥感数据、站点数据、遥感水文数据、气候变化数据、WRF模式数据后处理、运行生态模型

    点击查看原文>>>Python地球科学[赠CMIP6月/日数据.全球VIPPHEN物候数据.ERA5-LAND陆面再分析数据.遥感降水数据] >>>高精度气象模拟软 ...

  6. 《区域生态环境变化的遥感评价指数》笔记

    当前卫星遥感对地观测系统以其宏观.快速.实时的优点在生态环境领域得到广泛的应用.利用各种遥感指数来对森林.草地.城市.河流乃至整个流域的生态系统进行监测和评价,已经是生态环境保护领域的重要组成部分. ...

  7. python中exp函数_python中exp函数如何实现指数计算?

    原标题:python中exp函数如何实现指数计算? 之前小编向大家介绍过python中的对数函数log函数(https://www.py.cn/jishu/jichu/21780.html),对于有点 ...

  8. Python实例9: BMI指数计算

    方法一  name = str(input("请输入你的姓名:")) height = eval(input("请输入你的身高(m):")) weight = ...

  9. OpenCV各种遥感指数计算

    植被指数 比值被指数 归一化植被指数 土壤调节植被指数 修正的土壤调节植被指数 三波段梯度差植被指数 水体指数 归一化水体指数 MNDWI AWEI EWI NWI 建筑指数 DBI NDBI IBI ...

最新文章

  1. 谈谈Android重打包--初语
  2. 2.11 向量化-深度学习-Stanford吴恩达教授
  3. 如何建立一个数据分析团队?
  4. linux执行cd会使用系统调用,深入理解Linux系统调用
  5. 某次元app之data参数分析
  6. leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)
  7. 数据结构期末复习之交换排序
  8. Kali Linux 网络扫描秘籍 第七章 Web 应用扫描(一)
  9. android unity 关闭应用_Unity 之 唤起调用 Android 其它应用app的方法
  10. 【ACL2021】BERT也能做生成?利用多个BERT模型分离对话生成和对话理解
  11. vscode Java语法检查_vscode eslint js代码检查工具
  12. 【大咖分享】BFF在千寻位置网前端的落地和演进
  13. android动手写平滑滚动歌词控件
  14. 网站地图是什么?该如何生成
  15. 两个集合相减怎么算_2集合的基本运算
  16. 记:docker初使用报错:An error occurred and No connection could be made machine actively refused it
  17. 在vue添加lottie动画
  18. Doodle era
  19. linux加解密指令,[Centos8] linux 上的Base64加解密指令
  20. 医学检验技术与计算机的发展,医学检验专业发展现状与前景

热门文章

  1. 简易ffmpeg安装
  2. oracle9i 9.2.0.10,Oracle 9i和10G软件及补丁下载地址
  3. 个人博客迁移到托管平台Netlify
  4. ThinkPHP5+Redis 操作
  5. JavaScript与JavaQuery
  6. python中pprint是干什么的_python之pprint模块简用
  7. 导出ipython中的历史输入代码和输出结果
  8. 多进程multiprocessing
  9. 软工实践第一次作业-准备
  10. 如何使用待办清单克服时间管理中的难点?