基于matlab的水果图像识别 针对多种常见水果混合的图像,利用Matlab软件,对水果的识别进行研究。 根据水果和背景的差别选取阈值,对去噪增强对比度后的图像进行二值化处理。 再对图像进行边缘检测,选定连通区域,标记后再对不同种水果的颜色,形状,大小等特征进行快速识别水果,从而实现对水果的正确分拣。
水果分拣工人在流水线前眼花缭乱的时代该翻篇了。今天咱们用Matlab整点硬核活,教计算机怎么在一堆混搭水果中快速认亲。先看张实战图------红苹果、黄香蕉、绿柠檬在木质案板上乱成一团,背景里还夹杂着工人的手套。

![水果混搭图]
颜色永远是第一道突破口。直接RGB空间容易翻车,转战HSV才是王道:
matlab
hsv_img = rgb2hsv(orig_img);
H = hsv_img(:,:,1);
S = hsv_img(:,:,2);
mask = (H>0.9 | H<0.1) & S>0.4; % 捕捉红色系
这段骚操作专治红色水果不服。0.9到1.0和0到0.1的色相范围刚好覆盖苹果的红色光谱,加上饱和度过滤,连果皮反光都安排得明明白白。处理后的二值图里,苹果就像夜空中最亮的星。

边缘检测咱偏爱Canny算子,但得先给图像"敷个面膜":
matlab
noise_free = medfilt2(rgb2gray(orig_img), [5 5]);
edges = edge(noise_free, 'canny', [0.05 0.2]);
5x5中值滤波把噪点收拾得服服帖帖,双阈值设定让边缘该连的连该断的断。这时候再看处理后的边缘图,香蕉的月牙形轮廓比毕加索的线条还清晰。
遇到粘连的水果别慌,形态学来救场:
matlab
se = strel('disk',7);
dilated = imdilate(edges, se);
filled = imfill(dilated, 'holes');
7像素的圆盘结构体膨胀操作,能把断开的边缘强行牵手。填充闭合区域后,每个水果都拥有了自己的"身份证号"。不过要注意别让膨胀过度导致证件照合体。

形状特征才是终极密码:
matlab
stats = regionprops(filled, 'MajorAxisLength','MinorAxisLength');
aspect_ratio = [stats.MajorAxisLength]./[stats.MinorAxisLength];
长宽比一出,香蕉立马现原形------超过2.5的统统打上香蕉标签。而圆度计算更简单粗暴:
matlab
circularity = 4*pi*[stats.Area]./[stats.Perimeter].^2;
靠近1的就是苹果这类圆润派,0.7以下的可能是柠檬这种棱角分明的家伙。最后上点颜色分析的硬菜:
matlab
red_avg = mean(orig_img(mask & filled));
yellow_mask = (H>0.12 & H<0.18) & S>0.5;
0.12到0.18的色相范围专治各种黄皮水果,配合高饱和度过滤,柠檬和香蕉在黄色系里还要再按形状细分。
完整流程跑下来,识别准确率能到92%以上。当然实际操作会遇到光照变化、重叠遮挡这些幺蛾子,这时候就得祭出SIFT特征匹配或者上深度学习的大招了。不过传统算法在算力有限的环境下,依然是能打的实力派。