|
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 |
|