IDL考试前复习笔记(三) 计算NDVI后进行密度分割

2023-11-09 16:50

本文主要是介绍IDL考试前复习笔记(三) 计算NDVI后进行密度分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言
  发现这个好像和我之前写的程序重了,之前写考核的时候密度分割部分直接抄的课上的程序,这次看懂了,挺简单的 。

需求分析

Created with Raphaël 2.2.0 开始 b3,b4波段 计算NDVI 密度分割 密度分割图 结束

这个代码有点太过简单了…不废话了,干活!

1.预定义颜色索引矩阵,读入近红和红数据,计算NDVI

  dst = [[-1.0, 0.0, 255, 127, 36], $[.0, 0.2, 255, 165, 79], $[0.2, .4, 238, 216, 174], $[ .4, .6, 193, 255, 193], $[ .6, .7, 193, 255, 193], $[ .7, .8, 0  , 139, 0]b3file = 'C:\Users\黄\Desktop\te\red_subset.tif'b4file = 'C:\Users\黄\Desktop\te\nir_subset.tif'b3=READ_TIFF(b3file)b4=READ_TIFF(b4file)ndvi=(FLOAT(b4)-b3)/(FLOAT(b4)+b3)

  首先定义一个矩阵,这个矩阵有5列,第一第二列是判断NDVI的范围,如果接下来我们要分割的NDVI矩阵的值介于这两个之间,那么我就将RGB中的R通道赋值为这个颜色索引矩阵的第3列,G通道赋值为颜色索引矩阵的第4列,B通道为颜色索引矩阵的第5列。因为RGB图像本身就是3个通道合成的图像,单个通道的话是灰度图像,所以我只要求3个分量然后合起来就行了。

在这里插入图片描述
注意点IDL创建矩阵的语法就行了,每一个行向量都需要括起来,$就是换行符的意思,表示没有完成整句话。
然后上面那段话就是计算NDVI的表达式,NDVI的表达式就不想写了,对应变量就好了,就是要注意用float类型加减否则会报除以0的错误。

2.求出索引矩阵的列,并做一些寻访赋值

    sz = SIZE(dst)nds = sz[2]sz = SIZE(ndvi)ncols = sz[1]nrows = sz[2]resultR = BYTARR(ncols, nrows)resultG = BYTARR(ncols, nrows)resultB = BYTARR(ncols, nrows)FOR i=0, nds-1 DO BEGINw = WHERE(ndvi GE dst[0,i] AND ndvi LT dst[1, i], count)IF count GT 0 THEN BEGINresultR[w] = dst[2, i]resultG[w] = dst[3, i]resultB[w] = dst[4, i]ENDIFENDFORimg = bytarr(3, ncols, nrows)img[0, *, *] = resultRimg[1, *, *] = resultGimg[2, *, *] = resultBig = image(img,order=1)

首先size函数会返回dst的5个值,我们只要第3个值,即它有多少行,这个dst有6行就是我们要分割的区间。

后面的size我们要知道计算NDVI的图像的大小,即有多少列,多少行。size[1]就是返回的5个值的第2个值,即图像多少列,size[2]就是size返回的5个值中的第3个,即图像有多少行。

然后预定义3个通道的矩阵,RGB通道的3个值。

后面是for循环,这个循环从0开始,到这个分割区间-1次,其实就是分割区间的区间次的循环
where函数判断NDVI是否介于第一和第二之间,如果介于这两个之间那么我的RGB就赋值为那个索引矩阵的第3、4、5列,完成后就完成分量通道的计算

那么最后,把这三个通道合起来,就成了一幅彩色图像。

最后的最后,显示一下图像吧,记得加上order=1就行了。

在这里插入图片描述

OK了,就是那么个思路和语法。

这篇关于IDL考试前复习笔记(三) 计算NDVI后进行密度分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/377370

相关文章

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底