13、带背景的车牌分割

带背景车牌分割

目的:提取出以下图片中的车牌
在这里插入图片描述
结果示例:
在这里插入图片描述

思路:可以利用顶帽底帽操作去除背景,然后转换为二值图,通过腐蚀膨胀和去除小对象,去除无关区域,最后使用图像切割的方法,切割出车牌部分。(本例中用到的函数的详细讲解都已经在前面叙述,故在本例中不再详细赘述。)

步骤:

  1. 首先将图片转换为灰度图
    在这里插入图片描述
    该步代码:

    clear,clc,close all;
    f=imread('c5.jpg');
    g=rgb2gray(f);
    figure,imshow(g);
    
  2. 将图片转换为二值图,但是观察二值图可以发现,在车的背景中有大面积白色,这非常影响我们对白色车牌部分的识别提取,因此我们可以选择在灰度图中使用顶帽操作实现白色背景的去除。
    在这里插入图片描述

  3. 使用顶帽操作在灰度图中去除白色背景,可以看出,背景大面积的白色背景没有了,可以转换为二值图查看效果。
    在这里插入图片描述代码为:

    clear,clc,close all;
    f=imread('c5.jpg');
    g=rgb2gray(f);
    subplot(1,2,1),imshow(g);
    ghat=imtophat(g,strel('disk',7));
    subplot(1,2,2),imshow(ghat);
    
  4. 将图片转换为二值图,利用默认参数转换为二值图,可以看出还是有较多的白色区域。通过观察灰度图可以看出,车牌是最亮的区域,而还有一部分区域是比较亮的,所以我们可以想到用 imbinarize 的参数来设置对二值图转换时候的转换标准。
    在这里插入图片描述
    修改代码得到如下:
    可以看出,有较多的白色消失了。
    在这里插入图片描述
    代码为:

    clear,clc,close all;
    f=imread('c5.jpg');
    g=rgb2gray(f);
    subplot(1,2,1),imshow(g);
    ghat=imtophat(g,strel('disk',7));
    subplot(1,2,2),imshow(ghat);
    bw=imbinarize(ghat,0.4);
    figure,imshow(bw);
    
  5. 观察二值图,有许多较小白色区域,可以先用 bwareaopen 函数去除这些小对象
    在这里插入图片描述
    新增代码:

    bwao=bwareaopen(bw,27);
    figure,imshow(bwao);
    
  6. 我们用 edge 函数提取每一部分的边界,通过边界进行每一块连通区域的识别
    在这里插入图片描述
    新增代码:

    bwedge=edge(bwao);
    figure,imshow(bwedge);
    
  7. 观察边界图,可以发现车牌部分的竖直连通区域较多,可以使用实现进行腐蚀,去除多余部分
    在这里插入图片描述
    新增代码:

    bwerode=imerode(bwedge,strel('line',7,90));
    figure,imshow(bwerode);
    
  8. 观察腐蚀后的图片,我们可以通过膨胀连接车牌区域的分散部分。
    在这里插入图片描述
    新增代码:

    bwfinal=imdilate(bwerode,strel('disk',29));
    figure,imshow(bwfinal);
    
  9. 除去旁边的小对象,就可以得到车牌部分的区域
    在这里插入图片描述
    新增代码为:

    result=bwareaopen(bwfinal,15000);
    figure,imshow(result);
    
  10. 由于得到的区域较大,可以先通过腐蚀减少区域部分,再利用图像切割便可得到该区域。在图像切割时若要得到彩色图,要使用三个维度的参数切割。
    在这里插入图片描述本例代码:

clear,clc,close all;
f=imread('c5.jpg');
g=rgb2gray(f);
subplot(1,2,1),imshow(g);
ghat=imtophat(g,strel('disk',7));
subplot(1,2,2),imshow(ghat);

bw=imbinarize(ghat,0.4);
figure,imshow(bw);

bwao=bwareaopen(bw,27);
figure,imshow(bwao);

bwedge=edge(bwao);
figure,imshow(bwedge);

bwerode=imerode(bwedge,strel('line',7,90));
figure,imshow(bwerode);

bwfinal=imdilate(bwerode,strel('disk',29));
figure,imshow(bwfinal);

result=bwareaopen(bwfinal,15000);
figure,imshow(result);

resulterode=imerode(result,strel('disk',23));
[r,c]=find(resulterode);
cut=f(min(r):max(r),min(c):max(c),:);
figure,imshow(cut);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值