ArcGIS或MATLAB实现批量计算整个tif图像的EVI

下载的MODIS09数据,提取了其中的1、2、3波段,都放在了一个文件夹里,想批量计算EVI 指数。我自己有看到Python实现批量计算的,不过要求是三个波段分别放在三个文件内。
文件名称是这样的,06波段是用来计算LSWI 的

img


最好是ArcGIS或MATLAB实现,求能直接用的代码

能否提供一下数据

参考GPT:MATLAB可以使用以下代码实现批量计算整个tif图像的EVI:

% 设置文件夹路径和文件名格式
folder_path = 'path/to/tif/folder/';
file_format = '*.tif';

% 获取文件夹下所有符合格式要求的tif文件
tif_files = dir(fullfile(folder_path, file_format));

% 设置EVI计算所需的参数
G = 2.5;
C1 = 6;
C2 = 7.5;
L = 1;

% 循环遍历每个tif文件并计算EVI指数
for i = 1:length(tif_files)
    % 读取tif文件中的数据
    data = imread(fullfile(folder_path, tif_files(i).name));

    % 分别提取红、近红、蓝波段的数据
    red = double(data(:,:,1));
    nir = double(data(:,:,2));
    blue = double(data(:,:,3));

    % 计算EVI指数
    evi = G * ((nir - red) ./ (nir + C1 * red - C2 * blue + L));

    % 保存计算结果
    [~, filename, ~] = fileparts(tif_files(i).name);
    imwrite(uint16(evi), fullfile(folder_path, [filename '_evi.tif']));
end


在代码中,首先设置了文件夹路径和文件名格式,然后通过dir函数获取符合要求的所有tif文件。接下来,设置了EVI计算所需的参数。最后,循环遍历每个tif文件并分别提取红、近红、蓝波段的数据,计算EVI指数,并保存计算结果。

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

下面是使用 ArcPy(ArcGIS 的 Python 库)和 MATLAB 实现批量计算 EVI 的代码示例。首先,确保您的文件夹包含所有波段,并且每个波段的名称具有相同的前缀。

  1. ArcPy(ArcGIS 的 Python 库)
import arcpy
import os

# 输入和输出文件夹
input_folder = "path/to/your/input/folder"
output_folder = "path/to/your/output/folder"

# 确保输出文件夹存在
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 设置环境工作空间
arcpy.env.workspace = input_folder

# 获取所有栅格文件
rasters = arcpy.ListRasters()

# 确保波段列表按名称排序
rasters.sort()

# 计算 EVI
for i in range(0, len(rasters), 3):
    band1 = rasters[i]
    band2 = rasters[i + 1]
    band3 = rasters[i + 2]
    output_name = os.path.join(output_folder, f"EVI_{band1[:-6]}.tif")

    # EVI = 2.5 * ((Band2 - Band1) / (Band2 + 6 * Band1 - 7.5 * Band3 + 1))
    evi_raster = 2.5 * ((arcpy.Raster(band2) - arcpy.Raster(band1)) / (arcpy.Raster(band2) + 6 * arcpy.Raster(band1) - 7.5 * arcpy.Raster(band3) + 1))
    evi_raster.save(output_name)
  1. MATLAB
input_folder = 'path/to/your/input/folder';
output_folder = 'path/to/your/output/folder';

% 获取所有文件
file_list = dir(fullfile(input_folder, '*.tif'));

% 确保文件列表按名称排序
file_list = natsortfiles({file_list.name});

% 计算 EVI
for i = 1:3:length(file_list)
    band1 = imread(fullfile(input_folder, file_list{i}));
    band2 = imread(fullfile(input_folder, file_list{i+1}));
    band3 = imread(fullfile(input_folder, file_list{i+2}));

    % EVI = 2.5 * ((Band2 - Band1) / (Band2 + 6 * Band1 - 7.5 * Band3 + 1))
    evi = 2.5 * ((double(band2) - double(band1)) ./ (double(band2) + 6 * double(band1) - 7.5 * double(band3) + 1));

    output_name = fullfile(output_folder, ['EVI_' file_list{i}(1:end-6) '.tif']);
    imwrite(evi, output_name, 'tif');
