基于无人机遥感的植被覆盖度测量实践与经验分享

基于无人机遥感的植被覆盖度测量实践与经验分享

分享基于无人机遥感的植被覆盖度测量实验经验,主要任务是利用大疆Mavic 3无人机进行植被覆盖度地面测量,包含样方设计、航线规划、现场拍摄以及借助AI算法计算覆盖度。

一、实验概况与目的

实验测量的植被覆盖度(Fractional Vegetation Cover, FVC)定义为植被地上部分垂直投影面积占统计区总面积的百分比,是反映生态环境状态的重要参量,传统地面测量耗时耗力,而无人机遥感凭借其高机动性和高分辨率成为主流手段。本次实验的主要目的是:

  • 掌握无人机遥感监测的标准化操作流程
  • 学习植被覆盖度地面测量的技术方法
  • 熟悉使用AI(DeepSeek算法)完成植被覆盖度计算
  • 总结无人机监测中的常见问题及解决方案二、技术方法与工作流程

二、技术方法与工作流程

2.1 植被覆盖度地面测量技术简介

植被覆盖度指单位面积内植被冠层(叶、茎、枝)垂直投影面积所占的比例。目前最常用的地面测量方法是照相法——利用数码相机或无人机拍摄样方照片,然后通过图像识别计算植被像素占比。本次实验采用无人机垂直向下拍摄小样方(1m×1m),再通过算法批量计算覆盖度。

2.2 工作流程全记录

整个流程分为三个阶段:前期准备、现场作业、数据处理。下面逐一展开。

2.2.1 前期准备

① 样方设计
基于最新的高分影像(如Google Earth、91卫图),在测区内选择具有代表性的样方,确保覆盖不同植被类型(草地、灌木等)和覆盖度梯度。每个样方大小为10m×10m,并在其中均匀布设9个1m×1m的小样方用于地面验证。

② 设备检查
使用的设备是大疆Mavic 3,每次出发前必须完成以下检查:

检查项目标准要求检查方法
电池电量≥80%短按电池开关查看指示灯
螺旋桨无损坏,安装正确目视检查,确认标记对应
存储卡剩余空间≥32GB在DJI Fly App中查看
云台无遮挡,可自由活动开机观察云台自检
固件版本最新版本连接DJI Fly检查更新

③ 飞行计划
在DJI Fly App中规划自动航线:

  • 飞行高度:根据样方大小设置,一般15~20m可保证地面分辨率优于1cm
  • 重叠率:航向80%,旁向70%(确保后期拼接或覆盖度计算无遗漏)
  • 飞行速度:平稳模式5m/s
2.2.2 现场作业

① 样方定位
使用RTK或高精度GPS测量样方四个角点坐标,并在现场用标尺或喷漆标记。对于1m×1m小样方,采用预先制作好的1m×1m样方框放置在地面。

② 无人机飞行

  • 自动航线飞行:起飞后执行预设航线,获取整个样方的正射影像。
  • 手动拍摄小样方:切换至手动模式,将无人机悬停在小样方正上方2m高度,云台角度调至-90°(垂直向下),拍摄照片。注意保持画面清晰,避免阴影遮挡。

③ 地面测量
同时使用数码相机垂直拍摄小样方照片,并记录样方内植被类型、高度等信息,用于后续验证。

2.2.3 数据处理

① 照片整理
按样方编号建立文件夹,将无人机拍摄的小样方照片和地面验证照片分类存放。照片命名格式统一为:样方编号_小样方编号.jpg(如P01_01.jpg)。

② 植被覆盖度计算
采用基于Lab色彩空间的植被识别算法(我称之为SHAR-LAB FVC),该算法能够有效抵抗阴影和过曝的影响,准确提取绿色植被。

以下是完整的Python脚本,只需修改图片路径即可运行:

