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

基于MATLAB的苹果外观特征检测

摘  要  本文根据苹果分级判定标准中的两个评定指标:果径和果面缺陷,探讨如何利用MATLAB技术进行苹果外观的特征检测,从而提高苹果品质检测的工作效率。

关键词  MATLAB;苹果分级;果径;果面缺陷

0   引言

近年来,随着人们生活水平的提高,对于水果的品质要求也不断提高,实行水果分级销售成为当前市场的一个趋势。传统的水果等级评判主要依靠工人手摸、眼看,评定指标不客观,且人工成本高、效率低,不利于产业的规模化、工业化发展。因此,利用计算机图像技术研究客观、方便、高效的水果品质检测方法具有较大的应用前景。在本文中,作者以苹果为例,探讨基于MATLAB的苹果外观特征检测方法。

根据国家质检总局2003年发布的《烟台苹果原产地域产品国家标准》(以下简称《标准》),对于苹果分级的评定指标分为:品质基本要求、色泽、果径(最大横切面直径)、果面缺陷等方面内容,每一项都有具体分级标准。其中,品质基本要求为概略性的总体要求,苹果色泽由于品种的不同,色泽不同。因此,本文着重从果径及果面缺陷两方面特征对苹果进行检测判定。主要采用单个苹果照片进行检测。检测前,首先固定图像采集设备和检测平台的位置,同时固定各项拍摄参数(焦距、像素等)不变,并确保用于分析的每张照片长度、宽度保持一致。

1   果径(最大横切面直径)检测

对果径的检测思路为:将图片灰度化、二值化后,利用regionprops函数计算二值化图像的最小外接矩形大小,外接矩形框长度和宽度中的最大值即为苹果最大横切面直径。不过,此时的数值为像素值,通过与照片的长、宽像素值进行比较,结合图片的实际长、宽值,即可求出果径的实际长度。

图1 设定苹果照片参数

在实验过程中,直接将图片灰度化、二值化后得到的苹果图像边缘不完整,因此考虑将图像转换到HSI颜色空间,利用S分量进行灰度化、二值化处理,较好的保留了苹果的边缘。

首先,将照片由RGB颜色空间转换为HSI颜色空间。

%RGB 2 HSI

rgb=imread('apple0.jpg');

rgb = im2double(rgb);

r = rgb(:, :, 1);

g = rgb(:, :, 2);

b = rgb(:, :, 3);

num = 0.5*((r - g) + (r - b));

den = sqrt((r - g).^2 + (r - b).*(g - b));

theta = acos(num./(den + eps));

H = theta;

H(b > g) = 2*pi - H(b > g);

H = H/(2*pi);

num = min(min(r, g), b);

den = r + g + b;

den(den == 0) = eps;

S = 1 - 3.* num./den;

H(S == 0) = 0;

I = (r + g + b)/3;

% Combine all three results into an hsi image.

hsi = cat(3, H, S, I);

图2 HSI空间的苹果图片

提取HSI中的S分量,可以直接利用im2bw函数将S分量二值化。0.2为实验数值,level=0.2时二值化图像最理想。

S=im2bw(S,0.2);

imshow(S)

图3 S分量图像及S分量二值化后图像

求取外接最小矩形框,并利用regionprops函数计算图像区域的属性信息,并读取矩形的长、宽数据,以长、宽中的最大值为果径的数值。注意这里的数值为像素值。

图4 二值化图像的最小外接矩形框

[l,m]=bwlabel(S,8);

status=regionprops(l,'BoundingBox');

x=status(2,1).BoundingBox;            %读取矩形的长宽

X=max(x);                          %取最大值

取得果径的像素值后,与图片的长(宽)像素值相比。由于图片的像素、实际长宽等数值已预先设定并保持不变,因此根据果径像素与图片像素的比值可求出果径的实际数值。

2   果面缺陷检测

果面的缺陷主要包括压伤、碰伤、虫蛀伤等,表现为与正常果面色泽、质地不一致。因此可通过提取果面的图像特征,检测缺陷情况。

图5 有缺陷的苹果果面

首先,读入图像后用rgb2gray函数对受检苹果进行灰度化,并用imadjust函数调整灰度图像的强度值。

I= imread('apple3.jpg');

I2= rgb2gray(I);

J= imadjust(I2,[0.1 0.2],[]);

图6 灰度图像及imajust增强后的图像

