在好例子网,分享、交流、成长!
您当前所在位置:首页MATLAB 开发实例MATLAB语言基础 → 人民币识别课程设计(论文+代码)

人民币识别课程设计(论文+代码)

MATLAB语言基础

下载此实例
  • 开发语言:MATLAB
  • 实例大小:8.70M
  • 下载次数:3
  • 浏览次数:75
  • 发布时间:2024-05-14
  • 实例类别:MATLAB语言基础
  • 发 布 人:感性的蟑螂
  • 文件格式:.zip
  • 所需积分:2

实例介绍

【实例简介】使用MATLAB实现人民币识别,包含论文,代码

【实例截图】

from clipboard

【核心代码】

function result = recognise()
%%
%声明全局变量
global result; 
global l; %原始图像
global x;
global I6;
global I5;

%%
l = getImage();                %读入图像
l1=rgb2gray(l);                %将真彩色图像转换为灰度图像
bw1=edge(l1,'sobel', 'both');  %采用sobel算子进行边缘检测
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');                     %对图片进行旋转矫正
pic_gray=rgb2gray(pic);                         %转换为灰度图像

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]);            %明暗反转

pic_b_edge=edge(pic_c,'sobel');                 %采用sobel算子进行边缘检测
se=[1;1;1];                                     %线型结构元素
pic_imerode=imerode(pic_b_edge,se);             %腐蚀图像
se=strel('rectangle',[60,60]);                  %矩形结构元素
pic_imclose=imclose(pic_imerode,se);            %图像聚类、填充图像
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);%将真彩色图像RGB转换为灰度强度图像
dw_gray=imadjust(dw_gray,[0,1],[1,0]);%用于调节灰度图像的亮度
dw_bw=im2bw(dw_gray);%灰度图像转变为二值图像
%%
%%分割提取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]);    %对图像进行剪切,选取有效区域
 I1=rgb2gray(I);    %转换为灰度图像
 I2=medfilt2(I1);    %滤波默认窗口
 I3=imadjust(I2,[0.3,0.5],[0,1],1);   %明暗反转
 I4=im2bw(I3);
 se=strel('rectangle',[3,3]);   %构造结构函数,以长方形构造一个se
 
    I5=imdilate(I4,se);            %图像膨胀
    I5=imerode(I5,se);             %图像腐蚀
    I5=~I5;
%% 
    
    [p,n]=size(I5);
     X1=1;
    while(sum(I5(:,X1))<15&&X1<n)
        X1=X1 1;
    end
    X2=n;
    while(sum(I5(:,X2))<15&&X2>1)
        X2=X2-1;
    end
 
    I6=I(:,X1:X2,:);%I6
    I7=I4(:,X1:X2); %I7
%%   
fR=z(:,:,1);%提取红色分量
fG=z(:,:,2);%提取绿色分量
fB=z(:,:,3);%提取蓝色分量
averageR=mean(mean(fR));
averageG=mean(mean(fG));  %返回RGB元素的平均值
averageB=mean(mean(fB));

%通过图像RGb分量判断RMB币值   
if averageR-averageG>35
 result=100;  

else
   
    [m,n]=size(I6);
 %通过提取出的数值图像的大小 来判断币值
    if(n<=90)
         result=1; %一位数值宽度
    end
    
    if(n>90&&n<165)   
         result=5; %一位数值宽度
    end
    
    if(n>310)  
         result=100;%三位数值宽度
    end

    if(n>=165&&n<310)
        
        I7=I4(:,X1:X2);%I7       
        se=strel('rectangle',[35,5]);
        I8=imdilate(I7,se);
        I9=imerode(I8,se);
        I10=~I9;
        
        [M,N]=size(I10);
        M1=round(M/3);
        M2=round(2*M/3);
        N1=round(N/2);
        ui1=sum(sum(I10(1:M1,1:N1)));
        ui2=sum(sum(I10(M1:M2,1:N1)));
        ui3=sum(sum(I10(M2:M,1:N1)));
        
        if(ui1>25&&ui2>150&&ui3>25)
             result=10;
        else
            %通过RGB分量判断 20 与 50
            r=mean(mean(I6(:,:,1)));
            g=mean(mean(I6(:,:,2)));
            b=mean(mean(I6(:,:,3)));
            
            
                if(r>=110)
                  result=20;              
                else    
                  result=50;
                end
                
        end
    end
end

      

【源码目录】

人民币识别

├── getImage.m
├── recognise.m
├── rmb.fig
├── rmb.m
├── 特征区域
│   ├── 100-2.jpg
│   ├── 100元特征区域.png
│   ├── 20元特征区域.jpg
│   ├── 50-2.jpg
│   ├── 50元特征区域.jpg
│   └── 人民币特征区域长宽度示意图.png
├── 待识别图片
│   ├── 1-1.jpg
│   ├── 1-2.JPG
│   ├── 10-1.jpg
│   ├── 10-2.JPG
│   ├── 100-1.jpg
│   ├── 100-2.jpg
│   ├── 20-1.jpg
│   ├── 20-2.jpg
│   ├── 5-1.jpg
│   ├── 5-2.JPG
│   └── 50-1.jpg
├── 人民币识别论文.docx
└── 人民币识别论文.pdf

2 directories, 23 files


实例下载地址

人民币识别课程设计(论文+代码)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警