茶树 NeRF(Neural Radiance Fields,神经辐射场)三维重建与数据分析可视化系统——基于神经辐射场的茶树三维重建方法实现可视化大屏

基于神经辐射场的茶树三维重建方法实现可视化大屏

茶树 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

主要依赖:PyQt5PyQtWebEnginenumpyopencv-pythonPillowscikit-learnscipy

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.pygenerate_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

GitHub - zhangsansh/-NeRF-Neural-Radiance-Fields-Three.js-ECharts-: 基于神经辐射场的茶树三维重建方法实现可视化大屏 茶树 NeRF(Neural Radiance Fields,神经辐射场)三维重建与数据分析可视化系统。支持从茶树图片生成三维点云模型、交互式 Three.js 展示、ECharts 多维数据分析,以及日志与参数配置管理。 · GitHub基于神经辐射场的茶树三维重建方法实现可视化大屏 茶树 NeRF(Neural Radiance Fields,神经辐射场)三维重建与数据分析可视化系统。支持从茶树图片生成三维点云模型、交互式 Three.js 展示、ECharts 多维数据分析,以及日志与参数配置管理。 - zhangsansh/-NeRF-Neural-Radiance-Fields-Three.js-ECharts-https://github.com/zhangsansh/-NeRF-Neural-Radiance-Fields-Three.js-ECharts-.git

相关推荐
脉动数据行情11 小时前
Python WebSocket 国内商品期货|螺纹钢 & 铁矿石实时行情监听
开发语言·python·websocket
xiaominlaopodaren1 小时前
three.js最小地图运行时(八): 瓦片调试网格
javascript·gis·three.js
circuitsosk1 小时前
智能体任务拆解与执行:基于ReAct+Plan-and-Execute框架的行业Skill构建实录
前端·javascript·python·react.js·react·llm agent·智能体编排
麻雀飞吧1 小时前
近期量化工具怎么选,先看你卡在哪一环
人工智能·python
通信仿真爱好者1 小时前
第【109】期--基于神经网络的OFDM峰均功率比降低方法--python完整代码
python·神经网络·ofdm·限幅滤波·峰均功率比·papr降低
阿图灵1 小时前
OpenCV 图像特征与匹配:SIFT 特征检测与 BFMatcher 暴力匹配
图像处理·人工智能·python·opencv·计算机视觉·sift
Mr数据杨1 小时前
商店商品销量预测助力库存优化
人工智能·数据分析·kaggle竞赛
王志来137944730081 小时前
工控服务器机箱选型决策要素解析:匀天以“快全准省”构建价值坐标
运维·服务器·python·devops
阿图灵2 小时前
OpenCV 实用技巧三连:视频转图片、图片转视频、Pillow 与 OpenCV 互转
图像处理·python·opencv·计算机视觉·音视频·pillow