基于python的CV变异系数计算软件(适用于长时间栅格数据)

1.下面是一个例子,计算下面22幅影像的CV变异系数,分析不同区域的波动性。每幅影像只有一个波段,且为tif格式。
基于python的CV变异系数计算软件(适用于长时间栅格数据)_第1张图片
2.计算结果如下,CV 值越高表明该地区的生态环境质量时间序列的稳定性越低,反之则稳定性越高。
基于python的CV变异系数计算软件(适用于长时间栅格数据)_第2张图片
3.话不多说,直接上代码,有编程基础的可以自己调试,小白可以使用本人编好的exe程序,链接在下面。

from osgeo import gdal
import numpy as np

import os
import copy

# 计算变异系数
def coefficient_of_variation(data): # 变异系数
    mean = np.mean(data) # 计算平均值
    std = np.std(data, ddof=0) # 计算标准差
    cv = std/mean
    return cv


# 栅格图像组计算变异系数
def CV(images, outpath):
    images_pixels = [] # 存放多个图像像元矩阵的空数组
    for image in images:
        # tif = str(image)
        open_tif = gdal.Open(image) # 打开栅格图像
        band = open_tif.GetRasterBand(1).ReadAsArray() # 获取波段的矩阵
        images_pixels.append(band) # 把图像的矩阵加入到数组中
        del open_tif
    CV = copy.deepcopy(images_pixels[-1]) # 获取一个矩阵作为要写入的模板
    # 读取像元,并计算变异系数
    for i in range(len(CV)):
        for j in range(len(CV[1])):
            CV_data = [] # 存放ij坐标下像元值的数组,以计算变异系数
            for px in range(len(images)): # 遍历多个图像下ij坐标的像元值
                CV_data.append(images_pixels[px][i][j]) # 同一坐标的多点加入数组,以计算变异系数
            CV_value = coefficient_of_variation(CV_data) # 变异系数计算
            CV[i][j] = CV_value # 写入该坐标下的变异系数
    # 保存栅格图像
    gtiff_driver = gdal.GetDriverByName('GTiff')
    out_tif = gtiff_driver.Create(outpath, CV.shape[1], CV.shape[0], 1, gdal.GDT_Float32)
    # 将数据坐标投影设置为原始坐标投影
    open_tif = gdal.Open(images[1])
    out_tif.SetProjection(open_tif.GetProjection())
    out_tif.SetGeoTransform(open_tif.GetGeoTransform())
    out_band = out_tif.GetRasterBand(1)
    del open_tif
    out_band.WriteArray(CV)
    out_band.FlushCache()
    print('栅格图像组变异系数计算完成')

def main(path1,result_path):
    filepaths = []
    for file in os.listdir(path1):
        filepath1 = os.path.join(path1, file)
        filepaths.append(filepath1)
    CV(filepaths, result_path)

if __name__ == "__main__":

    path1 = r"F:\rsei-2"
    result_path = r"F:\cv.tif"
    main(path1,result_path)

代码中导入了GDAL库,使用时需要安装该库。有基础的可以使用上述代码,自己调试,exe程序的链接如下,可以下载使用。
我用夸克网盘分享了「CV变异系数计算.exe」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/5c1fecabb9ed
提取码:Dk1N

喜欢的朋友们点个赞吧,谢谢。有什么问题可以私信!

到此,mk+sen、Hurst、cv变异系数的软件就写完了,朋友们有什么问题可以私信,后面有时间的话会将三个软件合并成一个。
后面会写使用python批量处理影像,可以使工作、科研效率大大提升。
比如我有22幅影像,每幅有四个波段,我想把这么多影像里面的每个波段都单独提取出来进行分析,如果是你,你怎么做,用arcgis一个波段一个波段的保存?那太慢了,用代码就比较快了,几分钟就可以搞定。

大家有问题可以关注下方vx公众号私信我
基于python的CV变异系数计算软件(适用于长时间栅格数据)_第3张图片

你可能感兴趣的:(python,开发语言,CV变异系数)