【传知代码】图像处理解决种子计数方法

在这里插入图片描述

文章目录

  • 一、背景及意义介绍
    • 研究背景
      • 农业考种需求
      • 传统计数方法的局限性
        • 人工计数
        • 仪器设备计数
    • 研究意义
      • 提高育种效率
      • 提高计数准确性
      • 广泛的适用性
      • 数据存档与分析便利
  • 二、概述
  • 三、材料与数据准备以及方法介绍
    • 整体流程
      • 图像采集
        • 图像预处理
        • 形态学操作
          • 腐蚀运算
          • 开运算
        • 图像二值化
        • 种子计数与标记
      • 关键技术原理
        • 腐蚀运算原理
        • 开运算原理
        • 二值化原理
      • 方法优势
        • 速度优势
        • 适用性广
        • 设备简单
        • 记录留存
  • 四、Matlab代码实现
    • 代码结构概述
    • 部分代码及注释
  • 五、结果分析
    • 图像处理结果
    • 计数结果准确性
      • 粘连区域处理不当:
      • 二值化阈值不合适:
      • 图像噪声影响:
  • 六、总结
  • 部署方式

本文参考来源:传知代码平台

一、背景及意义介绍

以下是对基于Matlab图像的种子计数方法的背景及意义介绍:

研究背景

农业考种需求

在农业育种研究中,种子计数是一个较为重要的环节。考种过程涉及对大量种子的各种性状进行观察和测量,其中准确的种子数量统计是基础工作之一。例如,在评估种子的发芽率、纯度、产量潜力等指标时,都需要知道精确的种子数量。

传统计数方法的局限性

人工计数

当计数量较大时,长时间、重复性的数粒工作会导致人员疲劳,从而产生一定的误差。而且人工计数效率低下,无法满足大规模育种研究中对种子快速计数的需求。
人工计数难以保证准确性和一致性,不同人员计数结果可能存在差异。

仪器设备计数

现有的一些仪器设备用于种子计数也有一定的局限性。它们不适用于种类繁多、大小不一、形状多变的种子。例如,一些基于光电原理的计数器可能对种子的形状和大小有特定要求,对于不规则形状或过小过大的种子可能无法准确计数。
仪器设备通常比较昂贵,对于一些小型育种机构或科研团队来说,购置成本较高,限制了其广泛应用。

研究意义

提高育种效率

基于Matlab图像的种子计数方法能够快速、准确地统计种子数量,大大缩短了考种过程中种子计数的时间,提高了育种工作的整体效率。这使得科研人员能够更快地获取种子数量数据,进而更高效地进行后续的育种研究工作,如筛选优良品种、分析种子性状等。

提高计数准确性

该方法通过一系列图像处理技术,如腐蚀运算、开运算和二值化等,能够有效处理种子之间的粘连问题,减少因粘连导致的计数误差。同时,还可以对计数结果进行人工校正,进一步提高计数的准确性,为育种研究提供更可靠的数据支持。

广泛的适用性

这种计数方法具有广泛的适用性。它不仅可以用于各种类型的种子计数,只要满足在单一背景下平铺的条件即可。而且还可以扩展到其他需要计数的物品中,为相关领域的研究和应用提供了一种通用的计数解决方案。
成本效益优势
所需设备简单,只需要一台照相设备、一台计算机和常见的软件(如Matlab),相较于昂贵的专用种子计数仪器设备,大大降低了成本。这使得更多的育种机构和科研团队,包括一些小型机构和团队,都能够采用这种方法进行种子计数,促进了种子计数技术的普及和应用。

数据存档与分析便利

可对计数图片进行存档,这对于后续的数据分析和研究回顾非常有帮助。科研人员可以随时查看原始图像和计数结果,进行进一步的分析和验证,有助于提高育种研究的科学性和严谨性。

二、概述

基于Matlab图像的种子计数方法是为解决考种中人工计数繁重且易出错以及仪器设备计数有局限等问题而提出的,它通过图像采集、预处理、形态学操作及二值化等步骤对种子进行计数,具有速度快、适用性广、设备简单且可存档校正等优势,对提高育种效率和准确性等有重要意义。原文地址:

