用于苹果分级的matlab,苹果的特征检测与MATLAB实现

0引言近年来,国外在利用计算机视觉技术进行水果品质检测方面做了大量研究,并获得了许多重要成果;在我国也有许多研究报导,但到目前为止都处于试验阶段,而且分析方法距实际应用还有一段距离。特别是在缺陷检测方面,目前采用的方法处理速度很慢,在实际在线工作时无法使用。国外学者(ChengX等)在识别缺陷时获得成功,但需要同时使用近红外和中红外摄像设备,这2种设备造价之昂贵,使得该方法的应用受到限制,无法在农业分级设备中广泛应用。因此,研究适合于生产的分级检测方法有重要意义。1大小检测对于苹果大小的检测,主要依靠求出的苹果面积作为判别依据。本课题所采用的苹果图片都只是单个苹果的图片。首先对图片进行灰度处理,使用的MATLAB函数是rgb2gray;其次使用函数im2bw把灰度图转换为二值图,阈值则取0.9,从而使苹果区域为黑色,其余区域为白色;然后对二值图取反,使黑白颜色区域颠倒,这时的苹果区域为白色;最后利用函数bwarea可以计算白色区域的像素点的个数total。利用to-tal与整幅图片的像素值(x*y)之比,再与图片的面积相乘,便可得出苹果相对图片的面积.利用这个面积我们可以进行筛选.程序流程:读入图像灰度化图像二值化图像计算面积I=imread('图片名.jpg');I2=rgb2gray(I);BW=im2bw(I2,0.9);total=bwarea(BW)figure,subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(I2);subplot(1,3,3),imshow(BW);如图1所示:a原始图片b灰度图片c二值图片图1求苹果面积过程中的图像变换2缺陷检测对于苹果表面的缺陷(如疤瘌、黑斑等),本课题采用特征提取,即提取出坏损部位的轮廓,再进行填充求其面积,以其面积在图片中的比例作为判别依据。首先,对采集的原始图片(即彩色图片)进行灰度变换;接着用函数imadjust来调整灰度;对灰度图片进行一次中值滤波后,再对图片进行边缘检测;这时坏损的轮廓已经出现,但还有一些噪声存在,为滤掉噪声,要先对坏损的轮廓填充,采用BWfill=imfill(BW,'holes')语句,使缺陷部位的像素点为白色;其次是经过滤波,把噪声滤掉求缺陷的像素个数a,与图片总的像素个数(x*y)的比b就是我们判断的依据,本程序设b=0。程序流程:读入图像灰度化图像直方图调整中值滤波边缘检测缺陷判定I=imread('图片名.jpg');I2=rgb2gray(I);J=imadjust(I2,[0.10.3],[]);B=medfilt2(J);BW=edge(B,'sobel',0.1);BWfill=imfill(BW,'holes');BWfilt=medfilt2(BWfill);BWfilt2=medfilt2(BWfilt);BWfilt3=medfilt2(BWfilt2);BWfilt4=medfilt2(BWfilt3);BWfilt5=medfilt2(BWfilt4);figure,subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(I2);subplot(1,3,3),imshow(J);figure,subplot(1,3,1),imshow(BW);subplot(1,3,2),imshow(BWfill);subplot(1,3,3),imshow(BWfilt5);a=bwarea(BWfilt5);[x,y]=size(I);b=a/(x*y);if(b>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的苹果分级Matlab代码示例: ```matlab % 读入原始图像 I = imread('apple.jpg'); % 将图像转换为灰度图像 Igray = rgb2gray(I); % 对图像进行平滑处理,去除噪声 Iblur = imgaussfilt(Igray, 2); % 对图像进行阈值分割,提取苹果区域 level = graythresh(Iblur); Ibw = imbinarize(Iblur, level); % 对苹果区域进行膨胀操作,填充空洞 se = strel('disk', 10); Idilate = imdilate(Ibw, se); % 对苹果区域进行连通区域分析,提取苹果 CC = bwconncomp(Idilate); numPixels = cellfun(@numel,CC.PixelIdxList); [~,idx] = max(numPixels); Iapple = zeros(size(Idilate)); Iapple(CC.PixelIdxList{idx}) = 1; % 计算苹果的面积和周长 stats = regionprops(Iapple, 'Area', 'Perimeter'); area = stats.Area; perimeter = stats.Perimeter; % 根据苹果的面积和周长进行分级 if (area < 5000) && (perimeter < 300) fprintf('苹果等级为A\n'); elseif (area < 8000) && (perimeter < 350) fprintf('苹果等级为B\n'); else fprintf('苹果等级为C\n'); end % 显示结果图像 figure, imshow(I); hold on; B = bwboundaries(Iapple); plot(B{1}(:,2), B{1}(:,1), 'r', 'LineWidth', 2); ``` 代码中,首先读入原始图像,然后将图像转换为灰度图像,并对图像进行平滑处理,去除噪声。接着,使用阈值分割提取苹果区域,并对苹果区域进行膨胀操作,填充空洞。然后,使用连通区域分析提取苹果,并计算苹果的面积和周长。最后,根据苹果的面积和周长进行分级,并显示结果图像。 需要注意的是,在实际应用中,苹果分级标准可能会有所不同,需要根据具体情况进行调整。同时,图像分割的效果也受到多个因素的影响,需要根据具体情况选择合适的算法和参,并进行不断的优化和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值