zoukankan      html  css  js  c++  java
  • 复杂背景车牌定位

    由于车牌号码多为垂直数字,而车身引入的干扰在水平方向,进行垂直边缘检测,即可去除水平方向上颜色区别较大的干扰。该算法核心之处在于利用了车牌号码与车身干扰正好垂直的特点,仅在垂直方向检测边缘,而对水平的边缘则不予理会。垂直边缘检测,可用roberts算子、sobel算子、prewitt算子,但这些算子在这里使用效果都不好。于是作者[1]提出了采用改进后的边缘检测算子,其实也很简单,实现起来也不复杂,但效果却比较理想的,从图中就可以看出来。算法流程如下, 我这里在原文的基础上加入了中值滤波与闭运算,并采用自适应直方图均衡处理,才能达到下面的效果。算法流程如下

     

        这是改进后的边缘检测算子,其中d为字符的像素宽度,我这里设为2

    得到二值图后,就能看到车牌的区域轮廓了,这时通过扫描即可得到车牌的具体位置。剩下的就是字符识别工作了。

    今天看在文章上看到这个算法,那么简单却能剔除背景定位车牌,有点不可思议,按照作者的方法写程序试了一下,效果还是挺不错的,不过仅对这幅图有效,对其他的图片是没有效果的。在这里也要感谢作者能提出这种方法,这样的思路对于强干扰背景下的特征定位也是很有价值的。这里给出matlab代码,具体定位与识别方法见参考[1],车牌图片也是从原文中复制过来的。

    1. f=imread('CAR1.JPG');%f为原图  
    2. I1=rgb2gray(f);%I1灰度图  
    3. I2=histeq(I1);%I2进行直方图均衡化后的图  
    4. %下面进行边缘检测,用改进的roberts算法  
    5. %g(i,j)=sqrt( (f(i,j)-f(i-d,j))^2 + (f(i+d,j)-f(i,j))^2 )  
    6. % d设为车牌字符像素宽度  
    7. % ------------------------edge-----------------------------  
    8. [M, N]=size(I2);  
    9. I3=zeros(M,N);  
    10. I2=double(I2);   
    11. I3=double(I3);  
    12. d=2;  
    13. for i=1:M  
    14.     for j=1:N-d  
    15.         if(j<=d)  
    16.             %I3(i,j)=sqrt( (I2(i,j)-0)^2+(I2(i,j+d)-I2(i,j))^2 );  
    17.             I3(i,j)=0;  
    18.         else  
    19.             I3(i,j)=sqrt( (I2(i,j)-I2(i,j-d))^2+(I2(i,j+d)-I2(i,j))^2 );  
    20.         end  
    21.     end  
    22. end  
    23. %进行归一化处理,防止处理后数据超过255  
    24. maxI3 = max(max(I3));  
    25. for i=1:M  
    26.     for j=1:N  
    27.        I3(i,j)=I3(i,j)*255/maxI3;  
    28.     end  
    29. end  
    30. I2=uint8(I2);  
    31. I3=uint8(I3);%I3为边缘检测后的图  
    32. % ------------------------edge-----------------------------  
    33. I3=medfilt2(I3,[3,3]);%对I3进行中值滤波  
    34. %I4为自适应直方图均衡化  
    35. t4=graythresh(I3);  
    36. I4=im2bw(I3,t4);  
    37. I4=1-I4;%I4取反色  
    38. se4=strel('rectangle',[5,5]);  
    39. I5=imclose(I4,se4);%I5为闭运算后的图  
    40. %-------------------find the boundary---------------------  
    41. By1=255-zeros(N,1);%垂直上边界  
    42. By2=zeros(N,1);%垂直下边界  
    43. Bx1=255-zeros(M,1);%水平左边界  
    44. Bx2=zeros(M,1);%水平右边界  
    45. for i=2:M-1  
    46.     for j=2:N-1  
    47.         if( (I5(i-1,j)==1)&&(I5(i,j)==1)&&(I5(i+1,j)==0) )% h up  
    48.             By1(j)=i;  
    49.         end  
    50.         if( (I5(i-1,j)==0)&&(I5(i,j)==0)&&(I5(i+1,j)==1) )% h down  
    51.             By2(j)=i;  
    52.         end  
    53.         if( (I5(i,j)==1)&&(I5(i,j+1)==0) )% v left  
    54.             Bx1(i)=j;  
    55.         end  
    56.         if( (I5(i,j)==0)&&(I5(i,j+1)==1) )% v right  
    57.             Bx2(i)=j;  
    58.         end  
    59.     end  
    60. end  
    61. min(By1);%车牌上边界  
    62. max(By2);%车牌下边界  
    63. min(Bx1);%车牌左边界  
    64. max(Bx2);%车牌右边界  
    65. I6 = zeros( (max(By2)-min(By1)), (max(Bx2)-min(Bx1)) );%存放车牌  
    66. for i=min(By1):max(By2)  
    67.     for j=min(Bx1):max(Bx2)  
    68.         I6(i-min(By1)+1,j-min(Bx1)+1) = I2(i,j);  
    69.     end  
    70. end  
    71. I6=uint8(I6);%I6为车牌图像  
    72. figure(1);  
    73. subplot(331);imshow(f);title('original');   
    74. subplot(332);imshow(I1);title('gray');   
    75. subplot(333);imshow(I2);title('histeq');   
    76. subplot(334);imshow(I3);title('Edge+medfilt');   
    77. subplot(335);imshow(I4);title('2ValueImg');  
    78. subplot(336);imshow(I5);title('close');  
    79. subplot(337);imshow(I1);title('position');rectangle('Position',[min(Bx1),min(By1),max(Bx2)-min(Bx1),max(By2)-min(By1)],'EdgeColor',[1,0,0]);   
    80. subplot(338);imshow(I6);title('car');  

    参考:

    [1]周开军,陈三宝,徐江陵.复杂背景下的车牌定位和字符分割研究.计算机工程,2007.33(4):198-200.

    分享到:
  • 上一篇:SendMessage()两程序通信与MFC手动添加用户需要的新消息及其反汇编注解
  • 下一篇:Windows编程使用__declspec(dllimport)的意义
查看全文
  • 相关阅读:
    Leetcode Minimum Path Sum
    Leetcode House Robber II
    洛谷 P5375 【[THUPC2019]组合数据结构问题】题解
    洛谷 P1855 【榨取kkksc03】题解
    CF1173A 【Nauuo and Votes】题解
    [NOIP2018D1T1][NOIP2013D1T1][Luogu P5019]铺设道路 题解
    [BZOJ1083][SCOI2005]繁忙的都市 题解
    统计自己洛谷AC题目爬虫
    CF43A Football 题解
    SP2 PRIME1
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/2168879.html
  • Copyright © 2011-2022 走看看