当前位置: 首页 > news >正文

【果树农药喷洒机器人】Part6:基于深度相机与分割掩膜的果树冠层体积探测方法

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、引言
  • 二、树冠体积测量对比方法
    • 2.1冠层体积人工测量法
    • 2.2冠层体积拟合测量法
  • 三、基于深度相机与分割掩膜探测树冠体积方法
    • 3.1像素值与深度值的转换
    • 3.2树冠体积视觉探测法
    • 3.3实验分析
  • 总结


一、引言

果树靶标探测是实现农药精准喷施的关键环节,本章以果树冠层体积的计算结果作为实现变量喷药决策的数据依据。基于上一章实例分割模型对树冠图像分割成掩膜的基础上,提出一种基于深度相机的果树冠层体积探测方法,即视觉探测法。采用深度相机作为感知单元,通过扫描果树获得冠层深度图像,其深度值表示冠层与相机之间的实际距离,通过换算得出树冠掩膜的像素点代表的实际面积,进而估算出单棵树冠的真实体积,并与人工测量法进行比较,以分析视觉探测法的精度。

二、树冠体积测量对比方法

2.1冠层体积人工测量法

本节对人工测量树冠体积的方法进行探究,并将其结果作为比较基准。传统的人工测量方法简单地将果树冠层水平截面近似于椭圆,通过将冠层等高度分割为多份圆台,最后求和得出冠层体积。然而,树冠的轮廓形状一般不规则,因此难以确定椭圆截面的长、短半轴;再者,被分割的树冠部分并不一定只是圆台的形状。因此传统的人工测量结果并未能真实反映树冠体积,其测量精度较难保证。
为得出果树冠层较为精确的人工测量结果,本章在传统方法的基础上进行优化,测量步骤具体如下:

首先,将单棵果树的冠层从上到下看作由圆台、锥体或是其他近似的规则几何体组成;
接着,将其水平分割成多个独立的几何体,截面简化为圆形。
最后,根据各部分形状进行单独计算并相加得到整个冠层体积。

以纺锤形冠层的果树为例进行分析,绘制了人工测量冠层体积的示意图,如图4-1所示。图中的树冠近似锥形,但并不规则,其中上、下两层近似圆锥,而中间部分近似圆台。为便于计算,本方法使用皮尺直接测量出的截面周长替换半径,即r = l/2π,并代入基础式中。通过以下式推导出树冠体积的人工测量模型。
在这里插入图片描述

2.2冠层体积拟合测量法

由于柑橘树冠属于类球体型,本节根据单棵树冠的外轮廓形状拟合成一个相近的、有规则的立方体,进而实现对体积的估算,该方法简称为拟合测量法,下文均以此替代。以成熟期的柑橘树为例,其树冠拟合过程如图4-2所示。
在这里插入图片描述
具体处理步骤如下:
步骤1:图4-2(a)为原始图像,经过MSEU R-CNN实例分割模型处理后,得到图4-2(b)所示的实例分割效果图;
步骤2:通过剔除背景仅保留树冠掩膜部分,如图4-2(c)所示;
步骤3:之后采用图像二值化、开运算等图像处理操作,提取出树冠掩膜的轮廓(是否贴近于原始轮廓取决于图像分割精度),见图4-2(d);
步骤4:以掩膜轮廓下窄上宽的特征,适合拟合成图4-2(e)的梯形;
步骤5:最后通过梯形绕中轴线旋转360°,拟合成图4-2(f)所示的圆台。

三、基于深度相机与分割掩膜探测树冠体积方法

3.1像素值与深度值的转换

为探究二维图像与三维空间之间的转换关系,根据所用视觉传感器不同,其方法各异。若使用普通相机采集图像,一般采用标定法获取单位像素代表的实际面积(下文均以A表示该值)。例如:丁为民等将黑色硬纸板作为标定物,通过图像处理软件计算多个采样距离下标定板的A值,利用该值和对应的采样距离制成散点图,发现A与采样距离之间具有明显的幂函数关系。然而,每个普通相机内参可能有所不同,若要获得较为准确的A值,均要进行相对复杂的标定实验才能得到幂函数中合适的系数。本章以D435i深度相机为数据采集设备,该款相机配备了二次开发功能包,其中就有采用欧几里得度量法(指用于测量n维空间中两个点之间的真实距离D(x, y),或称为欧氏距离),其计算原理由如下式表示:
在这里插入图片描述
通过第3章的实例分割算法可获得树冠的掩膜,但掩膜以二维图像的像素量表示,并非树冠真实参数,不能作为精准喷施的决策依据。由于D435i深度相机可同时拍摄目标树冠的RGB图像和深度图像,采用欧几里得度量法可测量深度图像中的欧氏距离Hr;通过OpenCV图像处理库中的算法计算,可获得RGB图像中树冠的像素高度Hp,两者比值的平方即为A值。该值再乘以掩膜像素面积,从而计算出树冠垂直投影面的实际面积Sr。具体计算过程通过如下的式表示:
在这里插入图片描述

3.2树冠体积视觉探测法

