news 2026/5/3 6:01:27

基于三维重建的大豆表型计算及生长模拟方法器官分割【附代码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于三维重建的大豆表型计算及生长模拟方法器官分割【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)多视角点云配准与ISS-CPD-ICP精细重建:

针对Kinect2.0采集的活体大豆多视角点云,首先进行直通滤波剔除背景,颜色阈值分割提取植株区域,统计滤波去除离群点。配准采用关键点提取加相干点漂移粗配准与迭代最近点精配准的串行策略。首先计算每个点云的内部形状签名ISS特征点,将点数压缩至原始点云的12%,然后基于ISS特征点用CPD算法进行粗配准,获得旋转平移参数的初始解,再用标准ICP在全部点上进行精配准提升对齐精度。该方法记为ISS-CPD-ICP,在10株大豆的数据集上平均配准误差RMSE为0.0128,比直接ICP减少0.0018,配准时间从15.1s缩短至2.83s,满足了高通量表型采集的效率需求。

(2)基于Minkowski距离场的茎叶分割与DFSP算法:

采用Minkowski距离场编码点云的形态结构,距离场值反映每个点到其第k近邻的距离,能突出茎与叶的连接区域。使用Quickshift++聚类算法在距离场中搜索局部高值区域作为器官种子点,实现茎秆和叶片的初始定位。茎秆分割通过识别茎基部端点(Z坐标最低、局部曲率小)并应用区域生长算法从种子点沿茎秆延伸。叶片实例分割采用基于距离场的分割算法DFSP,结合欧氏聚类和图割优化,在距离场引导下分离彼此接触的叶片。算法在由284片叶片组成的验证集上取得了精确率0.892、召回率0.926、F1分数0.908,优于基于拉普拉斯骨架的方法,其中F1分数提升了0.079,且对遮挡和叶片卷曲有良好适应性。

(3)多表型参数计算与Richards生长模拟模型:

基于分割后的器官点云,分别计算叶面积指数采用体元法,株高由z方向最高点与最低点差,冠幅由投影点云的凸包面积换算,茎粗拟合圆柱模型,叶长叶宽用OBB包围盒方法。与人工测量值比较,各个参数的决定系数R²均达0.94以上,均方根误差较小。采用Richards模型拟合各表型参数随生长时间的变化,模型形式为Y(t)=A(1+be^{-kt})^{1/(1-m)},参数通过非线性最小二乘拟合得到。模拟结果显示,大豆的叶面积指数速生期出现在出苗后42d~55d,冠幅速生期提早约5天,茎粗速生期则延后约8天。模拟值与计算值的R²>0.936,为大豆品种选育提供了定量化动态预测工具。

import numpy as np import open3d as o3d from sklearn.cluster import KMeans # ISS关键点提取(降采样) def iss_keypoints(pcd, salient_radius=0.02, non_max_radius=0.02): pcd.estimate_covariances(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=salient_radius)) cov = pcd.covariances eigenvalues = np.linalg.eigvalsh(cov) # (N,3) lambda1, lambda2, lambda3 = eigenvalues[:,2], eigenvalues[:,1], eigenvalues[:,0] saliency = lambda1 / (lambda1+lambda2+lambda3+1e-8) # 非极大值抑制 idx = np.argsort(saliency)[::-1] selected = [] for i in idx: if not any(np.linalg.norm(np.array(pcd.points[i]) - np.array(pcd.points[j])) < non_max_radius for j in selected): selected.append(i) return pcd.select_by_index(selected[:int(len(pcd.points)*0.12)]) # 距离场计算与DFSP分割 def minkowski_distance_field(pcd, k=3): points = np.asarray(pcd.points) dists = [] tree = o3d.geometry.KDTreeFlann(pcd) for i in range(len(points)): [_, idx, _] = tree.search_knn_vector_3d(points[i], k+1) d = np.mean([np.linalg.norm(points[i]-points[j]) for j in idx[1:]]) dists.append(d) return np.array(dists) # Quickshift++聚类定位种子点(模拟) def quickshift_plusplus(dist_field, thresh): # 伪聚类 kmeans = KMeans(n_clusters=int(thresh), random_state=0).fit(dist_field.reshape(-1,1)) labels = kmeans.labels_ return labels # Richards生长模型拟合 def richards_growth(t, A, b, k, m): return A / (1 + b * np.exp(-k * t))**(1/(1-m)) from scipy.optimize import curve_fit def fit_richards(t_data, y_data): popt, _ = curve_fit(richards_growth, t_data, y_data, p0=[100, 50, 0.05, 0.5], maxfev=5000) return popt


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 5:54:31

iOS微信红包助手:智能抢红包插件完整使用指南

iOS微信红包助手&#xff1a;智能抢红包插件完整使用指南 【免费下载链接】WeChatRedEnvelopesHelper iOS版微信抢红包插件,支持后台抢红包 项目地址: https://gitcode.com/gh_mirrors/we/WeChatRedEnvelopesHelper WeChatRedEnvelopesHelper是一款高效的iOS微信抢红包插…

作者头像 李华
网站建设 2026/5/3 5:42:56

Helm-secrets插件实战:Kubernetes配置中敏感数据的安全加密管理

1. 项目概述&#xff1a;为什么我们需要一个“秘密”管理器&#xff1f;在云原生和Kubernetes的世界里&#xff0c;配置管理是个绕不开的话题。Helm作为Kubernetes的包管理器&#xff0c;极大地简化了应用的部署和生命周期管理。但随之而来的一个棘手问题是&#xff1a;如何安全…

作者头像 李华