https://kns.cnki.net/kcms2/article/abstract?v=SY7jeTtuViJwrslGWo6PtHREhVR5hpz7DWu15XiWq-dWAodI4Mmap9yhKnPlhcZY2rVJunoNOwIqCRetJv0fR2O3zeDxxcHZwgkU8-3YNi3ksDm1XXpB968rX0rKvDl7zC-AHp-tLfgvt2TMSh4cVNKFlE-r2GR8jVcyW4JdawY=&uniplatform=NZKPT

三、材料与数据准备以及方法介绍

整体流程

在这里插入图片描述

图像采集

准备合适的背景(如白色A4纸),将种子均匀撒在上面,尽量减少粘连,然后使用拍摄工具获取照片,要求拍照范围不超出背景,且背景颜色单一。

图像预处理

Photoshop处理(可选):可以利用Photoshop软件提取背景颜色,调节颜色容差,使用魔棒工具和选框工具删除背景颜色,再填充黑色作为背景色。这一步骤有助于简化后续Matlab处理中的背景干扰。
Matlab中的灰度化处理:通过rgb2gray函数将彩色图像转换为灰度图像。灰度图像的像素点用颜色深度表示,范围是0(黑色)到255(白色)。灰度化处理的目的是减少图像数据量,使其更容易处理。

形态学操作
腐蚀运算

首先定义结构元素,结构元素可以是圆形、方形、线形等多种形状。腐蚀运算的思路是结构元素在整幅图像中移动,当结构元素与图像上对应像素点的像素值全部重叠相等时,保留这个像素点值。腐蚀运算的作用是使物体边界向内部收缩,也可以把小于结构元素的物体去除。

开运算

开运算是对目标图像先进行腐蚀运算再进行膨胀运算。它的作用是去除背景杂色和图像上的小异物,平滑较大区域的边界,不明显的改变区域的面积,对目标区域细小粘连点处分离等。

图像二值化

运用算法在灰度化的图像中寻找一个确定的阈值,利用阈值把灰度图像中的像素划分为2值:目标(用“1”表示,代表种子)和背景(用“0”表示)。经过前面的处理,特别是将背景替换为黑色后,阈值更容易确定,目标和背景也更容易划分,减少了背景杂色对算法的干扰。

种子计数与标记

通过计算连通图的数量得到种子数量。同时,对每个连通区域进行编号,并在原始图像上标记出连通区域的中心位置以及编号,方便人工校正。

关键技术原理

腐蚀运算原理

从数学形态学角度,腐蚀运算可以用集合的概念来解释。设原始图像为集合(A),结构元素为集合(B),腐蚀运算的结果(A\ominus B)定义为:(A\ominus B={x:B+x\subseteq A}),其中(x)是图像中的像素点坐标,(B + x)表示结构元素(B)平移到坐标(x)处。直观上,腐蚀运算就是寻找原始图像中那些能使结构元素完全包含在原始图像内的像素点。

开运算原理

开运算(A\circ B=(A\ominus B)\oplus B),其中(\oplus)表示膨胀运算。膨胀运算与腐蚀运算相反,它是将结构元素覆盖的区域进行扩展。开运算先通过腐蚀运算去除小于结构元素的物体以及一些噪声点,然后再通过膨胀运算恢复被腐蚀过度的目标物体的形状,从而达到去除背景杂色和分离粘连区域的效果。

二值化原理

二值化是根据图像的灰度值分布确定一个阈值(T),对于灰度值大于等于(T)的像素点赋值为“1”,对于灰度值小于(T)的像素点赋值为“0”。常用的阈值选择方法有全局阈值法(如Otsu算法)和局部阈值法。在该方法中,由于前期对背景进行了处理,使得阈值的确定相对简单,采用了一种基于图像灰度特征的简单阈值确定方法。

方法优势

速度优势

相对人工计数,该方法处理速度快,尤其是当计数数量较多时,这种速度优势更加明显。

适用性广

在单一的背景中只需要把种子平铺,就可以面对各种类型种子,并且该方法还可以扩展到其他需要计数的物品中。

设备简单

只需要一台照相设备、一台计算机以及几个常见的软件(如Matlab)即可开展工作。

记录留存

可对计数图片进行存档,还可以对图片进行人工校正,减少误差。

四、Matlab代码实现

代码结构概述

整个代码流程按照论文中的方法步骤进行,包括图像读取、背景去除、灰度化处理、腐蚀运算、开运算、二值化处理以及连通域分析和计数标记。

