前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >初入图像处理:水稻剑叶夹角测量

初入图像处理:水稻剑叶夹角测量

作者头像
Srlua
发布2024-12-27 08:28:14
发布2024-12-27 08:28:14
7900
代码可运行
举报
文章被收录于专栏:CSDN社区搬运CSDN社区搬运
运行总次数:0
代码可运行

一、背景及意义介绍

随着计算机技术的不断发展,人们开始探索如何让计算机像人一样 “看” 和理解图像中的信息。计算机视觉作为一门交叉学科,融合了计算机科学、数学、物理学和生物学等多个领域的知识,旨在赋予计算机自动分析和理解图像内容的能力。图像处理是计算机视觉的基础,通过对图像进行各种处理操作,为后续的高级视觉任务如目标识别、场景理解等提供必要的数据预处理和特征提取。在数字媒体领域,图像是信息传播的重要载体。从早期的静态图片编辑到如今的视频流媒体处理,图像处理技术在提高图像质量、增强视觉效果以及满足用户对多媒体内容的多样化需求方面发挥着关键作用。例如,在电影制作中,图像处理技术用于特效制作、色彩校正和画面修复;在数字摄影中,它可以帮助摄影师调整照片的曝光、色彩平衡和锐度,以获得更好的视觉效果。在工业生产过程中,机器视觉系统被广泛应用于产品质量检测、零部件识别和装配操作等环节。通过图像处理技术,机器视觉系统能够快速、准确地获取产品的外观特征和尺寸信息,从而实现对产品质量的高效监控和自动化生产流程的精确控制。在机器人技术中,图像处理为机器人提供了感知周围环境的能力,使其能够识别目标物体、避开障碍物并执行各种复杂的任务。 水稻是世界主要粮食作物之一,水稻剑叶夹角对理想株型选育至关重要。传统人工测量方法效率低且易损伤作物,而机器视觉技术为作物表型信息获取提供了新途径。

二、概述

本文提出一种基于图像处理的水稻剑叶夹角测量算法,通过颜色空间转换、骨架提取、Hough直线提取和K - means聚类等技术,实现夹角的实时测量,并通过实验验证了算法的准确性。原文地址

三、论文背景

背景及意义介绍
  1. 背景
    • 水稻是世界主要粮食作物之一,为世界一半以上人口提供粮食。近代高产育种实践证明改良株型是提高品种产量的关键,水稻剑叶角度是构成水稻株型的主要因素之一。
    • 传统的水稻剑叶夹角测量方式是人工使用量角器测量,这种方法效率低且容易对作物造成损伤。近年来,机器视觉技术在农业等领域广泛应用,为作物表型信息获取提供了新途径。
  2. 意义
    • 水稻理想株型的选育主要集中于减小剑叶夹角,高产水稻的剑叶角度应该在13∘~17∘13∘~17∘,另两片功能叶也均保持小角度,使植株呈塔形,有利于提高光合作用效率,实现水稻高产。因此,实现水稻剑叶夹角快速、准确地在体测量,对水稻高产育种具有重要意义。

四、论文思路

利用图像处理技术实现水稻剑叶夹角的实时、准确测量。通过智能手机采集水稻剑叶基部图像,经过一系列图像处理步骤,包括颜色空间转换、骨架提取、Hough 直线提取和 K - means 聚类等,最终计算出剑叶夹角,实现实时测量。

五、方法介绍

在这里介绍实验结果

六、复现过程(重要)

步骤1:搭建基础框架
  • 环境配置与依赖安装
    • Matlab2022a
  • 图像采集模块
    • 模拟智能手机采集水稻剑叶基部图像。可以使用摄像头获取图像数据,并确保采集过程中设置与论文一致的参数,如硬件配置模拟(类似于Honor V30,HUAWEI Kirin 990 CPU,6 GB RAM),以及背景板的使用(黑色泡沫板)。
    • 田间采集时,按照论文描述,将背景板平行紧贴于水稻主茎与剑叶所在平面下方,移开其余叶片等干扰物,在平行于背景板上方15 - 20cm位置采集图像。
  • 算法核心框架搭建
  • 参考论文中的测量流程,搭建基本的算法框架,包括图像采集、背景分割、主茎及剑叶骨架细化、直线提取、直线聚类和夹角计算等模块。
  • 初始化各模块所需的参数和数据结构,例如用于存储图像数据的数组,以及用于记录直线参数和夹角结果的变量。
步骤2:图像预处理模块复现
  • RGB到HSV颜色空间转换及背景分割
    • 读取采集到的水稻基部图像,按照论文方法将其从RGB颜色空间转换为HSV颜色空间。
    • 根据论文给定的HSV阈值范围(H:0 - 180,S:0 - 80,V:20 - 255),对HSV图像进行阈值分割,提取背景区域并生成遮罩,从而分割出水稻剑叶图像。
    • 对分割后的图像进行灰度化处理和二值化处理,得到二值图像。
代码语言:javascript
代码运行次数:0
复制
% 进行图像分割
mask = (h_channel >= 0/255 & h_channel <= 180/255) &...
       (s_channel >= 0 & s_channel <= 95/255) &...
       (v_channel >= 20/255 & v_channel <= 143/255);
