在R语言中对HDF5高光谱数据执行逐像素向量归一化
在R中对高光谱HDF5数据逐像素进行L2归一化
1. 加载依赖包
使用rhdf5包处理HDF5文件,先安装并加载:
# 首次使用需安装 if (!require("rhdf5")) { BiocManager::install("rhdf5") library(rhdf5) }
2. 读取HDF5中的高光谱数据
指定文件路径和数据存储路径,读取数据到R环境:
wd <- "你的工作目录路径/" # 替换为实际路径 f <- paste0(wd, "img1.h5") data_path <- "/SITE-NAME/Reflectance/Reflectance_Data" # 读取数据 hs_data <- h5read(f, data_path) # 确认维度是否为(3311, 678, 425) dim(hs_data)
3. 执行逐像素L2归一化
将三维数组重塑为二维矩阵(每行对应一个像素的光谱向量),计算每个向量的L2范数后完成归一化,最后恢复原三维结构:
# 重塑为二维矩阵:(总像素数, 波段数) n_pixels <- dim(hs_data)[1] * dim(hs_data)[2] n_bands <- dim(hs_data)[3] hs_matrix <- matrix(hs_data, nrow = n_pixels, ncol = n_bands) # 计算每个像素光谱向量的L2范数 l2_norms <- sqrt(rowSums(hs_matrix^2)) # 处理范数为0的情况(避免除以0) l2_norms[l2_norms == 0] <- 1 # 执行归一化 hs_matrix_normalized <- hs_matrix / l2_norms # 重塑回原三维维度 hs_data_normalized <- array(hs_matrix_normalized, dim = dim(hs_data))
4. 可选:保存归一化后的数据
将结果写入新的HDF5文件(或原文件,建议先备份原文件):
# 写入新文件 h5createFile(paste0(wd, "img1_normalized.h5")) h5write(hs_data_normalized, paste0(wd, "img1_normalized.h5"), "/Normalized_Reflectance") # 写入原文件(需谨慎操作) # h5write(hs_data_normalized, f, "/SITE-NAME/Reflectance/Normalized_Reflectance")
内容的提问来源于stack exchange,提问作者MGD
相关产品推荐
相关产品推荐

