找回密码
 注册
关于网站域名变更的通知
查看: 591|回复: 1
打印 上一主题 下一主题

基于matlab分割法之银行卡号识别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-21 11:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
4 z4 P/ i7 l5 A6 O
一、简介
3 ?$ G: e! j% g. Z( L6 g( ^3 `$ E本文针对印刷体字符和凹凸字符以及市面上的银行卡号不同数字字体进行识别。
; D; H: Z8 h9 v7 {9 m3 ]9 j( H0 W# l3 Y9 m" d
/ S! ]0 @0 ]* ]6 L+ g" w* {
1.概述  K, h  u2 _" b7 |# m) d
: b  \% i1 j; L- j8 P* {; m
近几年来我国互联网金融飞速发展,网上资金交易逐渐成为日常生活中的主流消费方式。在进行网上资金操作时,往往涉及到对银行卡的操作。在输入银行卡号时,若能通过银行卡图像直接快速准确识别出银行卡号,其在电子支付的便利性、安全性等方面的应用,将会给人们的生活带来更大的便利。今天就给大家展示一下如何使用matlab如何识别银行卡号。
( ^8 E1 X5 u( {! M+ p+ F5 i
0 n, }* u  B: n) x: @# b . ]+ I2 Y+ f, i  Y1 _, o

) B  ~6 `# s. C. k4 W. G& i6 L; K% ?' s' N( F
二、源代码6 w' M( \7 Y( Z" D$ @4 j5 k! I
2 Q# A  P( v! v$ D
  • %印刷体识别
  • clc;clear;close all;
  • addpath('util/');
  • addpath('data/');
  • inputpath='data/';
  • fdir=dir(strcat(inputpath,'*.jpg'));
  • p=size(fdir);
  • method=2;%定位方法
  • levelth=0.3;%水平分割缩放阈值
  • for i=2:p(1)
  • im=imread(fdir(i).name);
  • imtp=imresize(im,0.25);
  • %图像灰度化
  • if(length(size(im))>1)
  •     im=double(rgb2gray(im));
  • else
  •     im=double(im);
  • end
  •     im=imresize(im,0.25);
  •     th=graythresh(im);
  •     pt=size(im);
  • %提取上下位面
  •     if(method==1)
  •        im=GuassSmoothfilter(im)*255;%平滑
  •        cent=2;
  •        [Labels,BW]=KmeansSg(im,cent);%kmeans聚类
  •        [pMax,pMin]=Findline(BW);%Hough变换
  •        downlevel=pMax.y-(pMax.y-pMin.y)*0.30;
  •        uplevel=pMin.y+(pMax.y-pMin.y)*0.55;
  •     else
  •        [pMax,pMin,pxMax,pxMin]=levelSg(im,levelth);%水平集分割
  •        downlevel=pMax-(pMax-pMin)*0.29;
  •        uplevel=pMin+(pMax-pMin)*0.55;
  •     end
  •    imcrop=im(uplevel:downlevel,:);%定位银行卡号
  •    po=size(imcrop);
  •    imtpcrop=zeros(po(1),po(2),3);
  •    imtpcrop(1:po(1),:,1)=imtp(uplevel:downlevel,:,1);
  •    imtpcrop(1:po(1),:,2)=imtp(uplevel:downlevel,:,2);
  •    imtpcrop(1:po(1),:,3)=imtp(uplevel:downlevel,:,3);
  •    figure;
  •    imshow(imcrop,[]);title('灰度切割')
  •    figure;
  •    imshow(imtpcrop,[]);title('彩色切割')
  •    srcyuv=rgb2yuv(imtpcrop);%rgb转换为YUV通道
  •    figure;
  •    imshow(srcyuv(:,:,2),[]);title('yuv通道')
  •    edg=edge(srcyuv(:,:,3),'sobel');%canny边缘检测
  •    figure;
  •    B=im2bw(uint8(imcrop),0.2);
  •    imshow(B,[]);title('二值化')
  •    %[L,num] = bwlabel(~B,4);%获取联通区域
  •    imwrite(uint8((~B)*255),'x.jpg');
  •    figure;
  •    imshow(edg,[]);title('边缘')
  •    B=uint8((~B)*255);
  •    cropAll(B)%最终裁剪
  •    recognize%卡号识别
  • end* ?7 l. x8 q# O+ t1 q  e& ?& o. c

( F. l4 a3 Y8 o: r
$ ?& V" \' e  F! s# E" S: U# D

该用户从未签到

2#
发表于 2021-4-21 13:11 | 只看该作者
基于matlab分割法之银行卡号识别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-19 12:56 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表