通过分割受损的叶子自动检测昆虫捕食(matlab代码实现)

news2024/12/23 16:42:15

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

在农业领域开展的活动响应高附加值业务,在谷物,油籽,观赏和药用植物以及绿色蔬菜的生产中具有重要的经济意义。2019/2020 年,世界大豆产量达到 3.3659 亿公吨 (Mmt),移动 312 亿美元,仅美国的产量为 96.67 百万吨[1]。虽然低于 2018/2019 年的产量,但玉米产量达到 1,116.2 百万吨,平均价格约为每吨 美元362美元,是自 2015 年 8 月以来的最高水平[2]。离心糖产量达到166.17 Mmt,其中巴西在过去五年中一直领先于世界产量,产量超过29.92 Mmt[3]。

在谷物、油籽和新鲜落叶水果生产的带动下,粮食产量达到了新的高度,超过了前几年的产量,并估计未来几年将创下新纪录。从这个意义上说,技术进步对于降低成本、提高质量和生产力至关重要。在本文中,我们提出了一种利用几何叶子特性和数字图像处理技术构建图像模型的植物叶片捕食的新方法。与其他方法不同,我们的方法检测并突出显示被昆虫攻击的叶子区域,并分割昆虫叮咬的轮廓。我们评估了我们的提案,考虑了世界市场的12种关键作物,事实证明,即使在存在噪声、图像比例和旋转的情况下,它也是有效的。此外,无论植物种类如何,它都能精确地识别昆虫捕食区域90%在蓝莓、玉米、马铃薯和大豆叶中。因此,该提案引入了一种自动叶片分析的新方法,并有助于减少识别害虫发生的人力。

📚2 运行结果

 

 

 

 

 

 

 

 

 以上为部分结果图:

部分代码:

%% Load images
template_images = load_images('images/template_images', 'png');
test_images = load_images('images/test_images', 'png');

%% PREPROCESSING
% binarize model data
threshold = 5;
qtty_modelData = length(template_images);
template_images_mask = cell(qtty_modelData,1);

for i=1:qtty_modelData
    template_images_mask{i} = binarize_image(template_images{i}, threshold);
    template_images{i} = double(template_images{i}) .* template_images_mask{i};
end

% prepare leaf models
leaf_models = cell(qtty_modelData,1);

for i=1:qtty_modelData
    [~,~, ch] = size(template_images{i});

    l_model...
    = build_leaf_models(template_images{i});
    leaf_models(i) = { l_model };    
end

%% binarize leaf models
leaf_models_mask = cell(qtty_modelData,1);
for i=1:qtty_modelData
    leaf_model_mask = leaf_models{i};
    leaf_model_mask = logical(leaf_model_mask(:,:,2));
    leaf_model_mask_hull = bwconvhull(leaf_model_mask);
    leaf_models_mask{i} = leaf_model_mask_hull;
end

%% binarize test data
threshold = 0;
qtty_testImages = length(test_images);
test_images_mask = cell(qtty_testImages,1);
for i=1:qtty_testImages
    test_images_mask{i} = binarize_image(test_images{i}, threshold);
    test_images{i} = double(test_images{i}) .* test_images_mask{i};
end

%% Apply synthetic defoliation
id = 1;
img = test_images{id};
img_mask = test_images_mask{id};
min_defoliation = 16;
max_defoliation = 31;

[defoliated_leaf_testData, bite_signature_testData, img_out, defoliation_level, damaged_areas] = ...
    synthetic_defoliation(img,img_mask,'caterpillar_bite', min_defoliation, max_defoliation, 6, 50, 1);

figure; imagesc(uint8(img)); title('Original Image');
figure; imagesc(uint8(defoliated_leaf_testData)); colormap gray
title(['Synthetic defoliation: ', num2str(defoliation_level), '% damage']);

%% binarize defoliated leaf test data
defoliated_leaf_testData_mask = binarize_image(defoliated_leaf_testData,threshold);

%% Compute defoliation
[damaged_leaf_out, healthy_leaf_out, damaged_areas_out, bite_signatures_out] = ...
        detect_leaf(defoliated_leaf_testData, img, damaged_areas, bite_signature_testData);

% calc defoliation using healthy leaf mask
healthy_leaf_out_mask = logical(healthy_leaf_out(:,:,2));
defoliation_level_ALL(1) = (sum(damaged_areas_out(:) * 100) / sum(healthy_leaf_out_mask(:)));