end

这两个示例都将遍历文件夹中的波段文件,计算 EVI 指数并将结果保存到指定的输出文件夹。请将输入和输出文件夹的路径替换为您实际的文件夹路径。

基于bing、GPT部分内容和本人思考总结:
以下是使用ArcGIS和MATLAB分别实现批量计算整个tif图像的EVI的代码:
使用ArcGIS:

打开ArcMap软件,点击“ArcToolbox”按钮,展开“Spatial Analyst Tools”和“Map Algebra”选项,找到“Raster Calculator”工具。

双击“Raster Calculator”工具,输入如下表达式:
(2.5 * ("Band_4" - "Band_3")) / ("Band_4" + (6 * "Band_3") - (7.5 * "Band_1") + 1)
其中,“Band_4”、“Band_3”和“Band_1”分别代表红、近红外和蓝波段的栅格数据。

点击下方的“Batch”按钮,选择要批量处理的tif文件,点击“Add”按钮,然后点击“OK”按钮,等待处理完成。
使用MATLAB:

打开MATLAB软件,输入如下代码:
folder = 'C:\path\to\folder'; % 文件夹路径
files = dir(fullfile(folder, '*.tif')); % 获取所有tif文件
for i = 1:length(files)
filename = fullfile(folder, files(i).name); % 获取当前tif文件路径
info = imfinfo(filename); % 获取tif文件信息
red = imread(filename, 'Index', 1); % 读取红波段数据
nir = imread(filename, 'Index', 2); % 读取近红外波段数据
blue = imread(filename, 'Index', 3); % 读取蓝波段数据
evi = (2.5 * (nir - red)) ./ (nir + (6 * red) - (7.5 * blue) + 1); % 计算EVI
output_filename = fullfile(folder, strcat('EVI_', files(i).name)); % 设置输出文件名
imwrite(evi, output_filename, 'tif', 'Compression', 'none', 'WriteMode', 'overwrite'); % 写入输出文件
end
其中,“folder”变量代表tif文件所在的文件夹路径,代码会自动读取该文件夹下所有后缀为.tif的文件并进行批量处理。计算EVI的代码和ArcGIS中的相同,不再赘述。

点击运行按钮,等待处理完成。
以上是两种不同软件的实现方式,根据具体情况选择使用。

From GPT

可以使用ArcGIS或MATLAB来批量计算整个tif图像的EVI。以下是两种方法的具体步骤:

使用ArcGIS:

打开ArcMap,并添加tif图像数据(包括三个波段)。

在ArcToolbox中搜索并打开“Raster Calculator”工具。

在“Raster Calculator”中输入EVI公式,并将其应用到tif图像数据上。EVI公式如下:

EVI = 2.5 * ((Band3 - Band2) / (Band3 + 6 * Band2 - 7.5 * Band1 + 1))

运行“Raster Calculator”工具,并将输出保存为一个新的tif文件。

重复以上步骤,对整个tif图像文件夹内的所有tif文件进行EVI计算。

使用MATLAB:

打开MATLAB,并使用“imread”函数读取tif图像数据(包括三个波段)。

计算EVI指数并保存为一个新的tif文件。EVI公式如下:

EVI = 2.5 * ((Band3 - Band2) / (Band3 + 6 * Band2 - 7.5 * Band1 + 1));
imwrite(EVI, 'output.tif');

重复以上步骤,对整个tif图像文件夹内的所有tif文件进行EVI计算。可以使用循环语句来遍历整个文件夹并自动执行上述步骤。

不知道你这个问题是否已经解决, 如果还没有解决的话:

本来是打算弄下simulink的,但是吧,考虑了下大概的使用情况,会有挺多部分和之前的system generator系列相重,就不写了(主要还是懒~),打算接下来几篇开始对Matlab进行一些应用,比如本篇的信号调制,还有后面的信号解调以及一些图像处理的应用。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^