如何在R中打开读取高光谱ENVI文件?三种尝试均报错求解决方案
核心错误原因
caTools包的read.ENVI函数的headerfile参数要求传入.hdr头文件的完整路径字符串,不能传入readLines读取的内存内容,也不能省略.hdr后缀。- 你的高光谱数据尺寸为5187列×6111行×115波段,总像素数超过32位整数上限,
caTools的read.ENVI对大文件支持较差,会触发整数溢出警告。
解决方案
方案1:修正路径适配caTools要求
首先确认你的文件目录下存在两个匹配的文件:
- 无后缀的原始二进制数据文件:
AISA_Flight_4_resampled - 带
.hdr后缀的头文件:AISA_Flight_4_resampled.hdr
修改代码如下:
library(caTools) dirname <- "S:/LAB-cavender/4_Project_Folders/oakWilt/oak_wilt_image_analyses/R_input/6.15.2021 - Revisions/ENVI export/AISA/Resampled_flights" # 原始数据文件路径(无后缀) img_path <- file.path(dirname, "AISA_Flight_4_resampled") # 头文件路径(需加.hdr后缀) hdr_path <- file.path(dirname, "AISA_Flight_4_resampled.hdr") # 先确认两个文件均存在 print(file.exists(img_path)) print(file.exists(hdr_path)) # 调用读取函数 x <- read.ENVI(filename = img_path, headerfile = hdr_path)
如果运行后依然报整数溢出错误,使用方案2。
方案2:换用terra包读取大尺寸ENVI文件
terra包是R空间数据处理的新一代工具,对大文件支持更好,只要头文件和数据文件在同目录且同名,无需单独指定头文件路径:
# 安装包(首次使用执行) # install.packages("terra") library(terra) dirname <- "S:/LAB-cavender/4_Project_Folders/oakWilt/oak_wilt_image_analyses/R_input/6.15.2021 - Revisions/ENVI export/AISA/Resampled_flights" img_path <- file.path(dirname, "AISA_Flight_4_resampled") # 直接读取,自动识别同目录下的.hdr头文件 x <- rast(img_path)
读取得到的SpatRaster对象可直接用于后续的高光谱分析、空间运算等操作。
内容的提问来源于stack exchange,提问作者Adriana Castillo Castillo
相关产品推荐
相关产品推荐

