基于elliptic Fourier descriptors的形状重建及Momocs包使用求助
耳石椭圆傅里叶描述子归一化与分组平均形状重建R脚本
实现步骤
1. 依赖包安装与加载
# 首次运行先安装依赖包 # install.packages(c("Momocs", "readxl", "dplyr", "RColorBrewer")) library(Momocs) library(readxl) library(dplyr) library(RColorBrewer)
2. 数据导入与格式转换
将你获取的Excel数据存到本地后,替换下方路径导入数据:
# 导入本地Excel数据,替换为你自己的文件存储路径 raw_data <- read_excel("替换为你的本地文件绝对路径/本地数据文件名.xlsx") # 拆分分组信息与EFD系数 # 假设数据中站点分组列名为site,EFD系数从第2列开始,按A1/B1/C1/D1...An/Bn/Cn/Dn顺序排列 site_group <- raw_data$site efd_matrix <- as.matrix(raw_data[, !colnames(raw_data) %in% c("site")]) # 转换为Momocs可识别的EFD对象 efd_obj <- Out(efd = efd_matrix, fac = data.frame(site = as.factor(site_group)))
3. 基于一次谐波的EFD归一化
# 以第一谐波为基准,完成大小、方向、位置的归一化 efd_normalized <- efourier_norm(efd_obj, align = TRUE, start = 1)
4. 按站点计算平均形状
# 按站点分组计算组内平均形状 site_mean_shapes <- efd_normalized %>% group_by(site) %>% mean()
5. 结果可视化验证
# 叠加展示所有站点的平均形状对比 pile(site_mean_shapes, cols = brewer.pal(nlevels(efd_normalized$fac$site), "Set2"), lwd = 2) # 分面单独展示每个站点的平均形状 facets(site_mean_shapes, ~site, nc = 2)
注意事项
- 导入数据前需确认你的Excel表列结构:如果分组列名不是
site,或者EFD系数的起始列、排列顺序和上述假设不一致,需对应调整代码中的列筛选逻辑 - 若运行时报错谐波数量不匹配,可先打印
dim(efd_matrix)确认列数为4的整数倍,对应你提取的谐波数量 - 归一化后可通过
efourier_contour(efd_normalized[1])绘制单个样本的轮廓,验证归一化效果是否符合预期
内容的提问来源于stack exchange,提问作者karadeniz
相关产品推荐
相关产品推荐

