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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
# R- L. l" W" t+ v3 w1 l
一、简介
# s6 a1 y* y% B* D' P5 h7 G课题介绍
7 t. h. S+ D0 K/ o5 O本设计为基于MATLAB的人民币识别系统。带有一个GUI界面。先利用radon进行倾斜校正,根据不同纸币,选择不同维度的参数识别纸币金额,有通过RGB分量识别100元;
; J0 d4 N) D( I, v, U5 H3 N9 _; H6 R0 @  ^2 g* |% i
通过面额图像的宽度识别1元、5元;通过构建矩形结构体识别10元 ;通过RGB分量识别 20元 与 50元。
# E  P7 o$ Y- S# A$ A1 P/ _% t3 R6 H- z) g( x; k
0 K! o5 V! a2 n! d: u2 L
. X" a6 `1 q' s

% Q+ d1 b# Z/ \' X. C% J二、源代码
8 P% X0 ]* G7 P: k6 T: y- L# y5 d6 w1 q, m
  • 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]);%对图像进行剪切,选取有效区域
    9 w  V! n# U& q  g% z4 s
  • %%
  • 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* g) K4 y! @7 B# Z' k! F% v( p
                     ) g; E8 k" I7 A; g7 w, V- V$ F1 J( |

4 Y0 ?0 k) x! E; L0 r7 V/ w4 t( A三、运行结果
1 Z) w+ L0 y, _% a1 T8 |8 u. B% E  i5 D5 T6 y

! a" K$ M3 C: [! F3 f2 B

该用户从未签到

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-9 10:42 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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