本节基于实例分割模型的处理结果,并结合上节所述方法,对单株柑橘树冠层的几何特征进行探测,主要参数包括树冠面积、高度、宽度以及体积,其探测原理的示意图如图4-4所示。

在这里插入图片描述
针对以相机对果树冠层体积进行探测的问题,丁为民等提出“多点测量法”,通过构建树冠实际垂直投影面积Sr与树冠体积对数lnV间的模型,研究两者之间的相关性,即基于已知的冠层面积来推算体积。为得出不同果树Sr与lnV的相关性,丁为民的科研团队通过实验构建了梨树、桂花树等果树体积计算模型。实验结果表明,该模型的决定系数均在0.9以上,说明Sr与lnV之间存在明显的相关性;同时也表明在不同树种之间,树冠垂直投影面与树冠体积的线性关系规律是成立的。
基于上述学者的研究,本章对果园内的20棵柑橘树进行采样,并在树冠垂直投影面积Sr的基础上,结合人工测量法准确测得的树冠体积V,以最小二乘法构建柑橘树冠层的Sr与lnV间的关系模型,即“基于深度相机和分割掩膜的果树树冠体积探测方法”,简称为“视觉探测法”,其相关性结果如图4-5所示。
在这里插入图片描述

3.3实验分析

上一节采用三种测量模型并对所选8棵柑橘树进行了体积探测,得出了各个方法对应的树冠体积平均值。本节将三种树冠体积探测方法的测量结果汇总于表4-4中。并根据误差评估式计算出误差、样本标准差,作为误差评估指标。其中,误差1和误差2分别指拟合测量法、视觉探测法跟人工测量法之间的误差值。为更为直观地对比三种测量手段得到的体积值之间的差距,绘制了图4-9所示的体积平均值以及标准差条形图。

在这里插入图片描述
根据表4-4中树冠体积平均值以及标准差,绘制了图4-10所示的折线图,综合展示了三种方法测量得到的8棵橘树冠层体积。按照大小依次排序为:橘树3>橘树1>橘树6>橘树2>橘树8>橘树7>橘树5>橘树4。但是三种测量方法均存在一定的偏差,尤其是橘树3的冠层体积,最大标准差值为0.12。其次为橘树8,其体积测量的标准差值达到了0.102,而所有橘树冠层体积测量的标准差大于0.05,其中最小的标准差值为0.062,由测量1号、7号橘树时产生。

在这里插入图片描述
综合上述图表可知,人工测量相比真实的体积可能存在一定的误差,造成的原因可能是树冠形状在转化时,将原本不规则的形状抽象成规则形状后,丢失了部分空间的体积值,导致所测体积值相对偏小。但相比拟合测量法将树冠作为整体的计算方法,人工测量通过将冠层水平分割成几部分进行分块计算,降低了每个部分的误差,数值相对精确,故将其作为标准值具有较强的可靠性。

总结

针对目前主流传感器探测果树靶标存在的各种问题,本章提出一种基于深度相机和分割掩膜的果树冠层体积探测方法,并通过对比实验研究其探测精度。并且,为探究视觉探测冠层体积的精确度,提出一种人工测量和拟合测量冠层体积法,并以人工测量的体积为基准,与视觉探测法的结果进行误差分析。实验结果表明,视觉探测法与人工测量体积值的主要误差小于8%,最小误差仅为2.2%,因此视觉探测法测量得到的体积值更加接近于手工测量的结果。验证了基于深度相机的视觉探测树冠体积方法具有良好的测量精度。

相关文章:

【果树农药喷洒机器人】Part6:基于深度相机与分割掩膜的果树冠层体积探测方法

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

打印1到最大的n位数

目录 1.题目概述 2.题解 1.题目概述 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 1. 用返回一个整数列表来代替打印 2. n 为正整数&#xff0c;0 < n < 5 示例&#xff1a; 输入…...

设计模式行为型——状态模式

目录 状态模式的定义 状态模式的实现 状态模式角色 状态模式类图 状态模式举例 状态模式代码实现 状态模式的特点 优点 缺点 使用场景 注意事项 实际应用 在软件开发过程中&#xff0c;应用程序中的部分对象可能会根据不同的情况做出不同的行为&#xff0c;把这种对…...

ElastAlert通过飞书机器人发送报警通知

前言 公司采用ELK架构搜集业务系统的运行日志&#xff0c;以前开发人员只有在业务出现问题的时候&#xff0c;才会去kibana上进行日志搜索操作&#xff0c;每次都是被用户告知系统出问题了&#xff0c;这简直是被啪啪打脸~ 于是痛定思痛&#xff0c;决定主动出击&#xff0c;…...

恒温碗语音芯片,具备数码管驱动与温度传感算法,WT2003H-B012

近年来&#xff0c;随着科技的飞速发展&#xff0c;智能家居产品已然成为了现代生活的一部分&#xff0c;为人们的生活带来了更多的便利和舒适。在这个不断演进的领域中&#xff0c;恒温碗多功能语音芯片——WT2003H-B012成为众多厂商的首选&#xff0c;为智能家居领域注入了全…...