部分代码及注释

% 灰度处理
J = rgb2gray(nameFinal); 
subplot(3, 3, 3);
imshow(J);
title('灰度图像');% 调节灰度图像
J1 = imadjust(J); 
subplot(3, 3, 4);
imshow(J1);
title('调节后的灰度图像');% 定义结构元素
SE1,SE2% 在灰度化图中进行腐蚀运算
J2 = imerode(J1, SE2); 
subplot(3, 3, 5);
imshow(J2);
title('腐蚀运算后的图像');% 在灰度化图中进行开运算
J3 = imopen(J2, SE1); 
subplot(3, 3, 5);
imshow(J3);
title('开运算后的图像');% 在灰度化图中寻找阈值
level = graythresh(J3); % 进行二值化运算
J4 = im2bw(J3, level); 
subplot(3, 3, 6);
imshow(J4);
title('二值化后的图像');% 在二值化图中进行腐蚀运算
J5 = imerode(J4, SE2); 
subplot(3, 3, 7);
imshow(J5);
title('再次腐蚀后的图像');% 在二值化图中进行开运算
J6 = imopen(J5, SE1); 
subplot(3, 3, 8);
imshow(J6);
title('再次开运算后的图像');% 计算连通数

在这里插入图片描述

五、结果分析

图像处理结果

观察各个子图,可以看到图像经过一系列处理后的变化。原始图像显示了种子在白色A4纸上的原始状态。去除背景后的图像突出了种子主体。灰度图像将彩色图像转换为灰度形式,便于后续处理。腐蚀运算和开运算分别对图像进行了收缩和优化边界的操作,二值化图像则将图像分为目标(种子)和背景两部分,使得种子更容易被识别和计数。

计数结果准确性

通过连通域分析得到的种子计数结果与实际手动计数结果进行比较。如果两者存在差异,可能是由于以下原因:

粘连区域处理不当:

种子之间的粘连可能没有被完全分离,导致计数不准确。可以尝试调整腐蚀运算和开运算的结构元素大小或重复次数。

二值化阈值不合适:

不合适的阈值可能导致部分种子被错误地分类为背景或反之。可以手动调整阈值或尝试使用更先进的阈值选择方法。

图像噪声影响:

如果图像存在噪声,可能会干扰形态学操作和二值化过程。可以考虑在预处理阶段增加噪声去除步骤,如中值滤波或高斯滤波。

六、总结

通过本次复现,基本实现了论文中描述的基于Matlab图像的种子计数方法。在实际应用中,需要根据不同的种子类型和图像质量对代码进行适当的调整和优化,以提高计数的准确性和可靠性。

部署方式

Matlab版本:Matlab2022a

点击链接,发现更多内容 传知代码平台

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp开发【点击展示弹窗功能】

一、效果展示 二、代码 <template><view class="mini"><view class="block_item" @click="$refs.popup.op

centos7.X zabbix监控参数以及邮件报警和钉钉报警

1&#xff1a;zabbix安装 1.1 zabbix 环境要求 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘&#xff08;最低&#xff09; 操作系统: Linux centos7.2 x86_64 Python 2.7.x Mariadb Server ≥ 5.5.56 httpd-2.4.6-93.el7.centos.x86_64 PHP 5.4.161.2 zabbix安装版本 [rootnod…

根据输入的详细地址解析经纬度

摘要&#xff1a; 今天遇到一个需求&#xff1a;就是做客户导入的时候因为导入的客户地址的时候没有经纬度的&#xff0c;但是同步的时候需要经纬度的&#xff0c;所以还是要根据客户提供的详细地址解析出来对应的经纬度&#xff01;回填到对应的经纬度的表单之中进行客户的同步…

upload-labs靶场Pass-21

upload-labs靶场Pass-21 本关上传方法众多&#xff0c;但是应该考察的是数组后缀绕过&#xff0c;所以我的上传围绕此展开 1.分析源码 $is_upload false; // 初始化上传状态为false $msg null; // 初始化消息变量为null// 检查是否有文件上传 if(!empty($_FILES[upload_fi…

Flutter实战短视频课程

