基于MATLAB与Python计算长时间遥感栅格图像的像元值变异系数(CV)

Matlab代码如下:

更改路径以及年份即可。

基于MATLAB与Python计算长时间遥感栅格图像的像元值变异系数(CV)_第1张图片

 Python代码:

from osgeo import gdal
import numpy as np
import copy
# 计算变异系数
images = [
    r'E:\test\pre\2001year_mean.tif',
    r'E:\test\pre\2002year_mean.tif',
    r'E:\test\pre\2003year_mean.tif',
    r'E:\test\pre\2004year_mean.tif',
    r'E:\test\pre\2005year_mean.tif',
]
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(tif) # 打开栅格图像
        band = open_tif.ReadAsArray() # 获取波段的矩阵
        images_pixels.append(band) # 把图像的矩阵加入到数组中
    CV = copy.deepcopy(images_pixels[0]) # 获取一个矩阵作为要写入的模板
    # 读取像元,并计算变异系数
    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)
    # 将数据坐标投影设置为原始坐标投影
    out_tif.SetProjection(open_tif.GetProjection())
    out_tif.SetGeoTransform(open_tif.GetGeoTransform())
    out_band = out_tif.GetRasterBand(1)
    out_band.WriteArray(CV)
    out_band.FlushCache()
    print('栅格图像组变异系数计算完成')
CV(images, r'E:\test\pre\cv.tif') 

你可能感兴趣的:(matlab,python)