6、形态学处理应用(1)- 切割身份证号码

目的:利用matlab将身份证号码切割出来

在这里插入图片描述

效果:
在这里插入图片描述

1. 思路


先把图片转换为二值图,然后利用腐蚀膨胀和图像重建,找到号码所在位置,切割出来。

2. 步骤


  1. 先把图像转换为二值图,由图像知,为了将需要区域变成白色,需要对二值图进行取反
    在这里插入图片描述
    该步代码为:

    clear,clc,close all;
    f=imread('id.jpg');
    g=rgb2gray(f);
    b=~imbinarize(g,0.5);
    imshow(b),title('原图');
    
  2. 观察可知,为了利用图像重建,可以将身份证号码所在区域利用膨胀连通到一块
    在这里插入图片描述
    该步代码为:

    f1=imdilate(b,strel('line',20,0));    %利用长度为20的横线进行膨胀
    figure,imshow(f1),title('膨胀');
    
  3. 利用横线进行腐蚀,去除不需要的连通区域

           观察膨胀后的图片可以发现,人物头像所占区域较大,而号码所在区域特点为较长,因此可以使用横线进行腐蚀,当横线的长度略小于号码的长度时,可以达到将比横线长度小的白色区域均腐蚀掉,而较长的身份证号码的中间的一部分会保留下来,可以再利用重建将所有号码的部分找回。 在这里插入图片描述
    该步新增代码为:

    f2=imerode(f1,strel('line',200,0));   %横线的长度尽可能长一些,才能达到去除头像的目的
    figure,imshow(f2),title('腐蚀');
    

  4. 利用得到的小区域在上面膨胀后的图中重建,找到所有号码所在的连通区域
    在这里插入图片描述
    该步新增代码为:

    f3=imreconstruct(f2,f1);
    figure,imshow(f3),title('第一次重建');
    
  5. 利用所有号码所在的连通区域,在二值图重建,找出图中身份证的号码
    在这里插入图片描述
    该步新增代码为:

    f4=imreconstruct(f3,b);
    figure,imshow(f4),title('结果');
    
  6. 利用find()函数对身份证号码进行切割
    在这里插入图片描述

本例代码为:

clear,clc,close all;
f=imread('id.jpg');
g=rgb2gray(f);
b=~imbinarize(g,0.5);
imshow(b),title('原图');
f1=imdilate(b,strel('line',20,0));
figure,imshow(f1),title('膨胀');
f2=imerode(f1,strel('line',200,0));
figure,imshow(f2),title('腐蚀');
f3=imreconstruct(f2,f1);
figure,imshow(f3),title('第一次重建');
f4=imreconstruct(f3,b);
figure,imshow(f4),title('结果');
[r,c]=find(f4);
f5=f4(min(r):max(r),min(c):max(c));
figure,imshow(f5),title('号码');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值