【图像识别】基于matlab RGB和BP神经网络的人民币识别系统含GUI界面【含Matlab源码 097期】

一、简介

课题介绍
本设计为基于MATLAB的人民币识别系统。带有一个GUI界面。先利用radon进行倾斜校正,根据不同纸币,选择不同维度的参数识别纸币金额,有通过RGB分量识别100元;

通过面额图像的宽度识别1元、5元;通过构建矩形结构体识别10元 ;通过RGB分量识别 20元 与 50元。

【图像识别】基于matlab RGB和BP神经网络的人民币识别系统含GUI界面【含Matlab源码 097期】_第1张图片

二、源代码

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]);%对图像进行剪切,选取有效区域
%%
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

三、运行结果

【图像识别】基于matlab RGB和BP神经网络的人民币识别系统含GUI界面【含Matlab源码 097期】_第2张图片

四、备注

完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【图像识别】基于matlab路面裂缝识别含GUI【含Matlab源码 009期】
【图像识别】基于matlab身份证号码识别【含Matlab源码 014期】
【图像压缩】基于matlab图像处理教程系列之图像压缩【含Matlab源码 024期】
【图像分割】基于matlab图像处理教程系列之图像分割(一)【含Matlab源码 025期】
【图像分割】基于matlab图像处理教程系列之图像分割(二)【含Matlab源码 026期】
【模式识别】基于matlab指纹识别【含Matlab源码 029期】
【模式识别】基于matlab银行卡号识别【含Matlab源码 030期】
【图像聚类】基于matlab FCM和改进的FCM脑部CT图像聚类【含Matlab源码 074期】
【图像评价】基于matlab CCF算法的图像质量评价【含Matlab源码 075期】
【图像增强】基于matlab局部对比度增强的CLAHE算法之直方图增强【含Matlab源码 076期】
【图像融合】基于matlab Frequency Partition之图像融合【含Matlab源码 077期】
【图像评价】基于matlab SVM之图像无参考质量评价【含Matlab源码 078期】
【图像处理】基于matlab DWT+DCT+PBFO改进图像水印隐藏提取含GUI【含Matlab源码 081期】
【图像变换】基于matalb DIBR-3D图像变换【含Matalb源码 082期】
【图像融合】基于matlab CBF算法的图像融合【含Matlab源码 083期】
【图像分割】基于matlab模糊聚类算法FCM的图像分割【含Matlab源码 084期】
【图像分割】基于形态学重建和过滤改进FCM算法(FRFCM)的的图像分割【Matlab 085期】
【图像去噪】基于matlab自适应形态学的图像去噪【含Matlab源码 086期】
【图像增强】基于matlab DEHAZENET和HWD的水下去散射图像增强【含Matlab 087期】
【图像增强】基于matlab PSO寻优ACE的图像增强【含Matlab源码 088期】
【图像增强】基于matlab区域相似变换函数和蜻蜓算法之灰度图像增强【含Matlab源码 089期】
【图像重建】基于matlab图像重建之ASTRA算法【含Matlab源码 090期】
【图像分割】基于matlab四叉树图像分割【含Matlab源码 091期】
【图像分割】基于matlab心脏中心线提取【含Matlab源码 092期】
【图像识别】基于matlab svm植物叶子疾病检测和分类【含Matlab源码 093期】
【图像识别】基于matlab模板匹配之手写数字识别系统GUI界面【含Matlab源码 094期】
【图像识别】基于matlab不变矩的数字验证码识别含GUI界面【含Matlab源码 095期】
【图像识别】基于matlab条形码识别系统【含Matlab源码 096期】

你可能感兴趣的:(matlab,图像处理)