变异系数(CV)是衡量数据稳定性的重要指标,表示数据的波动程度,计算方式是标准差与均值的比值。在栅格数据分析中,较低的变异系数意味着数据变化较小、稳定性较高,而较高的变异系数则表明数据波动较大、稳定性较低。本次我们采用滑动窗口方法来计算每个时间段内栅格数据的变异系数。通过这种方法,我们可以识别出在不同时间段内变化较大或稳定的区域。同时,此代码还能提取每个滑动窗口栅格数据变异性的最小值、最大值和平均值。![]()
![]()
[reference_image, R] = geotiffread('E:\1981_2021_E\ET\ET\Annual\year_ET_1982.tif');
info = geotiffinfo('E:\1981_2021_E\ET\ET\Annual\year_ET_1982.tif');
[m, n] = size(reference_image);
start_year = 2000;
end_year = 2020;
window_size = 5;
years = end_year - start_year + 1;
num_windows = years - window_size + 1;
data = zeros(m * n, years);
csv_path = 'E:\1981_2021_E\ET\ET\Results\Stability_Window_Stats.csv';
csv_file = fopen(csv_path, 'w');
fprintf(csv_file, 'Window_Start,Window_End,Min_Stability,Max_Stability,Mean_Stability\n');
for k = 1:years
year = start_year + k - 1;
file_path = sprintf('E:\\1981_2021_E\\ET\\ET\\Annual\\year_ET_%d.tif', year);
if exist(file_path, 'file')
temp_data = geotiffread(file_path);
data(:, k) = reshape(temp_data, m * n, 1);
else
data(:, k) = NaN;
end
end
for window_index = 1:num_windows
window_start = start_year + window_index - 1;
window_end = window_start + window_size - 1;
window_data = data(:, window_index:(window_index + window_size - 1));
stability = NaN(m, n);
for i = 1:size(window_data, 1)
pixel_data = window_data(i, :)';
if all(~isnan(pixel_data)) && min(pixel_data) >= 0
A = mean(pixel_data);
S = std(pixel_data, 1);
V = S / A;
stability(i) = V;
else
stability(i) = NaN;
end
end
stability = reshape(stability, m, n);
output_file = sprintf('E:\\1981_2021_E\\ET\\ET\\Results\\WUE_CV_Window_%d-%d.tif', window_start, window_end);
geotiffwrite(output_file, stability, R, 'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);
valid_stability = stability(~isnan(stability));
if ~isempty(valid_stability)
min_stability = min(valid_stability);
max_stability = max(valid_stability);
mean_stability = mean(valid_stability);
else
min_stability = NaN;
max_stability = NaN;
mean_stability = NaN;
end
fprintf(csv_file, '%d,%d,%f,%f,%f\n', window_start, window_end, min_stability, max_stability, mean_stability);
end
fclose(csv_file);