mask = not(mask);
% 提取分割后的图像
segmented_image = image.*repmat(uint8(mask), [1, 1, 3]);

% 灰度化处理
gray_image = rgb2gray(segmented_image);
% 二值化处理
bw_image = imbinarize(gray_image);

图中所示是实验图像的HSV直方图

  • 二值化图像后处理(开运算)
    • 对二值化后的图像进行开运算,去除白色噪点,平滑边界,同时保持图像中物体面积基本不变。可以使用形态学开运算函数(如OpenCV中的morphologyEx函数,操作类型为MORPH_OPEN)实现。
代码语言:javascript
代码运行次数:0
复制
% 开运算消除白色噪点
se = strel('disk', 6); % 定义结构元素
opened_image = imopen(bw_image, se);
步骤3:直线提取模块复现
  • 骨架提取
    • 对开运算后的图像进行骨架提取。按照论文描述的骨架化算法步骤:
      • 首先对图像进行腐蚀操作,使物体变窄细。
      • 然后对腐蚀后的图像做开运算,将开运算处理时被删除的像素作为骨骼的一部分加入骨骼图像。
      • 重复上述过程,直到图像不能再细化,得到骨架提取后的图像。
代码语言:javascript
代码运行次数:0
复制
%骨架提取
skeleton_image = bwmorph(opened_image,'skel', Inf);
se = strel('line', 10 , 1); 
% length是结构元素的长度,angle是结构元素的角度(以度为单位)

% 进行膨胀操作(可能由于骨架过细而提取不出直线)
dilated_image = imdilate(skeleton_image, se);
  • Hough直线检测
    • 采用Hough直线检测算法对骨架图像进行直线检测。
    • 根据Hough直线检测的基本原理,获取直线距离图像左上角原点的距离参数r以及直线的弧度参数θ。
    • 通过直线与图像上下边界的交点,绘制出检测到的直线。
代码语言:javascript
代码运行次数:0
复制
% Hough直线检测
[H,theta,rho] = hough(dilated_image);
peaks = houghpeaks(H, 10); % 检测10个峰值,可根据实际情况调整
lines = houghlines(dilated_image, theta, rho, peaks);
% 提取直线角度信息
line_angles = zeros(size(lines,2),1);
for i = 1:size(lines,2)
    line_angles(i) = lines(i).theta;
end

Hough直线提取结果

步骤4:直线聚类模块复现
  • K - means聚类算法应用
    • 由于需要从多条直线中提取出主茎与剑叶方向上的两条直线,采用K - means聚类算法进行分类。
    • 将参数k设置为2,按照角度标准将直线聚成主茎和剑叶两类。
    • 根据K - means算法的处理过程,随机选择2个对象作为初始类中心,然后对剩余直线根据其与类中心的距离进行分类,并不断更新类中心,直到准则函数收敛。
代码语言:javascript
代码运行次数:0
复制
[idx, C] = kmeans(line_angles, 2);
步骤5:角度计算模块复现
  • 弧度与角度转换及象限调整
    • 霍夫直线检测所得角为直线与竖直方向所成夹角,单位为弧度制。首先将弧度转换为角度,使用公式degree = rad × 180°/π
    • 由于水稻主茎与剑叶通常在第一第二象限,根据论文方法,将直线与竖直方向所成夹角通过公式theta1 = π/2 - degree(第一象限)和theta2 = 3π/2 - degree(第二象限)进行映射。
代码语言:javascript
代码运行次数:0
复制
% 角度计算
% 找到属于主茎和剑叶的直线类别(这里简单假设第一类为主茎,第二类为剑叶)
main_stem_lines = lines(idx == 1);
flag_leaf_lines = lines(idx == 2);
% 计算主茎和剑叶直线与竖直方向夹角(弧度制)
main_stem_angle_rad = mean([main_stem_lines.theta]);
flag_leaf_angle_rad = mean([flag_leaf_lines.theta]);
% 将弧度转换为角度
main_stem_angle_deg = main_stem_angle_rad * 180 / 360;
flag_leaf_angle_deg = flag_leaf_angle_rad * 180 / 360;
% 根据象限调整角度
theta1=360/2-main_stem_angle_deg;
theta2=3*360/2-main_stem_angle_deg;
theta21=360/2-flag_leaf_angle_deg;
theta22=3*360/2-flag_leaf_angle_deg;
  • 剑叶夹角计算
    • 通过计算水稻主茎与剑叶中心直线的差值,得到水稻的剑叶夹角。
代码语言:javascript
代码运行次数:0
复制
% 计算剑叶夹角
blade_angle = abs(theta1+theta2-theta22-theta21);
disp(['剑叶夹角为:', num2str(blade_angle), '°']);

结果

部署方式

  • Matlab2022a

​​

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景及意义介绍
  • 二、概述
  • 三、论文背景
    • 背景及意义介绍
  • 四、论文思路
  • 五、方法介绍
  • 六、复现过程(重要)
    • 步骤1:搭建基础框架
    • 步骤2:图像预处理模块复现
    • 步骤3:直线提取模块复现
    • 步骤4:直线聚类模块复现
    • 步骤5:角度计算模块复现
  • 部署方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档