找回密码
 注册
关于网站域名变更的通知
查看: 574|回复: 3
打印 上一主题 下一主题

基于matlab RGB和BP神经网络的人民币识别系统含GUI界面

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-5-31 10:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

7 V7 Q+ C5 w6 ^1 N一、简介( R4 ?* U; c* n4 N% W
课题介绍: t# S$ z+ ~% {# X8 `5 P
本设计为基于MATLAB的人民币识别系统。带有一个GUI界面。先利用radon进行倾斜校正,根据不同纸币,选择不同维度的参数识别纸币金额,有通过RGB分量识别100元;
0 E, E3 K2 P3 A8 O" g7 P1 H
" E' t) H3 z2 G, z, R通过面额图像的宽度识别1元、5元;通过构建矩形结构体识别10元 ;通过RGB分量识别 20元 与 50元。; w3 ?7 S$ t, [' P1 O) B7 p* o, |
" C- L7 \. `& c- Q7 k+ X
: {. R- \0 Z" }1 P9 l- n

0 D9 U* V) e. q. a. J1 z5 t* x. G5 n8 P: R  B$ l( G
二、源代码" h; O' w; c$ l# H
! i7 J2 i! D% {- h  s& L  p& p/ J
  • function varargout = main(varargin)
  • % MAIN MATLAB code for main.fig
  • %      MAIN, by itself, creates a new MAIN or raises the existing
  • %      singleton*.
  • %
  • %      H = MAIN returns the handle to a new MAIN or the handle to
  • %      the existing singleton*.
  • %
  • %      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
  • %      function named CALLBACK in MAIN.M with the given input arguments.
  • %
  • %      MAIN('Property','Value',...) creates a new MAIN or raises the
  • %      existing singleton*.  Starting from the left, property value pairs are
  • %      applied to the GUI before main_OpeningFcn gets called.  An
  • %      unrecognized property name or invalid value makes property application
  • %      stop.  All inputs are passed to main_OpeningFcn via varargin.
  • %
  • %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
  • %      instance to run (singleton)".
  • %
  • % See also: GUIDE, GUIDATA, GUIHANDLES
  • % Edit the above text to modify the response to help main
  • % Last Modified by GUIDE v2.5 29-May-2020 00:04:07
  • % Begin initialization code - DO NOT EDIT
  • gui_Singleton = 1;
  • gui_State = struct('gui_Name',       mfilename, ...
  •     'gui_Singleton',  gui_Singleton, ...
  •     'gui_OpeningFcn', @main_OpeningFcn, ...
  •     'gui_OutputFcn',  @main_OutputFcn, ...
  •     'gui_LayoutFcn',  [] , ...
  •     'gui_Callback',   []);
  • if nargin && ischar(varargin{1})
  •     gui_State.gui_Callback = str2func(varargin{1});
  • end
  • if nargout
  •     [varargout{1:nargout}] = gui_maiNFCn(gui_State, varargin{:});
  • else
  •     gui_mainfcn(gui_State, varargin{:});
  • end
  • % End initialization code - DO NOT EDIT
  • % --- Executes just before main is made visible.
  • function main_OpeningFcn(hObject, eventdata, handles, varargin)
  • % This function has no output args, see OutputFcn.
  • % hObject    handle to figure
  • % eventdata  reserved - to be defined in a future version of MATLAB
  • % handles    structure with handles and user data (see GUIDATA)
  • % varargin   command line arguments to main (see VARARGIN)
  • % Choose default command line output for main
  • handles.output = hObject;
  • % Update handles structure
  • guidata(hObject, handles);
  • % UIWAIT makes main wait for user response (see UIRESUME)
  • % uiwait(handles.figure1);
  • % --- Outputs from this function are returned to the command line.
  • function varargout = main_OutputFcn(hObject, eventdata, handles)
  • % varargout  cell array for returning output args (see VARARGOUT);
  • % hObject    handle to figure
  • % eventdata  reserved - to be defined in a future version of MATLAB
  • % handles    structure with handles and user data (see GUIDATA)
  • % Get default command line output from handles structure
  • varargout{1} = handles.output;
  • % --- Executes on button press in pushbutton1.
  • function pushbutton1_Callback(hObject, eventdata, handles)
  • % 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)
  • %% 图像读取
  • [filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
  •     '*.*','All Files' });
  • l = imread([ pathname,filename]);
  • axes(handles.axes1)
  • imshow(l);
  • title('原始图像')
  • l1=rgb2gray(l);                %将真彩色图像转换为灰度图像
  • bw1=edge(l1,'sobel', 'both');  %采用sobel算子进行边缘检测
  • handles.bw1=bw1;
  • theta=0:179;                   %定义theta角度范围
  • r=radon(bw1,theta);            %对图像进行Radon变换
  • %%%%%检测Radon变换矩阵中的峰值所对应的列坐标%%%%
  • [m,n]=size(r);
  • c=1;
  • for i=1:m
  •     for j=1:n
  •         if  r(1,1)<r(i,j)
  •             r(1,1)=r(i,j);
  •             c=j;
  •         end
  •     end
  • end
  • rot=90-c;
  • pic=imrotate(l,rot,'crop');                     %对图片进行旋转矫正
  • handles.pic=pic;
  • pic_gray=rgb2gray(pic);                         %转换为灰度图像
  • handles.pic_gray=pic_gray;
  • pic_a=imadjust(pic_gray,[0,0.001],[1,0]);       %明暗反转
  • pic_b=1.3*pic_gray+0.7*pic_a;
  • pic_c=imadjust(pic_b,[0.5,1],[0,1]);            %明暗反转
  • handles.pic_c=pic_c;
  • pic_b_edge=edge(pic_c,'sobel');                 %采用sobel算子进行边缘检测
  • handles.pic_b_edge=pic_b_edge;
  • se=[1;1;1];                                     %线型结构元素
  • pic_imerode=imerode(pic_b_edge,se);             %腐蚀图像
  • handles.pic_imerode=pic_imerode;
  • se=strel('rectangle',[60,60]);                  %矩形结构元素
  • pic_imclose=imclose(pic_imerode,se);            %图像聚类、填充图像
  • handles.pic_imclose=pic_imclose;
  • pic_bwareaopen=bwareaopen(pic_imclose,10000);   %去除聚团灰度值小于10000的部分
  • %%%%%求纸币行起始位置和终止位置%%%%%
  • [y,x]=size(pic_bwareaopen);
  • I6=double(pic_bwareaopen);
  • Y1=zeros(y,1);
  • for i=1:y
  •     for j=1:x
  •         if(I6(i,j,1)==1)
  •             Y1(i,1)= Y1(i,1)+1;
  •         end
  •     end
  • end
  • [temp MaxY]=max(Y1);
  • %%
  • %%%%%%求纸币列起始位置和终止位置%%%%%
  • PY1=MaxY;
  • while ((Y1(PY1,1)>=50)&&(PY1>1))
  •     PY1=PY1-1;
  • end
  • PY2=MaxY;
  • while ((Y1(PY2,1)>=50)&&(PY2<y))
  •     PY2=PY2+1;
  • end
  • IY=pic(PY1:PY2,:,:);
  • X1=zeros(1,x);
  • for j=1:x
  •     for i=PY1:PY2
  •         if(I6(i,j,1)==1)
  •             X1(1,j)= X1(1,j)+1;
  •         end
  •     end
  • end
  • %%
  • %%提取并画出背景中的RMB图像%%
  • PX1=1;
  • while ((X1(1,PX1)<3)&&(PX1<x))
  •     PX1=PX1+1;
  • end
  • PX2=x;
  • while ((X1(1,PX2)<3)&&(PX2> PX1))
  •     PX2=PX2-1;
  • end
  • dw=pic(PY1:PY2,PX1:PX2,:);
  • dw_gray=rgb2gray(dw);
  • dw_gray=imadjust(dw_gray,[0,1],[1,0]);
  • dw_bw=im2bw(dw_gray);
  • handles.dw_bw=dw_bw;
  • %%
  • %%分割提取RMB数值图像%%
  • [m,n]=size(dw_bw);
  • m1=round(m/3);
  • m2=round(2*m/3);
  • n1=round(n/6);
  • n2=round(n/3);
  • n3=round(2*n/3);
  • n4=round(5*n/6);
  • sum1=sum(sum(dw_bw(m1:m2,n1:n2)));
  • sum2=sum(sum(dw_bw(m1:m2,n3:n4)));
  • if sum1>sum2
  •     dw=imrotate(dw,180,'crop');
  • end
  • %%
  • %%图像处理%%
  • x=dw;
  • x1=imresize(x,[236,500]);%'缩放图像
  • 关闭
  • z=imcrop(x1,[270,150,160,65]);%对图像进行剪切,选取有效区域
    , d* [$ T8 @+ M) {# C& a2 }
  • %%
  • I=imcrop(x1,[130,60,130,65]);    %对图像进行剪切,选取有效区域
  • handles.I=I;
  • I1=rgb2gray(I);    %转换为灰度图像
  • I2=medfilt2(I1);    %滤波默认窗口
  • I3=imadjust(I2,[0.3,0.5],[0,1],1);   %明暗反转
  • I4=im2bw(I3);
  • handles.I4=I4;
  • se=strel('rectangle',[3,3]);   %构造结构函数,以长方形构造一个se# n. T% ?% d' S* ?2 m- {( ^6 k
                     + _6 n) m* B7 F! P

  R& U# ?7 h0 O- J三、运行结果& B4 q  G# o. D7 |1 |  u

8 }5 k" H, l5 e( u/ P) G) D 4 r9 ~; d- o2 r

该用户从未签到

2#
发表于 2021-5-31 11:26 | 只看该作者
基于matlab RGB和BP神经网络的人民币识别系统含GUI界面
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2021-5-31 13:58 | 只看该作者
    基于matlab RGB和BP神经网络的人民币识别系统含GUI界面

    该用户从未签到

    4#
    发表于 2021-5-31 13:59 | 只看该作者
    基于matlab RGB和BP神经网络的人民币识别系统含GUI界面
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-18 21:03 , Processed in 0.078125 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表