1、python取百分位数据
两种取值方法
1)取值会计算百分比数、会产生小数,该数可能不是数据里的
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 计算百分位数
percentiles = np.percentile(data, [5, 95])
min_percentile = percentiles[0]
max_percentile = percentiles[1]
print("最小百分位数:", min_percentile)
print("最大百分位数:", max_percentile)
2)数据少、还是最小最大
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 对数据集排序
sorted_data = np.sort(data)
# 计算5%的索引位置
n = len(sorted_data)
min_index = int(0.05 * n)
max_index = int(0.95 * n)
# 获取5%区间的最大最小值
min_value = sorted_data[min_index]
max_value = sorted_data[max_index]
print("5%区间的最小值:", min_value)
print("5%区间的最大值:", max_value)
2、ENVI数据归一化
1)数据拉伸
2)扩展工具
很多时候我们需要对栅格图像进行归一化操作,使所有DN值范围统一到0~1 之间。
归一化的公式为
Result=(DN-DNmin)/(DNmax-DNmin)
式中:
- Result为归一化之后的值
- DN为原始像元值
- DNmin、DNmax分别为波段的最小、最大值
ENVI中操作步骤如下:
- 首先用/Statistics/Compute Statistics工具统计直方图(可以加入掩膜),获取最小值和最大值。一般情况下会取一个置信区间,比如2%或5%。
- 然后利用Band Math工具进行归一化,公式如下:
(b1 lt min)*0+(b1 ge min and b1 le max)*(b1-min)/(max-min)+(b1 gt max)*1
操作较为复杂,而且当归一化多波段数据时,只能逐个波段处理。
所以,写了扩展工具。但是,坏消息是只支持ENVI 5.5及以上版本,因为用了新接口。
方法1:使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。
App Store 下载地址:envi.geoscene.cn/appstore
方法2:手动下载 envi.geoscene.cn - /appstore/raseomiion/
下载 zip 压缩包并解压,将得到的 extensions 和 custom_code 文件夹拷贝到如下 ENVI 安装路径,覆盖同名文件夹即可:
- ENVI5.5 —C:\Program Files\Harris\ENVI55\
重启ENVI即可使用。
注:本工具支持ENVI 5.5及更高版本
使用方法:
在工具箱启动/Extensions/Raster Normalization
参数介绍:
- Input Raster:输入栅格图像,支持多波段,分波段统计最小/大值进行归一化。
- Input Mask Vector:输入统计最小/大值的掩膜矢量。
- Input Mask Raster:输入统计最小/大值的掩膜栅格。
- 以上2个掩膜文件二选一,或不设置。
- Percent(%):置信区间百分比,默认2%
- Output Data Type:输出数据类型。可选Float(0~1)、Byte(0~255)
- Display Result:是否加载显示结果
- Output Raster:输出文件