""" SHAR-LAB FVC 植被覆盖度计算脚本 功能:读取指定无人机照片,基于Lab色彩空间进行抗阴影植被分类,计算植被像素占比。 用法:直接修改下方 IMAGE_PATH 变量为图片路径,然后运行。 """ import numpy as np from skimage import io, color import os import sys # ================== 用户配置区 ================== # 请将下面的路径改为您的图片文件路径 IMAGE_PATH = "D:/drone_photos/sample_plot.jpg" # 例如:"/home/user/photo.jpg" # ============================================= def shar_lab_fvc(image_path, a_thresh=2, b_thresh=2, L_min=5, L_max=98): """ 使用SHAR-LAB FVC算法计算植被覆盖度。 参数: image_path : str -- 图像文件路径 a_thresh : float -- a* 通道上限(小于此值视为偏绿) b_thresh : float -- b* 通道下限(大于此值视为偏黄/绿) L_min : float -- 亮度下限(排除阴影等过暗区域) L_max : float -- 亮度上限(排除过曝区域) 返回: fvc : float -- 植被覆盖度百分比,若处理失败返回None """ # ---------- 文件存在性检查 ---------- if not os.path.exists(image_path): print(f"错误:文件不存在 -> {image_path}") return None # ---------- 图像读取 ---------- try: img = io.imread(image_path) except Exception as e: print(f"读取图像失败:{e}") return None # ---------- 图像格式归一化 ---------- if img.ndim == 2: # 灰度图 -> 转为RGB img = color.gray2rgb(img) elif img.shape[2] == 4: # 含Alpha通道 -> 去除Alpha img = img[:, :, :3] elif img.shape[2] != 3: print(f"不支持的图像通道数:{img.shape[2]},需要3通道RGB图像。") return None # ---------- 转换到Lab色彩空间 ---------- # rgb2lab要求输入范围[0,1]或[0,255]均可,函数会自动处理 lab = color.rgb2lab(img) L = lab[:, :, 0] # 亮度 (0~100) a = lab[:, :, 1] # 绿-红分量 (负值偏绿) b = lab[:, :, 2] # 蓝-黄分量 (正值偏黄) # ---------- 植被像素判别(核心规则)---------- # 条件:a* 小于阈值(偏绿),b* 大于阈值(偏黄/绿),且亮度在合理范围(抗阴影) vegetation_mask = (a < a_thresh) & (b > b_thresh) & (L > L_min) & (L < L_max) # ---------- 计算覆盖度 ---------- veg_pixels = np.sum(vegetation_mask) total_pixels = vegetation_mask.size fvc = (veg_pixels / total_pixels) * 100.0 return fvc if __name__ == "__main__": # ---------- 确定图片路径(优先使用命令行参数)---------- if len(sys.argv) > 1: image_path = sys.argv[1] else: image_path = IMAGE_PATH if not image_path: print("错误:未指定图片路径。请在代码中设置 IMAGE_PATH 或在命令行提供路径。") sys.exit(1) # ---------- 计算并输出结果 ---------- fvc = shar_lab_fvc(image_path) if fvc is not None: print(f"\n植被覆盖度 FVC = {fvc:.2f}%") else: sys.exit(1)

运行环境:需要安装numpy和scikit-image,在终端执行:

pip install numpy scikit-image

样方尺度覆盖度计算:对于整个样方(10m×10m),其覆盖度等于9个小样方照片覆盖度的算术平均值。


三、大疆无人机遥感监测标准化操作手册

3.1 飞行前准备

  • 环境检查:风速<8m/s,无降水,能见度>5km;尽量避开正午强光(10:00-14:00),以免产生过多阴影;远离高压线、通讯基站等电磁干扰源。
  • 设备准备:按照前文检查清单逐项确认,准备备用电池。

3.2 飞行操作流程

3.2.1 自动航线飞行
  1. 在DJI Fly App中进入“航线飞行”模式,规划矩形区域(覆盖整个样方)。
  2. 设置飞行高度、速度、重叠率(建议航向80%,旁向70%)。
  3. 执行自动飞行,实时关注飞行状态和电量,必要时手动干预。
3.2.2 手动拍摄小样方
  1. 降落无人机,将样方框放置在地面。
  2. 起飞无人机至小样方正上方2m高度,调整云台垂直向下。
  3. 切换至拍照模式,连续拍摄2~3张,确保清晰无模糊。
  4. 移动样方框,依次拍摄所有小样方。

