MATLAB人民币识别系统

题目:基于MATLAB的人民币识别系统

一、课题介绍

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

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

  • 运行GUI界面设计

  • 运行界面

  • 源码
  1. 读入钞票

function ima = getImage()

[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...

          '*.*','All Files' });

ima = imread([ pathname,filename]);

      

      

  1. 对纸币进行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');                     %对图片进行旋转矫正

  1. 纸币图像预处理

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的部分

  1. 得到纸币数字位置定位

%%%%%求纸币行起始位置和终止位置%%%%%

[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            

     end

 end

  1. 数值识别

 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

  

以下是一个简单的MATLAB人民币识别系统的代码及注释,代码中包含了图片处理和GUI界面的部分代码,但是由于篇幅限制,无法展示完整的代码。需要注意的是,这个代码只是一个简单的示例,具体实现需要根据实际情况进行调整和完善。 ```matlab % 人民币识别系统 % 读取图片 I = imread('rmb.jpg'); % 图片处理:倾斜校正 theta = 1:180; [R, xp] = radon(I, theta); P = max(R, [], 2); [~, idx] = max(P); angle = theta(idx); I = imrotate(I, -angle, 'bilinear', 'crop'); % 图片处理:红色通道处理 I_red = I(:,:,1); I_red = imadjust(I_red, [0.2 0.8], [0 1]); % 图片处理:裁剪图像 I_100 = imcrop(I_red, [50 50 50 50]); I_20 = imcrop(I_red, [100 100 50 50]); I_10 = imcrop(I_red, [150 150 50 50]); I_5 = imcrop(I_red, [200 200 50 50]); I_1 = imcrop(I_red, [250 250 50 50]); % 图片处理:计算面积 area_100 = sum(I_100(:)); area_20 = sum(I_20(:)); area_10 = sum(I_10(:)); area_5 = sum(I_5(:)); area_1 = sum(I_1(:)); % 判断纸币面值 if area_100 > 5000 money = 100; elseif area_20 > 2000 money = 20; elseif area_10 > 1000 money = 10; elseif area_5 > 500 money = 5; elseif area_1 > 250 money = 1; else money = 0; end % 显示结果 figure; imshow(I); title(['Money: ', num2str(money)]); % GUI界面 function rmb_gui % 创建GUI界面 f = figure('Visible', 'off', 'Position', [360, 500, 450, 285]); % 创建上传按钮 uicontrol('Style', 'pushbutton', 'String', 'Select an image',... 'Position', [315,220,100,25],... 'Callback', @upload_callback); % 创建显示面板 hAxes = axes('Units', 'pixels', 'Position', [50, 50, 200, 200]); % 显示结果 function show_result(image, money) axes(hAxes); imshow(image); title(['Money: ', num2str(money)]); end % 上传图片回调函数 function upload_callback(hObject, eventdata) % 打开文件选择窗口 [filename, pathname] = uigetfile({'*.jpg';'*.png'}, 'Select an image file'); if isequal(filename,0) || isequal(pathname,0) return; end % 读取图片 image = imread(fullfile(pathname, filename)); % 图片处理 % ... % 判断纸币面值 % ... % 显示结果 show_result(image, money); end % 显示GUI界面 set(f, 'Name', 'RMB Recognition System', 'NumberTitle', 'off', 'Visible', 'on'); end % 启动GUI界面 rmb_gui(); ``` 以上是一个简单的MATLAB人民币识别系统的代码及注释,仅供参考。如果需要更加完整和复杂的代码,建议参考相关的论文和开源项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值