一、项目简介
本系统是一个基于颜色与形状特征的水果识别系统,能够对图像中的多个水果目标进行自动分割与分类识别。系统通过MATLAB GUI以菜单栏形式提供交互操作,用户可按步骤完成图像预处理、目标分割、特征提取与识别,最终在测试图像上标注各水果的名称。
核心算法流程如下:预处理阶段,将彩色图像转为灰度并二值化,利用形态学腐蚀与膨胀操作去除噪声。目标分割阶段,对二值图像采用4连通区域标记,分离出每个水果目标区域,并生成对应的掩膜图像。特征提取阶段,对每个目标区域提取两类特征:颜色特征------将图像转换至HSV空间,统计色调(H)分量的直方图,取峰值处的色调值作为颜色描述;形状特征------计算区域偏心率(Eccentricity),表征目标区域的细长程度。识别阶段,预先提取梨、青椒、西红柿、香蕉四类样本的参考特征,对待测目标采用欧氏距离分别匹配颜色和形状特征,选取距离最小的样本类别作为识别结果,最终在原始图像上用文字标注每个目标的名称。
二、部分源码
function menu_6_Callback(hObject, eventdata, handles)
% hObject handle to menu_6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes during object creation, after setting all properties.
% --------------------------------------------------------------------
function menu_61_Callback(hObject, eventdata, handles)
% hObject handle to menu_61 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clear
% 读入样本图像
img1 = imread('梨.jpg');
bwpic = RGB2bw(img1);
samfea(1,:) = get_features(img1, bwpic);
img2 = imread('青椒.jpg');
bwpic = RGB2bw(img2);
samfea(2,:) = get_features(img2, bwpic);
img3 = imread('西红柿.jpg');
bwpic = RGB2bw(img3);
samfea(3,:) = get_features(img3, bwpic);
img4 = imread('香蕉.jpg');
bwpic = RGB2bw(img4);
samfea(4,:) = get_features(img4, bwpic);
%读入测试图像
testimg = imread('test.jpg');
% 测试图像二值化
bwpic = RGB2bw(testimg);
%figure, imshow(testimg)
% 分离各个目标
L = bwlabel(bwpic,4);
mask = zeros(size(bwpic,1),size(bwpic,2), 4);
for i=1:4
Tmask = zeros(size(bwpic,1),size(bwpic,2));
r, c = find(L==i);
for j=1:length(r)
Tmask(r(j), c(j)) = 1;
end
%figure, image(Tmask)
mask(:,:,i) = Tmask;
end
% 特征提取
for i=1:4
testfea(i,:) = get_features(testimg, mask(:,:,i));
end
name = {'梨', '青椒', '西红柿', '香蕉'};
% 识别
index = recognition(testfea, samfea);
% 显示结果
%figure
imshow(testimg)
hold on
for i=1:4
R = regionprops(mask(:,:,i),'boundingbox' );
Rect = R.BoundingBox;
if i==3
text(Rect(1)+Rect(3),Rect(2), name(index(i)-1))
else
text(Rect(1)+Rect(3),Rect(2), name(index(i)))
end
end
三、运行结果





四、总结
本文实现了一套基于颜色直方图峰值和形状偏心率的水果识别系统,完成图像二值化、连通区域分割、HSV色调统计、偏心率计算及最小距离匹配的完整流程。系统通过GUI菜单提供分步操作,便于用户观察各处理环节的中间结果。主要优势在于算法简洁、计算量小,适合简单场景下多目标的快速分类。主要不足在于:颜色特征仅依赖色调直方图峰值,对光照变化敏感;形状特征仅使用偏心率,无法区分形状相似的水果;识别依赖固定样本且类别有限。后续可引入颜色矩、Hu矩等多维特征,或采用深度学习分类器,以提升系统的识别精度和泛化能力。
五、代码获取
接matlab程序定制和论文设计,方向如下:
图像处理|语音识别|图像识别|目标检测|深度学习|神经网络|强化学习|机器学习|通信系统|信号处理|时频分析|小波降噪|路径规划|优化算法|智能算法|数据处理|数学建模|文献复现|算法复现|模型复现等
程序包运行成功,零基础的可以远程帮你运行,赠送安装包。
作为初学者,遇见不会的问题是非常正常的事情,具体代码仿真可通过主页添加 私信博主。