3.3 数据处理流程

  1. 照片导出:从无人机存储卡中导出照片,可利用DJI软件获取每张照片的经纬度(用于位置验证)。
  2. 筛选:删除模糊、过曝或欠曝的照片。
  3. 重命名:按“样方编号_小样方编号”格式命名,便于批处理。
  4. 计算:运行Python脚本批量计算每个小样方的覆盖度,最后取平均得到样方覆盖度。

四、参考文献

  1. GB/T 41282-2022《植被覆盖度遥感产品真实性检验》
  2. DJI Mavic 3用户手册v2.3

Read more

【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型

【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】 🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】  感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 目录 🎈本地部署模型 🎉安装Ollama 🎉安装 Open WebUI 🎊安装Docker 🥞启动 Hyper-v 🥞 安装 WSL(适用于Linux的Windows的子系统): 🥞安装Docker  🎊Docker 部署 Open WebUI 🎈本地部署模型 🎉安装Ollama 官网: Ollama 然后进行一下下载 安装完成之后是没有提示的,然后我们需要去测试一下。(这里我是以QWen为例子,大家可以尝试其他的模型) 打开一个终端,

前端设计与布局常用术语(前端术语中英对照速查表)

文章目录 * 🧭 前端设计与布局常用术语速通指南 * 🧱 一、基础结构类术语 * 1️⃣ 容器(Container) * 2️⃣ 布局(Layout) * 3️⃣ 侧栏 / 顶栏 / 底栏 * 🎨 二、视觉与层次类术语 * 4️⃣ 卡片 / 面板(Card / Panel) * 5️⃣ 模态框 / 弹窗(Modal / Dialog) * 6️⃣ 层级(Z-index / Layer) * 7️⃣ 阴影(Shadow) * 8️⃣ 圆角(Border-radius) * 9️⃣ 留白(Padding / Margin / Spacing) * 🔟 分隔(Divider / Border) * 🎨 背景(Background) * ✍️ 三、排版与内容类术语 * 1️⃣1️

情侣飞行棋前端分享源码,已经网络部署可直接免费访问

情侣飞行棋前端分享源码,已经网络部署可直接免费访问

文章目录 * 情侣飞行棋 * 📋 目录 * 🎮 项目介绍 * 核心玩法 * ✨ 功能特点 * 游戏功能 * 视觉体验 * 技术亮点 * 🛠 技术栈 * 📁 文件结构 * 🎯 游戏规则 * 基本规则 * 回合流程 * 📸 界面预览 * 游戏主界面 * 棋子选中效果 * 任务弹窗 * 游戏结束画面 * 🚀 快速开始 * 环境要求 * 启动方式 * 方式一:直接打开(bug) * 方式二:本地服务器(推荐,并不复杂) * 游戏操作 * 🎨 样式亮点 * 棋子视觉效果 * 配色方案 * 响应式设计 * 🔧 扩展指南 * 添加新任务 * 修改棋子图片 * 自定义样式 * 源码分享 * 注意事项 情侣飞行棋 一款基于 Vue 3 和原生 JavaScript 开发的网页版双人飞行棋

HTML转Word零基础指南:5分钟掌握前端文档生成

HTML转Word零基础指南:5分钟掌握前端文档生成 【免费下载链接】html-docx-jsConverts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 还在为如何将网页内容导出为可编辑的Word文档而头疼吗?html-docx-js为你带来了革命性的解决方案!这个轻量级JavaScript库能够直接在浏览器中完成HTML到DOCX格式的转换,无需任何服务器支持。 为什么你需要这个工具 想象一下这样的场景:用户在网页编辑器中精心排版了一份报告,需要保存为Word格式进行后续编辑。传统方案需要将内容发送到服务器处理,不仅增加系统复杂度,还影响用户体验。 html-docx-js的独特之处在于它利用Microsoft Word的"altchunks"功能,通过嵌入MHT文档来处理HTML元素的转换,真正实现了前端文档生成。 核心功能一览 * 纯前端实现:无需服务器支持,降低系统依赖 * 丰富格式支持:文本、图片、列表、表格等一应俱