基于神经辐射场的茶树三维重建方法实现可视化大屏
茶树 NeRF(Neural Radiance Fields,神经辐射场)三维重建与数据分析可视化系统。支持从茶树图片生成三维点云模型、交互式 Three.js 展示、ECharts 多维数据分析,以及日志与参数配置管理。
一、程序功能概述
本系统面向茶树图像的三维重建与健康分析,提供四大功能模块:
| 模块 | 说明 |
|---|---|
| 三维重建 | 上传茶树图片或选择预设模型,基于 NeRF 思路生成三维点云;Three.js 实时渲染,支持旋转/平移/缩放与点击查数 |
| 日志记录 | 查看操作日志、图片识别记录,支持图片预览与手动添加图片 |
| 数据分析 | 11 种 ECharts 图表展示健康度、绿色占比、叶面积指数等指标,支持历史数据对比 |
| 参数配置 | 管理存储路径、窗口与 NeRF 参数,查看数据库统计 |
核心能力
-
图片驱动三维重建:从单张茶树照片提取冠层掩码,映射为三维点云
-
多种茶树模型:标准、幼龄、成熟、灌木型、密植茶园 5 种演示模型
-
点击交互:点击模型上的点,查看区域(树干/树冠/叶层)、健康度、NDVI、密度等
-
图片格式:支持 PNG、JPEG、BMP、TIFF、WebP、GIF 等 24 种常见格式
-
数据持久化:SQLite 存储日志、图片记录、分析结果;按日期目录保存图片与参数
二、技术栈与基础框架
2.1 整体架构
┌─────────────────────────────────────────────────────────┐
│ PyQt5 主窗口 (MainWindow) │
│ ┌─────────────┬─────────────┬─────────────┬───────────┐ │
│ │ 三维重建 │ 日志记录 │ 数据分析 │ 参数配置 │ │
│ │ Viewer3D │ LogPage │ ChartPage │ ConfigPage│ │
│ └──────┬──────┴──────┬──────┴──────┬──────┴─────┬─────┘ │
│ │ │ │ │ │
│ ┌──────▼──────┐ ┌────▼────┐ ┌──────▼──────┐ ┌───▼───┐ │
│ │ Three.js │ │ SQLite │ │ ECharts │ │ JSON │ │
│ │ (WebEngine) │ │ + 文件 │ │ (WebEngine) │ │ 配置 │ │
│ └──────┬──────┘ └────┬────┘ └─────────────┘ └───────┘ │
│ │ │ │
│ ┌──────▼─────────────▼──────────────────────────────┐ │
│ │ NeRF 重建模块 (OpenCV + NumPy + scikit-learn) │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
2.2 技术组成
| 层次 | 技术 | 用途 |
|---|---|---|
| GUI 框架 | PyQt5 | 主窗口、页面布局、对话框、文件选择 |
| 嵌入式浏览器 | PyQtWebEngine | 承载 Three.js 三维视图与 ECharts 图表 |
| 三维渲染 | Three.js r128 | 点云、树干网格、光照、点击拾取 |
| 图表 | ECharts 5.4 | 堆叠面积图、雷达图、盒须图等 11 种图表 |
| 图像处理 | OpenCV | 颜色空间转换、植被掩码、距离变换、轮廓分析 |
| 数值计算 | NumPy | 点云坐标、颜色数组运算 |
| 机器学习 | scikit-learn (KMeans) | 图像颜色聚类分析 |
| 数据库 | SQLite3 | 日志、图片、分析记录、参数持久化 |
| 配置 | JSON | config/settings.json 运行时配置 |
2.3 项目目录结构
python6/
├── main.py # 程序入口
├── requirements.txt # Python 依赖
├── config/
│ └── settings.json # 系统配置
├── core/ # 核心模块
│ ├── config_manager.py # 配置读写
│ ├── database.py # SQLite 数据库
│ ├── image_loader.py # 24 种图片格式加载
│ ├── logger.py # 日志记录
│ └── storage.py # 图片与参数文件存储
├── nerf/
│ └── reconstruction.py # NeRF 茶树三维重建算法
├── ui/
│ ├── main_window.py # 主窗口与导航
│ ├── styles.py # 全局样式(六号字、暗色主题)
│ ├── pages/ # 四个功能页面
│ ├── widgets/ # Three.js 查看器、图表、导航组件
│ └── dialogs/ # 设置对话框
├── assets/
│ └── three_viewer.html # Three.js 页面(运行时生成)
└── data/ # 运行时数据(日志、图片、数据库)
├── logs/
├── images/
└── db/
三、Python 算法说明
3.1 NeRF 茶树三维重建(nerf/reconstruction.py)
本系统采用简化版 NeRF 体积渲染流程,从单张 RGB 图像生成三维点云,主要步骤如下:
(1)植被掩码提取
-
将图像转换到 HSV 色彩空间
-
使用绿色阈值
[H:25--90, S:35--255, V:35--255]生成初始掩码 -
形态学开/闭运算 去噪,中值滤波平滑
-
保留最大连通轮廓作为茶树冠层区域
(2)图像特征分析
-
绿色占比:掩码像素数 / 总像素数
-
KMeans 聚类(k=5):提取 dominant 颜色簇
-
叶面积指数 (LAI) 估算 :
green_ratio × (灰度均值/255) -
冠层面积比:轮廓面积 / 图像面积
-
健康度评分 :
min(1.0, green_ratio × 1.5 + lai × 0.5) -
NDVI 近似 :
(G - R) / (G + R),用于单点属性标注
(3)距离变换与深度映射
-
对掩码做 欧氏距离变换 (cv2.distanceTransform)
-
归一化后作为"冠层中心度",用于:
-
加权采样(中心区域点更密集)
-
三维高度与外扩:
py = 0.55 + d×1.25 + (1-y/h)×0.75
-
(4)结构化树干生成
-
按环形分层在圆柱体上采样点
-
锥形半径:下粗上细,模拟真实树干
-
树皮颜色:棕褐色随机微扰
(5)树冠点云采样
-
从掩码像素按距离变换加权随机采样
-
图像坐标经椭球投影 映射到三维空间
(px, py, pz) -
颜色直接取自原图像素,并按 NDVI 增强绿色通道
(6)叶层体积填充
-
在冠幅椭球内补充随机点,使树冠更饱满
-
颜色取自绿色像素均值
(7)演示模型(无图片时)
-
5 种类型:标准 / 幼龄 / 成熟 / 灌木 / 密植
-
统一采用「环形树干 + 椭球冠层」参数化生成
3.2 数据分析算法(ui/pages/chart_page.py)
-
历史数据聚合:可选结合 SQLite 中最近 20 条分析记录
-
累积均值:对 health_score 序列做逐步累积平均
-
线性回归 :
numpy.polyfit拟合健康度趋势 -
盒须图 :
numpy.percentile计算 Q1/Q2/Q3 与 min/max -
图表类型:堆叠面积、柱状、环形、饼图、雷达、散点、盒须等共 11 种
3.3 图像加载(core/image_loader.py)
-
优先使用 OpenCV
imread读取 -
失败时回退 Pillow 解码(扩展格式兼容性)
-
支持 24 种扩展名(见配置文件与文件对话框过滤器)
四、安装与运行
4.1 环境要求
-
Python 3.8+
-
Windows / macOS / Linux(已在 Windows 10/11 测试)
4.2 安装依赖
cd python6
pip install -r requirements.txt
主要依赖:PyQt5、PyQtWebEngine、numpy、opencv-python、Pillow、scikit-learn、scipy
4.3 启动程序
python main.py
或使用 Windows 下的:
py main.py
说明:三维与图表页面需联网加载 Three.js、ECharts CDN;首次打开三维页会稍等引擎初始化。
五、使用方式与操作流程
5.1 界面布局
-
顶部标题栏:系统名称 + 「设置」按钮
-
中部内容区:当前功能页面
-
底部导航栏:三维 / 日志 / 图表 / 配置 四个入口
-
默认居中半屏启动(约屏幕 65%),可在设置中改为最大化或自定义尺寸
5.2 三维重建页 --- 推荐流程
启动程序 → 进入「三维重建」页
│
├─ 方式 A:选择图片重建
│ 1. 点击「选择图片」→ 选取茶树照片(建议 JPG/PNG)
│ 2. 左侧预览区显示上传照片
│ 3. 自动开始 NeRF 重建(也可手动点「图片重建」)
│ 4. 中间 Three.js 窗口显示三维模型
│ 5. 鼠标左键旋转、右键平移、滚轮缩放
│ 6. 点击模型上的点 → 右侧显示区域/健康度/NDVI 等
│
└─ 方式 B:生成演示模型
1. 在模型类型下拉框选择(标准/幼龄/成熟/灌木/密植)
2. 点击「生成模型」
3. 可「导出」为 JSON 文件
工具栏说明(两行):
| 第一行 | 选择图片、模型类型、生成模型、导出、重置视角、图片重建、进度条 | | 第二行 | NeRF 参数:采样数、训练轮次、分辨率、学习率 |
5.3 数据分析页 --- 推荐流程
三维重建完成(或手动加载图片)
│
├─ 重建完成后分析数据自动同步到图表页
│
└─ 图表页操作
1. 勾选需要的图表类型(默认全选)
2. 设置置信度、批次、指标、布局
3. 可选「结合历史」对比以往分析记录
4. 点击「开始分析」刷新图表
5. 或点击「加载图片」单独分析一张图
5.4 日志记录页
-
刷新:重新加载数据库中的日志与图片列表
-
清空显示:仅清空当前界面日志文本(不删数据库)
-
添加图片:手动导入图片并写入记录
-
左侧为操作日志,右侧为图片列表与预览
5.5 参数配置页
-
设置日志目录、图片目录、数据库路径
-
调整字体大小、窗口宽高、NeRF 采样与轮次
-
保存配置后立即生效
-
窗口与页面设置:打开高级设置对话框(启动方式、页面比例、图表布局等)
5.6 系统设置(⚙ 设置)
| 选项卡 | 内容 |
|---|---|
| 窗口 | 宽高、启动方式(居中半屏/最大化/自定义)、半屏比例、字体 |
| 页面 | 默认启动页、三维/图表/日志区域比例 |
| 三维模型 | 默认模型类型、是否自动加载演示 |
| 图表 | 布局模式、图表高度、网格列数、是否默认结合历史 |
六、配置说明
配置文件:config/settings.json
| 配置项 | 说明 | 默认值 |
|---|---|---|
font_size |
界面字号(六号≈8pt) | 8 |
window_startup |
启动方式:centered / maximized / custom |
centered |
window_size_ratio |
居中启动时占屏幕比例 | 0.65 |
pages.viewer.auto_demo |
启动是否自动加载演示模型 | true |
nerf.num_samples |
体积采样密度 | 64 |
nerf.num_epochs |
训练轮次(进度模拟) | 100 |
nerf.resolution |
重建分辨率 | 256 |
analysis.use_history |
分析是否结合历史 | false |
七、数据存储
| 路径 | 内容 |
|---|---|
data/logs/ |
按日期的文本日志 |
data/images/YYYY-MM-DD/ |
按日期归档的原始/处理图片 |
data/images/.../params/ |
NeRF、分析参数 JSON |
data/db/app.db |
SQLite:日志表、图片表、分析记录表 |
八、三维交互说明
| 操作 | 功能 |
|---|---|
| 左键拖动 | 旋转模型 |
| 右键拖动 | 平移视角 |
| 滚轮 | 缩放 |
| 单击模型 | 绿色脉冲特效 + 右侧/浮层显示该点数据 |
| 重置视角 | 恢复默认相机位置 |
渲染特性:树干圆柱网格 + 双层点云(核心点 + 发光外层)+ 多光源 + ACES 色调映射。
九、常见问题
Q:选择 WebP 图片后重建失败? A:部分环境下 OpenCV 对 WebP 支持不完整,建议转换为 JPG 或 PNG 后再导入。
Q:三维页面空白? A:检查网络能否访问 jsDelivr CDN;稍等数秒待 Three.js 初始化;切换页面再返回三维页。
Q:如何修改默认字号与布局? A:点击右上角「设置」,或在「参数配置」页修改字体大小后保存。
Q:导出的 JSON 模型包含什么? A:点坐标 points、颜色 colors、元数据 metadata(含分析结果与 NeRF 参数)。
十、开发与扩展
-
新增模型类型 :在
nerf/reconstruction.py的generate_model()中注册 builder -
新增图表 :在
chart_page.py的_build_charts()中追加 ECharts option -
调整 UI 样式 :修改
ui/styles.py中的DARK_THEME与布局常量 -
NeRF 参数 :通过界面第二行 spinbox 或
config/settings.json调整
十一、许可证与说明
本项目为茶树 NeRF 三维重建可视化演示系统。NeRF 模块采用基于 OpenCV 与几何采样的简化实现,用于教学与展示;非完整深度学习 NeRF 训练 pipeline。生产环境如需更高精度,可替换为真实 NeRF/MVS 重建后端,并保留现有 PyQt + Three.js 前端框架。
项目名称 :基于神经辐射场的茶树三维重建方法实现可视化大屏 入口文件 :main.py 推荐运行 :python main.py





