您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 基于MATLAB的米粒识别
数字图像采集与处理大作业题目:基于MATLAB的米粒识别技术实验目的及意义针对目前大米人工计数方法存在的不足,提出了一种基于MATLAB图像识别和处理技术的大米计数方法,该方法减轻了操作者劳动强度,弥补了人视觉的不足之处,提高了效率和准确率,为今后进一步研究奠定了必要的理论与实践基础,对完善“精细农业”具有重要意义。此程序消除简单图片中亮度不一致的背景,并使用阈值将修改后的图像转换为二值图像,使用成员标记返回图像中对象个数以及统计特性。一、实验原理这里以米粒图片(rice.jpg)为例,把图片中的背景颜色亮度调整到相同,二值化后清楚的显示出白黑的位置,较准确的计算出图像中研究对象的个数并标记,最后进行系统统计,通过直方图显示出统计结果。1、使用阈值将修改后的图像转换为二值图像:图像的二值化处理就是将图像上的点的灰度值为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于在对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。在MATLAB中将图像转换为二值图像,主要运用im2bw函数,涉及到一个灰度门槛的数值。对于灰度图像bw=im2bw(I,level);level默认是0.5,level一般使用graythresh函数来计算。2、使用成员标记返回图像中对象的个数以及统计特性:bwlabel函数表示了二值图像中的所有相关成分并返回在图像中找到的对象个数,最后绘制一个直方图反应米粒分布情况。二、实验内容实验一:首先对简单的图像进行处理1、读取和显示图像clear;closeall%清空Matlab工作平台所有变量I=imread(‘rice.jpg’);%读取图像,将图片放在工程目录bin文件夹内figure,imshow(I)%显示图像2、估计图像背景图像中心位置背景亮度强于其他部分亮度,用imopen函数和一个半径为15的圆盘结构元素对输入的图像I进行形态学开操作,去掉那些不完全包括在圆盘中的对象,从而实现对背景亮度的估计。background=imopen(I,strel(‘disk’,25));%创建一个半径为25的圆盘结构元素imshow(background)figure,surf(double(background(1:8:end,1:8:end))),zilm([0,255]);set(gca,’ydir’,’reverse’);显示了背景图(上)和背景表面图(下)3、从原始图像中减去背景图像原始图像I减去背景图像得到背景较为一致的图像。I2=imsubstract(I,background);figure,imshow(I2)4、调节图像的对比度:图像较暗,可用imadjust函数命令来调节图像的对比度。I3=imadjust(I2,stretchlim(I2),[01]);figure,imshow(I3);5、使用阈值操作将图像转换为二进制(二值)图像(bw)level=graythresh(I3);%图像灰度处理bw=im2bw(I3,level);%图像二值化处理figure,imshow(bw)%显示处理后的图片6、检查图像中对象个数Bwlabel函数表示了二值图像中的所有相关成分并返回在图像中找到的对象的个数。[labeled,numObjects]=bwlabel(bw,4);numObjects图像中的米粒对象个数是:numObjects=5实验二:对较复杂问题进行计数1、前几部步骤与实验一相同,但创建一个半径为17的圆盘结构元素clear;closeallI=imread('rice.png');figure,imshow(I)background=imopen(I,strel('disk',17));imshow(background)figure,surf(double(background(1:8:end,1:8:end))),zlim([0,255]);set(gca,'ydir','reverse');I2=imsubtract(I,background);figure,imshow(I2)I3=imadjust(I2,stretchlim(I2),[01]);figure,imshow(I3);level=graythresh(I3);bw=im2bw(I3,level);figure,imshow(bw)[labeled,numObjects]=bwlabel(bw,4);[labeled,numObjects]=bwlabel(bw,4);numObjects%显示数量2、对结果进一步处理(1)观察标记矩阵,用label2rgb将其显示为一副伪彩色的索引图像。RGB_label=label2rgb(labeled,@spring,'c','shuffle');imshow(RGB_label);(2)测量图像对象或区域的属性graindata=regionprops(labeled,'basic')graindata(27).Area%显示矩阵中第27个元素的属性显示结果为:graindata(27).BoundingBox,graindata(27).Centroid%寻找最近的边缘和中心点显示结果为:allgrains=[graindata.Area];%创建一个新的向量allgrains,其包含每个米粒的范围whosallgrains显示结果为:allgrains(14)%相当于整个矩阵的索引为14的属性是多少,可见与原来得到的结果相同显示结果为:max(allgrains)%获取最大的米粒大小biggrain=find(allgrains==2077)%使用find命令返回这个最大尺寸米粒的标记号mean(allgrains)%获取米粒的平均大小3、hist(allgrains,10)%绘制包含10个柱的直方图来说明米粒大小的分布情况五、总结1、在进行简单的计数实验(实验一)时,计数快捷,且结果准确。2、在进行较复杂的实验(实验二)时,进行二值化后,图像中有25个米粒,有两个很小的亮点干扰,结果统计结果为27个,不准确,进行进一步处理,使用成员标记返回图像中对象的统计特性,绘制出直方图,既可以观察米粒的尺寸分布,且两个极小的光点可以作为误差排除。通过对图中米粒数量的查找等操作,可以验证本实验的内容基本达到了预期的要求,数出米粒的数量和分布都基本正确。
本文标题:基于MATLAB的米粒识别
链接地址:https://www.777doc.com/doc-4530558 .html