LeAFtool计算病斑面积
网页版地址:
https://shiny.web4xiang.top/LeAFtool/
分析流程
数据准备
将图片存储在三个文件夹内,压缩成.zip
后上传就能进行分析:
- learning:存放用于训练的图片(直接截图即可),包括三个子文件夹:
- background:背景图片。如叶片是贴在A4纸上的,那么背景就截图A4纸。
- limb:没有被病原菌侵染的健康叶片。
- lesion:病斑截图。
- results:用于存放后续的分析结果。
- samples:用于存放等待分析的叶片。
上传文件
- 输入用户名是为了创建对应的文件夹存放数据;
- 上传上一步准备好的压缩文件;
- 点击提交是为了告诉程序文件上传完成,开始创建文件夹并把压缩文件解压缩。
- 注意事项:程序默认生成的文件夹格式为
输入的用户名-年-月-日
,比如我在2022年3月8日进行分析,输入用户名为123
,那么创建的文件夹就是123-2021-03-08
,所有的文件都会存放在该文件夹下。
机器学习训练
训练功能只需要选择方法和选择文件夹,默认的方法是LDA
。
模型选练结果:通常只需要关注错误率即可。
分析样品图片
完成训练后就可以开始分析样品图片了。只需要选择样品图片文件夹和结果输出文件夹即可。参数的调试通常默认,细节参考项目首页或应用首页。
注意
:使用多线程并行运行程序(下图)报错的话就不要勾选多线程。
分析结果如上图。鼠标单击每个叶片就可以看到被识别出来的病斑(下图)。
手动标注功能
在编辑模块,可以手动把标记错误的病斑
去掉,也可以手动添加没有标记上的病斑
。
在这个输出结果中叶片面积或者是病斑面积的单位是像素,我们需要的单位通常是cm$^2$。在咨询Rémi后我在最后的下载程序中加入了单位转换功能,最后下载得到的Excel
文件里面的单位是cm$^2$。
下载结果
只需要输入样品图片的分辨率(dpi)即可,咨询后他们表示600dpi已经足够了的。在下载到的Excel
结果表里面,单位是cm$^2$,如果是下载的原始结果的.zip
压缩文件,那默认的单位还是像素,注意记得转换。
注意
:分析完成后及时下载数据,R shiny有session
限制,时间长了会自动切断浏览器与服务器的连接,无法下载文件,需要重新分析。
公式推导
dpi表示的是每英寸的像素点,如600dpi就表示每英寸有600个像素点。1英寸=2.54cm,所以 就有$\frac{600}{2.54} = 236.2205$个像素点。转换成平方就是$1cm^2 = 236.2205^2像素$。那么就结果中的面积数值除以$236.2205^2$就可以转换成$cm^2$。通式如下:
以下为旧版内容:
核心算法
以有监督的分类为基础,颜色类型是RGB颜色类型;
训练集:参考图片,三个子文件夹:
- background:背景图片。也就是叶子贴在什么上面
- limb:没有被病原菌侵染的叶片。
- lesion:病斑截图。
上述三个文件夹中的图片最好都用样品截图,这样训练的模型会更准确,计算得到的结果也就更加准确!
不管用哪种机器学习方法,在
分析
和训练
模块中参数可以一致。支持三种方法:
- LDA
- QDA
- SVM
颜色模式可以选择
RGB
或者是HSV
。
结果
- 训练结果展示
- 首先是正确率表格:错误率越低,训练的结果越准确。
- 然后是训练的结果图:
- 首先是正确率表格:错误率越低,训练的结果越准确。
- 训练结果展示
训练完成后就可以对样品进行计算了。
样品分析结果概览图:
可以利用Edit
功能删除识别错误的病斑。
最终数字化的结果如下:
image | leaf.number | leaf.surface | lesion.nb | lesion.surface | pourcent.lesions |
---|---|---|---|---|---|
Snipaste_2022-02-26_20-54-59 | 1 | 15012 | 9 | 3353 | 22.33546 |
Snipaste_2022-02-26_20-54-59 | 2 | 13124 | 4 | 2688 | 20.48156 |
Snipaste_2022-02-26_20-54-59 | 3 | 11005 | 7 | 1207 | 10.96774 |
Snipaste_2022-02-26_20-54-59 | 4 | 11453 | 3 | 1180 | 10.30298 |
Snipaste_2022-02-26_20-55-12 | 1 | 13714 | 3 | 2824 | 20.5921 |
Snipaste_2022-02-26_20-55-12 | 2 | 13255 | 3 | 1406 | 10.60732 |
Snipaste_2022-02-26_20-55-12 | 3 | 13995 | 3 | 357 | 2.550911 |
Snipaste_2022-02-26_20-55-12 | 4 | 12140 | 1 | 421 | 3.467875 |
Snipaste_2022-02-26_20-55-17 | 1 | 15334 | 4 | 1816 | 11.84296 |
Snipaste_2022-02-26_20-55-17 | 2 | 14583 | 6 | 2942 | 20.17418 |
Snipaste_2022-02-26_20-55-17 | 3 | 15337 | 5 | 474 | 3.090565 |
Snipaste_2022-02-26_20-55-17 | 4 | 13912 | 3 | 291 | 2.091719 |
结果的单位是像素。
根据图片的dpi,可以把最后的结果转换成cm$^2$.
dpi表示的是每英寸的像素点,如600dpi就表示每英寸有600个像素点。1英寸=2.54cm,所以1cm就有$\frac{600}{2.54} = 236.2205$个像素点。转换成平方就是$1cm^2 = 236.2205^2像素$。那么就结果中的面积数值除以$236.2205^2$就可以转换成$cm^2$。通式如下:
💌lixiang117423@foxmail.com
💌lixiang117423@gmail.com