MATLAB人民币面额识别

自动缴费机、存取款一体机和自动售货机出现在了我们的生活中。这些先进的设备中最重要的一门技术就是:纸币识别技术。当我们将钞票投入缴费机或者存款机时,机器必定会首先识别用户投入的是面额为多少的纸币,之后再进行真伪辨别、数据写入等功能。目前已经有很多的识别技术诸如图像匹配法识别,神经网络识别、尺寸识别、纸币内部荧光物质识别等等。本小组使用 matlab 软件,

利用软件对图像处理的能力,在保证识别准确率的前提下对 100 元、

50 元和 20 元的人民币进行了识别。

    • 纸币识别流程图

v2-a867b998f250e32776c5de8867756a06_b.jpg



v2-e3603e86bebd8c44f0f73b513e7faf62_b.jpg

流程各部分详细说明

、读入待检测图片

读入一张 100 元人民币图片。

  1. 、图像边缘检测提取

边缘检测共有两种方法,一种是使用 edge 函数进行边缘检测;另一种是二值化

+ 图像填充 + 提取边缘的方法。

v2-8969ba5670d6368c4a31425922854240_b.jpg

使用 edge 函数进行边缘检测,选择 Sobel 算子。如图, sobel 算子边缘检测后的图像

v2-379d34c3c5e004c7b87922566869a82e_b.jpg

但是由于内部白色纹路较多, 为了不影响边缘截取,故选择第二种方法:二值化 + 图像填充

+ 提取边缘。

首先对图像进行二值化处理, 然 后 使 用 imfill 函 数 , 调用“ hole” 格式,对图像中的空 洞 进 行 填 充 。 然 后 调 用bwperim 函数, 对二值图像进行边缘检测。右图是检测的过程和结果。

  1. 、边缘剪切

得到了二值化的边缘图像后,需要对边缘进行剪切,以切掉背景图案, 只留下钞票图案,便于按比例分割图片。

我们采用 mode 函数,对边缘位置确定。首先,将二值图读入矩阵,生成m 行n 列的矩阵。然后一行一行进行检测,遇到白色的区域(值为1 )时,就将白色区域所处的列位置记入数组。当检测完毕后,使用

mode 函数对数组进行检测,数组中数字出现的最多的即是边缘的位置。

v2-d884d8b69fc3eadf8370cf4408ab66cb_b.jpg

提取中央数字部分

v2-65354a51b066b5c7a07321bac4fb036e_b.jpg


FFv2=jianqie(0.275*m:0.50*m,0.254*n:0.5* n)

  1. 、中央部分识别

1. 区分百元和 50 、 20 元; 2. 区分 50 元和 20 元


v2-c8468215e247e10ee64db4f2cbb003c4_b.jpg

v2-33ca31a49f9a8f38e56b8d09577db888_b.jpg

v2-d40b6ad4ac6bf5a653ae272f295d9a4b_b.jpg


v2-a4d7cc657082b65bf6d254bebe4ec6ac_b.jpg



•如图所示5 和2 的细节图。取5 和2 的靠左的一小部分进行

比较(红框圈的),数字5 后两根蓝线之间的距离小于上

面两根蓝线的距离,而2 恰恰相反。于是可以得出结果。


程序运行结果


v2-b8d09d878b197a8c3389f0066beb3d59_b.jpg



v2-d7649810b212cc206f2ac6413ce8d080_b.jpg


v2-291b31c5d71beca2882806b91bbad587_b.jpg

遇到的问题:

关于背景复杂度的问题

( 1 )过于复杂的背景无法正常识别

因为背景如果过于复杂,二值化后会导致很多复杂的背景变成连续的线条。当这些线条比较 长的时候,边缘检测程序就会将这段线条识别为 边缘,因为众数计算的时候这个位置同样满足。 所以系统会认为此处就是边缘,但事实上只是背 景中的一些二值化的线条。故而导致剪切边缘无 法正确实现,进而影响到后面的中央分割和识别。


( 2 )浅色背景无法正常识别

v2-9b471c023f473a3ad14d0b6d9e7f7393_b.jpg

本程序的边缘检测方法是图像二值化后利用背景和纸币之间的黑白差异来寻找纸币的边缘。当人民币的背景为浅色时, 二值化的时候会将浅色自动二值化为白色.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的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、付费专栏及课程。

余额充值