1 基于卷积神经网络cnn实现银行卡数字识别模型
模型参考这里。
2 部分代码
%印刷体识别 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)); elseim=double(im); endim=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;endimcrop=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
3 仿真结果
4 参考文献
[1]周曦, and 许梅芳. "基于图像的银行卡识别方法及装置.", CN108960221A. 2018.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。