新能源汽车需要检测哪些项目

截至2022年底&#xff0c;中国新能源车保有量达1310万辆&#xff0c;其中纯电动汽车保有量1045万辆。为把好新能源汽车安全关&#xff0c;我国新能源汽车除了完善的强制性产品认证型式实验外&#xff0c;还建立了“车企-地方-国家”逐级上报的三级监管体系实行新能源汽车全生命…...

VR内容定制 | VR内容中控管理平台可以带来哪些价值?

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中教育领域也不例外。通过VR技术&#xff0c;学生可以身临其境地参与到各种场景中&#xff0c;获得更加直观、生动的学习体验。为了让教师更好地进行VR教学的设计和管理&#xff0c;提高教…...

篇十八:状态模式:状态驱动的行为

篇十八&#xff1a;"状态模式&#xff1a;状态驱动的行为" 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&…...

【Tomcat】(Tomcat 下载Tomcat 启动Tomcat 简单部署 基于Tomcat进行网站后端开发)

文章目录 Tomcat下载Tomcat启动Tomcat简单部署 基于Tomcat进行网站后端开发 Tomcat Tomcat 是一个 HTTP 服务器.HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式. HTTP 服务器我们可以通过 Java Socket 来实现. 而 Tomcat 就是基于 Java 实现的一个开源免费,也是…...

简单动态字符串 sds

Redis 设计了简单动态字符串&#xff08;Simple Dynamic String&#xff0c;SDS&#xff09;的结构&#xff0c;用来表示 字符串。相比于 C 语言中的字符串实现&#xff0c;SDS 这种字符串的实现方式&#xff0c;会提升字符串的操 作效率&#xff0c;并且可以用来保存二进制数据…...

“深入剖析JVM内部原理:解密Java虚拟机的奥秘“

标题&#xff1a;深入剖析JVM内部原理&#xff1a;解密Java虚拟机的奥秘 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的内部原理&#xff0c;包括其架构、内存管理、垃圾回收机制、即时编译器等关键组成部分。通过解密JVM的奥秘&#xff0c;我们将更…...

使用QT纯代码创建(查找)对话框详细步骤与代码

一、创建项目文件 打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件&#xff0c;先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…...

4945: 二进制转十进制

4945: 二进制转十进制 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 520 解决: 335 [命题人:][下载数据: 30] 提交状态报告 题目描述 将二进制数转成十进制输出 输入 一行&#xff0c;一个二进制数&#xff0c;二进制数的位数小于32位。 输出 一个十进制的整数。…...

java后端技术汇总 + 中间件 + 架构思想

1. 华为OD机考题 答案 2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 2. 面试题 一手真实java面试题&#xff1a;2023年各大公司java面试真题汇总--…...

《机器学习系统:设计与实现》读书笔记一

最近几年一直在做算法工程的工作&#xff0c;对机器学习系统有所涉猎&#xff0c;也很感兴趣。近期发现一本开源书籍《机器学习系统&#xff1a;设计与实现》。去图书馆找了它的纸质版&#xff0c;发现内容不尽相同。在这里结合两者做一个读书笔记。本文是第一篇&#xff0c;主…...

C语言单链表OJ题(较难)

一、链表分割 牛客网链接 题目描述&#xff1a; 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 思路&#xff1a;…...

工业巡检ar沉浸式互动培训体验实现更加直观、生动的流程展示

以往的工业手工巡检效率极低&#xff0c;错误率偏高&#xff0c;漏检问题严重&#xff0c;会因为现场人员对机械设备的早期维护、操作不会&#xff0c;而影响正常交付和服务&#xff0c;智慧工业是工业智能化和信息化的重要体现&#xff0c;在巡检方面自然也要同步提升&#xf…...

【Spring】核心容器——依赖自动装配

Spring容器根据bean所依赖的资源在容器中自动查找并注入bean的过程叫做自动装配自动装配的方式 1、按类型 2、按名称&#xff08;耦合性较高&#xff09; 3、按构造方法 自动装配特点 1、自动装配用于对引用类型进行依赖注入&#xff0c;不能对简单类型进行操作 2、自动装配的…...

TestNG和Junit5测试框架梳理

一、testNG 1. testNG优势 注解驱动&#xff1a; TestNG 使用注解来标识测试方法、测试类和配置方法&#xff0c;使得测试更具可读性。 并行执行&#xff1a; TestNG 支持多线程并行执行测试&#xff0c;可以加速测试套件的执行。 丰富的配置&#xff1a; 可以通过 XML 配置文…...

算法练习Day46|139.单词拆分

LeetCode:139.单词拆分 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 1.思路 字符串是否能被字符串列表中的元素拼接出来&#xff0c;显然是一个背包问题&#xff0c;而且需要排列。 将字典转换为HashSet,利用.contains()方法判断是否存在元素与背包中的子串相同…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

boost::filesystem::path文件路径使用详解和示例

boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类&#xff0c;封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解&#xff0c;包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...