% prepare the damaged leaf mask
damaged_leaf_out_mask = logical(damaged_leaf_out(:,:,2));
damaged_leaf_out_mask_hull = bwconvhull(damaged_leaf_out_mask);

% IMAGE MATCHING
% compare the damaged leaf with the leaf models using jaccard
jac_result = zeros(length(leaf_models_mask), 1);
for j=1:length(leaf_models_mask)
    jac_result(j) = jaccard(leaf_models_mask{j}, damaged_leaf_out_mask_hull); 
end
[jac_max, jac_max_idx] = max(jac_result);


%% DEFOLIATION ESTIMATE
leaf_model = leaf_models{jac_max_idx};
leaf_model_mask = logical(leaf_model(:,:,2));
diff = leaf_model_mask & ~damaged_leaf_out_mask;
defoliation_level_ALL(2) = (sum(diff(:) * 100) / (sum(leaf_model_mask(:))));

% evaluate the damaged area
jac = jaccard(damaged_areas_out, diff);
dic = dice(damaged_areas_out, diff);

% keep evaluating the damaged area
[confusionMatrix_pixels, resultRates_pixels, resultSDT, overlap] =...
    leaf_evaluation(damaged_leaf_out_mask, healthy_leaf_out_mask);
%%
fprintf('#### DEFOLIATION ESTIMATE #### \n')

fprintf('Actual Damage (GT): %1.4f\nDefoliation Estimate (DE) Index: %1.4f\n',...
    defoliation_level_ALL(1), defoliation_level_ALL(2));

fprintf('Jaccard Index: %1.4f\nDice Index: %1.4f\n', jac, dic)

%% Show the results
figure; imshowpair(uint8(leaf_model), uint8(damaged_leaf_out));
title('Leaf model and Damaged leaf');
%%
B = imoverlay(uint8(damaged_leaf_out), diff, [1 0 0]);
figure; imshow(uint8(B));
title('Damaged areas');

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]G. D. Silva Vieira, N. Maria de Sousa, B. Rocha, A. U. Fonseca and F. Soares, "A Method for the Detection and Reconstruction of Foliar Damage caused by Predatory Insects," 2021 IEEE 45th Annual Computers, Software, and Applications Conference (COMPSAC), 2021, pp. 1502-1507, doi: 10.1109/COMPSAC51774.2021.00223. 

[2]Automatic detection of insect predation through the segmentation of damaged leaves

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员留的后门,怎么能管它叫热部署呢?

前言 这篇文章给大家分享一个热部署相关的知识点。 这可是一个好东西啊,当年在学习学 JSP 的时候,哐哐哐一顿操作,发现服务没重启,我在 JSP 里面写的东西就直接生效了。 当场我就是一个大大的震惊,而旁边教我的人只…

[附源码]Python计算机毕业设计Django在线教育系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

offsetWidth、offsetHeight、clientHeight、clientWidth、scrollHeight、scrollWidth详细对比

