clear;close all;clc;
[filename,filepath]=uigetfile({'*.jpg';'*.bmp'},'输入一个需要识别的图像');
file=strcat(filepath,filename);
ID_origin=imread(file);
ID_origin=imresize(ID_origin,[2560 2100]);
ID_normalization = im2double(ID_origin);
ID_binaryzation0 = im2bw(ID_normalization,0.4);
ID_binaryzation1 = im2bw(ID_normalization,0.3);
ID_strel = strel('disk',2);
ID_binaryzation=imdilate(ID_binaryzation1,ID_strel);
figure('name','身份证原始图');
subplot(2,2,1);
imshow(ID_origin);
title('身份证原图');
subplot(2,2,2);
imshow(ID_binaryzation0);
title('二值化系数0.4');
subplot(2,2,3);
imshow(ID_binaryzation1);
title('二值化系数0.3');
subplot(2,2,4);
imshow(ID_binaryzation);
title('二值化+膨胀处理');
ID_contrary = ~ID_binaryzation;
ID_strel = strel('line', 20 , 0);
ID_bulk_1=imdilate(ID_contrary,ID_strel);
ID_bulk_2=imdilate(ID_bulk_1,ID_strel);
ID_bulk_3=imdilate(ID_bulk_2,ID_strel);
figure('name','身份证膨胀图像');
subplot(221),imshow(ID_contrary);
title('身份证原始图像');
subplot(222),imshow(ID_bulk_1);
title('身份证1次膨胀后的图像');
subplot(223),imshow(ID_bulk_2);
title('身份证2次膨胀后的图像');
subplot(224),imshow(ID_bulk_3);
title('身份证3次膨胀后的图像');
suptitle('身份证膨胀图像');%显示主标题
% 获取连通域
img_reg = regionprops(ID_bulk_3,'area','boundingbox');
rects = cat(1,img_reg.BoundingBox);
figure('name','身份证划分区域'),
imshow(ID_bulk_3);
for i = 1:size(rects, 1)
rectangle('position', rects(i, :), 'EdgeColor', 'r');
end
num1 = find(abs(rects(:,3)-1200)<80);
num2 = find(abs(rects(:,4)-62)<10);
num = intersect(num1,num2);%获取相同序列值
rectangle('position', rects(num,:), 'EdgeColor','g');
title('身份证划分区域');
%提取身份证号码区域
[I_x,I_y] = size(ID_bulk_3);
ID_x = floor(rects(num,2)):ceil(rects(num,2)+rects(num,4));
ID_y = floor(rects(num,1)):ceil(rects(num,1)+rects(num,3));
I_ID = ID_contrary(ID_x,ID_y);
figure('name','身份证号码区');
imshow(I_ID);
title('身份证号码区');
img_reg_1 = regionprops(I_ID, 'area', 'boundingbox');
rects_1 = cat(1, img_reg_1.BoundingBox);
figure('name','身份证号码数字区'),
imshow(I_ID);
for i = 1:size(rects_1, 1)
rectangle('position', rects_1(i, :), 'EdgeColor', 'r');
end
title('身份证号码数字区');
figure('name','身份证数字分割显示');
suptitle('身份证数字分割显示');
for i = 1:18
I_ID_1 = get_number(I_ID,i);
I_ID_1 = ~I_ID_1;
JPG = ones(100,100);
[JPG_x,JPG_y] = size(I_ID_1);
JPG(21:20+JPG_x,21:20+JPG_y) = I_ID_1;
subplot(3,6,i);
imshow(JPG);
name=strcat(int2str(i),'.bmp');
imwrite(JPG,name);
end
clc;
load NET_new net;
for i = 1:18
% name=strcat('10 (',int2str(i),').bmp');
name=strcat(int2str(i),'.bmp');
JPG_origin = ~imread(name);
BMP = reshape(JPG_origin,numel(JPG_origin),1);
[a,Pf,Af]=sim(net,BMP);
result(i) = round(a);
end
%% 检验身份证信息
ID_test = result(1:17);
ID_check = [7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ];
ID_sum = sum(ID_test.*ID_check);
TD_mod = mod(ID_sum,11) + 1;
ID_last = [1 0 10 9 8 7 6 5 4 3 2];
ID_18 = ID_last(TD_mod);
%验证身份证信息是否正确,保存文档至txt
if ID_18 == result(18)
disp('身份证信息识别成功!');
fid = fopen('身份证号码.txt','wt');
fprintf(fid,'%g',abs(result(1:17)));
if result(18) == 10
fprintf(fid,'X');
else
fprintf(fid,'%g',abs(result(18)));
fopen(fid);
end
else
disp('身份证信息识别错误!');
end
result
没有合适的资源?快使用搜索试试~ 我知道了~
基于神经网络的身份证号码识别算法
共9个文件
jpg:6个
m:2个
mat:1个
3星 · 超过75%的资源 需积分: 41 67 下载量 34 浏览量
2017-12-30
15:49:58
上传
评论 7
收藏 8.56MB RAR 举报
温馨提示
这是我自行编写的基于神经网路的身份证号码识别算法,内涵身份证号码训练库,身份证字符分割,字符识别算法,并且提供完整的算法实现说明文档,希望能够给有需要的朋友提供帮助。(因涉及个人信息,只提供若干处理后的身份证照片)
资源推荐
资源详情
资源评论
收起资源包目录
共享资料.rar (9个子文件)
共享资料
ic0.jpg 239KB
基于神经网络的图像识别算法 _页面_3.jpg 199KB
get_number.m 642B
基于神经网络的图像识别算法 _页面_2.jpg 306KB
NET_new.mat 7.32MB
基于神经网络的图像识别算法 _页面_5.jpg 274KB
基于神经网络的图像识别算法 _页面_4.jpg 236KB
new_ID.m 3KB
基于神经网络的图像识别算法 _页面_1.jpg 339KB
共 9 条
- 1
资源评论
- 失败女神2019-07-25挺不错的呀。
pengg_hai
- 粉丝: 3
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功