1、课程导学 一套代研运行多蜡 体州一致&#xff0c;目胜能优昇 未来大趋势 不改交原生项目的基础上&#xff0c;扩展Flutter能力 Flutter原生灵话切涣 0入侵 最简单、最通用 最新Flutter 3,x新特性讲解 大量flutter官方组件和api学习 最常用的第三方库使用及原理解析 自研组…

Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化&#xff1a;Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表&#xff0c;我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一&#xff0c;不仅支持多种常用图表&…

无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划

着重介绍通过对三维 PCD 点云进行处理生成 2D 栅格地图 PGM&#xff0c;而后将该 PGM 地图充分运用到无人系统路径规划之中&#xff0c;使得无人机能够依据此规划合理避开飞行路线上可能出现的障碍物。&#xff08;解决如何使用PGM的问题&#xff09; Hybrid A*算法 参考博客…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

浮动+flex布局

一.浮动 1.介绍 2.效果 <style> .one{ width: 100px; height: 100px; background-color: red; float: left; } .two{ width: 200px; height: 200px; background-color: blue; float: right; } </style> </head> <body> <div class"one&quo…

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;在每一个节点增加了一个存储位来表示节点的颜色&#xff0c;可以是红色也可以是黑色&#xff0c;通过约束颜色来维持树的平衡&#xff0c;具有以下的性质&#xff1a; 每个节点不是红色就是黑色根节点为黑色如果…

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…

rom定制系列------红米note8_miui14安卓13定制修改固件 带面具root权限 刷写以及界面预览

&#x1f49d;&#x1f49d;&#x1f49d;红米note8机型代码&#xff1a;ginkgo。高通芯片。此固件官方最终版为稳定版12.5.5安卓11的版本。目前很多工作室需要高安卓版本的固件来适应他们的软件。并且需要root权限。根据客户要求。修改固件为完全root。并且修改为可批量刷写的…

MicroServer Gen8再玩 OCP万兆光口+IT直通之二

这个接上一篇&#xff0c;来个简单测试。 一、测试环境 PC端&#xff1a;Win10&#xff0c;网卡&#xff1a;万兆光纤&#xff08;做都做了&#xff0c;都给接上&#xff09;&#xff0c;硬盘使用N年的三星SSD 840 交换机&#xff1a;磊科GS10&#xff0c;带两个万兆口 Gen…

怎么理解ES6 Proxy

Proxy 可以理解成&#xff0c;在目标对象之前架设一层 “拦截”&#xff0c;外界对该对象的访问&#xff0c;都必须先通过这层拦截&#xff0c;因此提供了一种机制&#xff0c;可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理&#xff0c;用在这里表示由它来 “代理…

揭秘代码界的新挑战:低代码平台,为何让程序员头疼不已?

我最近在网上看到一个很有趣的话题&#xff1a;为什么程序员大多讨厌低代码&#xff1f;好家伙&#xff0c;这一下子就将低代码推到了程序员的对立面&#xff0c;两者直接到了水火不容的地步。 其实低代码倒也不是什么新鲜事物&#xff0c;它是一种只需用很少甚至不需要代码即可…

APP如何提升关键词排名?

提升关键词排名是ASO&#xff08;App Store Optimization&#xff09;策略中的关键环节&#xff0c;以下是一些有效的方法来提高App在应用商店中的关键词排名&#xff1a; 1. **关键词研究**&#xff1a; - 使用专业的ASO工具进行关键词研究&#xff0c;找出与你的App相关且…

ClickHouse 3节点集群安装

ClickHouse 简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 官方网站&#xff1a;https://clickhouse.com/ 项目地址&#xff1a;https://github.com/ClickHouse/ClickHouse 横向扩展集群介绍 此示例架构旨在提供可扩展性。它包括三个节点&#xff…

基于springboot的在线投票系统,比赛实时投票平台的实现

1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a;windows 7…

UE4安卓打aab包时,同时存在“gradle”、“arm64/gradle”两个Gradle工程的原因

两个Gradle工程的现象 在出安卓aab包时&#xff0c;观察到存在以下两个Gradle工程&#xff1a; 1、Intermediate\Android\arm64\gradle &#xff08;称为arm64的Gradle&#xff09; 2、Intermediate\Android\gradle&#xff08;称为根下的Gradle&#xff09; 它们存在一些小…

在IDEA中运行Mybatis后发现取出的password值为null

问题&#xff1a; 解决方案&#xff1a;修改sql文如下&#xff08;取别名&#xff09; Select("select id,name,pwd as password from user where id #{id}") 重新运行即可