offsetWidth、offsetHeight、clientHeight、clientWidth、scrollHeight、scrollWidth详细对比 代码测试 box-sizing:content-box时 box-sizing:border-box时 总结 offsetHeight、offsetWidth其实就是元素在屏幕上所占的实际宽高(包括border、padding&#xff0…

Java数据结构与Java算法学习Day11---有向图、拓扑排序、加权无向图、最小生成图、加权有向图、最短路径(简略笔记记录)

目录 一、有向图 157 1.1有向图的定义及相关术语 157 1.2有向图的实现 158 二、拓扑排序 159 2.1检测有向图中的环 160 2.1.1检测有向图中环API设计 160 2.1.2检测有向环实现 161 2.2基于深度优先顶点排序 162 2.2.1顶点排序API设计 2.2.2顶点排序实现的原理过程 2.…

【Day2】零基础学java--》牛客网刷题【字符集合】

大家好,我是良辰丫💞!好久不见,一个多月没写博客了,都有些生疏了,学校的一些事情,考试,实训,各种实验,嘿嘿嘿!其实也不能为自己找借口&#xff0c…

PDF文件怎么添加水印?一定要学会的两个方法

相信大家都遇到过这种难题,那就是自己制作PDF文件传输给别人之后,害怕文件内容被别人使用,窃取自己的劳动成果,所以需要对自己的文件进行保护,我们通常的做法是给PDF文件添加水印,这样就可以尽可能的保护文…

Redis这个内存回收,确实有点牛逼!!!

1. 过期 key 处理 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置 Redis 的最大内存: maxmemory 1gb当内存使用达到上限时&…

【LeetCode】1812. 判断国际象棋棋盘中一个格子的颜色

题目描述 给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false 。 给定坐标一定代表国际象棋…

五、卷积神经网络CNN5(卷积相关问题2)

采用宽卷积的好处有什么 窄卷积和宽卷积 对于窄卷积来说,是从第一个点开始做卷积,每次窗口滑动固定步幅。比如下图左部分为窄卷积。那么注意到越在边缘的位置被卷积的次数越少。于是有了宽卷积的方法,可以看作在卷积之前在边缘用 0 补充&…

MySQL数据库学习(1)

一、概述 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 M…

【畅购商城】微信支付模块之微信支付二维码

目录 流程分析 微信支付概述 账号申请 已有账号 ​​​​​​​支付接口和SDK(了解)​​​​​​​ ​​​​​​​入门案例 统一下单 ​​​​​​​查询订单 ​​​​​​​JS版二维码:QRCode.js ​​​​​​​概述 ​​​​​​​入门案例 ​​​​…

字节跳动3-2专家强烈推荐入广告核心部门,要学的12大技术实战PDF

前言 你了解过字节跳动的薪资和职级是什么样的吗? 想必大家都对字节跳动的薪资和职级都有一定的了解了,下面就给大家介绍字节3-1专家推荐的进入字节跳动需要储备知识技能!!! 应届生进入字节跳动的是711的学习路线&am…

Innodb如何实现表--下篇

Innodb如何实现表--下篇Innodb数据页结构File HeaderPage HeaderInfimum和Supremum RecordUser Records和Free SpacePage DirectoryFile Trailer实例分析Innodb数据页结构 Innodb数据页由以下7个部分组成: File Header(文件头) Page Header(页头) Infimun和Supremum Records U…

Abaqus二次开发:局部坐标系的建立与应用

问题描述 在单向复材中,纤维的力学性能往往是横观各向同性的,于是需要规定材料方向。 通常需要新建局部坐标系用于材料方向的定义,而在实际建立坐标系中,坐标系会储存在对应的Part下: mdb.models[‘Model-1’].parts[…

GraphQL基础使用--mongoDB数据库操作

GraphQL hello world 首先我们要安装好执行GraphQL的环境 因为其是运行在node服务器端的,所以我们要安装 express express-graphql graphql mongoose 安装好后的package.json文件是这个样子的 其次我们就要开始配置端口为3000的node服务器 const express requir…

Leetcode---2.两数之和

目录题目分析链表最终代码实现(内含注释)题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和…

护眼灯对眼睛真的有作用吗?一文了解市面上的护眼灯是否真的管用

我们都知道,现在越来越多的人开始使用护眼台灯照明了,不为别的,只为眼睛健康,所以同样的也有许多人质疑护眼灯是否真的对眼睛有效果,今天就来聊聊护眼灯是否真的有护眼作用。 在我看来,人体眼睛看任何事物…

TS201的通过外部中断IRQ0控制DMA传输(含参考代码)

外部中断控制DMA传输 DMA的原理就不多说了,之前的文章里有写。 电路中的Interrupt Pin ADSP-TS201 EZ-KIT Lite评估板上每片DSP含有4个外部中断(IRQ3–0 ),其中IRQ0接到了一个按键上(SW4和SW5)。 当按键按下时,表现…

西湖论剑 Flagshop 分析复现

前言 比赛时候没能做出来,其实这道题就是一道pwn题。后面与p w n师傅讨论分析EXP分析还原了解题过程。学到了很多,也希望分享给大家。 任意文件读取 抓包或者看源码就会发现有一个SSRF,但是没有权限读flag,测试发现存在一个readf…

全网惟一面向软件测试人员的Python基础教程-为什么要学Python

全网惟一面向软件测试人员的Python基础教程 起点:python软件测试实战宝典》目录 第一章 为什么软件测试人员要学习Python 文章目录全网惟一面向软件测试人员的Python基础教程前言一、Python是什么?二、为什么要学二、测试人员如何学二、怎么从0开始学Py…