利用im2bw函数将调整后的灰度图像转换为二值图像,level值取1。为方便检测,对二值图像进行取反处理。Y=im2bw(J,1);Y=~Y。

图7 转换为二值图像并取反

与计算果径的方法相同,求病斑区域的外接矩形框,并利用regionprops函数计算图像区域的属性信息。

[l,m]=bwlabel(Y,8);

status=regionprops(l,'BoundingBox');

imshow(Y);

hold on;

for i=1:m

rectangle('position',status(i).BoundingBox,'edgecolor','r');

end

hold off;

图8 病斑区域的外接矩形框

值得注意的是,由于病斑的不规则,且一个果面可能会有多个病斑,图像区域中会有多个外接矩形框,因此需要对每个矩形框的大小进行判定,选取面积最大的矩形框。

[x,y]=size(status);                      %读取图片信息

for i=1:x                              %共有x个矩形框

    X(i)=max(status(i).BoundingBox);     %取矩形框最大值

end

x2=status(i,1).BoundingBox;              %读取矩形框的长、宽

x2(1)

x2(2) 

在这里,以最大矩形框的面积近似为病斑的面积。通过矩形框尺寸的像素值与照片长、宽像素值的比值,以及照片实际尺寸,进而确定病斑实际面积。

3   结论

通过前面的测试,初步实现了利用MATLAB技术对苹果的大小(最大横切面直径)、苹果表面病斑面积等评定指标的检测判定,达到了预期目的。需要指出的是,在计算病斑的实际面积时采取了近似外接矩形框面积的方法,存在一定误差,但是该误差对于果品的分级检测来说是在误差的允许范围内,并不会对检测结果造成本质上的影响。从图7、图8中可以看到,除了主要的病斑区域外,左下角还有一个小白点,回到原图可以发现,这是果面的另一处小虫洞,可见该程序能比较真实的反映果面缺陷情况。本文中基于MATLAB的苹果外观特征检测方法相对简单,且不需要非常复杂、昂贵的设备,能以较小的成本实现苹果的外观分级检测,有利于该检测技术、设备在生产实践中的推广应用,达到提高生产效率的目的。

参考文献

[1]  王术兰, 徐晓辉, 胡慧. 苹果的特征检测与MATLAB实现. 计算机与信息技术, 2006,01:79~80

[2]  杨高波, 杜青松编著. MATLAB图像/视频处理应用及实例. 北京:电子工业出版社.2010.

[3]  杨杰主编. 数字图像处理及MATLAB实现. 北京:电子工业出版社.2010.

[4]  邓薇编著. MATLAB函数速查手册. 北京:人民邮电出版社.2010.


http://www.kler.cn/news/326838.html

相关文章:

  • 【计算机网络 - 基础问题】每日 3 题(二十六)
  • 针对考研的C语言学习(定制化快速掌握重点4)
  • IDEA几大常用AI插件
  • Splashtop 加入 Microsoft 智能安全协会
  • VBA解除Excel工作表保护
  • 浅析Android中的View事件分发机制
  • 19.2 编写dockerfile和k8s yaml
  • 迁移学习案例-python代码
  • Redis一些简单通用命令认识常用数据类型和编码方式认识Redis单线程模型
  • OJ题之单链表排序
  • 智慧城市运营模式--联合公司运营
  • ThinkPHP发送邮件教程:从配置到发送指南!
  • ChatGPT的150个角色提示场景实测(9)讲故事
  • django drf 分页器
  • 【Spring基础3】- Spring的入门程序
  • 【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper
  • 数据结构——栈的基本操作
  • ELK-02-skywalking-v10.0.1安装
  • 为什么要自定义异常
  • 几个可以给pdf加密的方法,pdf加密详细教程。
  • AI新方向:OpenAI o1是一个更擅长思考的模型系列:高级推理+逻辑严密+更广泛的知识,用于解决复杂的逻辑问题,慢思考
  • Android开发中的ViewModel
  • Unity3D Compute Shader同步详解
  • 刷题训练之队列与宽搜
  • d3.js 基础学习
  • 基于Python可视化的学习系统的设计与实现(源码+文档+调试+答疑)
  • 52. OrbitControls辅助设置相机参数
  • Squaretest单元测试辅助工具使用
  • C++安全密码生成与强度检测
  • MySql的慢查询(慢日志)