一、项目简介
本系统是一个基于MATLAB GUI的智能收银与识别系统,集成了纸币面值识别和水果品种识别两项功能。系统通过图像处理技术实现硬币/纸币的自动面值判定,以及多类水果的自动分类识别,适用于小型商超收银、自助结算等场景。
纸币/硬币识别流程:将彩色图像转为灰度后采用Otsu自适应阈值二值化,通过bwareaopen去除小面积噪声,利用形态学闭运算和孔洞填充获得完整目标区域。通过计算目标区域像素面积与外接矩形面积之比(填充率)判断物体类型:填充率大于0.81判定为硬币,否则为纸币。硬币依据面积大小判定面值(大于12000像素为1元,10000~12000为0.5元,8700~10000为0.1元);纸币依据红色分量与绿色分量的比值判定面值(大于1.15为100元,小于0.93为50元,介于1.08~1.15为20元,以此类推)。识别结果和累计金额实时显示于界面。
二、部分源码
function pushbutton1_Callback(hObject, eventdata, handles)
% --- Executes on button press in pushbutton1.
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global image %定义一个全局变量im
filename,pathname,filterindex=uigetfile({'*.jpg';'*.png'},'选择图片')
str=pathname filename; %合成路径+文件名
image=imread(str); %读取图片
axes(handles.axes1); %使用第一个axes
imshow(image); %显示图片
RGB = image;
I = rgb2gray(RGB);
threshold = graythresh(I);
bw = im2bw(I,threshold);
% remove all object containing fewer than 30 pixels
bw = bwareaopen(bw,30);
% fill a gap in the pen's cap
se = strel('disk',2);
bw = imclose(bw,se);
% fill any holes, so that regionprops can be used to estimate
% the area enclosed by each of the boundaries
bw = imfill(bw,'holes');
ed=edge(bw);
%%%%%以上是图像二值化 上面制作二值化图像
%下面计算圆度
L = bwlabel(bw);
L1 = bwlabel(ed);
Ar=zeros(1,max(L(:)));
Pr=zeros(1,max(L1(:)));
for i=1:max(L(:))
Ar(i)=sum(bw(L==i));
y,x=find(L==i);
x0=min(x(:));
x1=max(x(:));
y0=min(y(:));
y1=max(y(:));
Pr(i)=Ar(i)/((y1-y0)*(x1-x0));
end
if max(Pr) >0.81
note=1
else
note=0
end
if note==1
imager=image(:,:,1);
imageg=image(:,:,2);
r=sum(sum(imager));
g=sum(sum(imageg));
bizhi=r/g;
if bizhi>1.15
money=100
elseif bizhi<0.93
money=50
elseif (bizhi>1.08)&(bizhi<1.15)
money=20
elseif (bizhi>1.0)&(bizhi<1.03)
money=10
elseif (bizhi>1.03)&(bizhi<1.08)
money=5
elseif (bizhi>0.93)&(bizhi<1.0)
money=1
end
end
if note==0
total= bwarea(bw)
if total>12000
money=1
elseif (total>10000)&(total<12000)
money=0.5
elseif (total>8700)&(total<10000)
money=0.1
else
money=0
end
end
global allmoney;
set(handles.edit1,'string',money);
allmoney=allmoney+money;
set(handles.edit8,'string',allmoney);
三、运行结果




四、总结
本文实现了一套兼具纸币识别与水果分类功能的智能收银辅助系统,完成图像二值化、形态学处理、特征提取、基于阈值规则的分类决策以及金额统计的完整流程。系统集成多种识别功能,具备较高的实用性和可扩展性。主要不足在于:识别规则完全依赖固定阈值,对光照变化和图像质量敏感;纸币识别仅依据红绿比值,难以区分新版人民币颜色差异;水果识别阈值设定存在逻辑冗余和潜在冲突;代码结构较为混乱。后续可引入基于深度学习的目标检测与分类方法,统一识别不同种类物品,同时重构代码结构以提升系统的可维护性和识别准确率。
五、代码获取
接matlab程序定制和论文设计,方向如下:
图像处理|语音识别|图像识别|目标检测|深度学习|神经网络|强化学习|机器学习|通信系统|信号处理|时频分析|小波降噪|路径规划|优化算法|智能算法|数据处理|数学建模|文献复现|算法复现|模型复现等
程序包运行成功,零基础的可以远程帮你运行,赠送安装包。
作为初学者,遇见不会的问题是非常正常的事情,具体代码仿真可通过主页添加 私信博主。