车牌倾斜矫正

     在车牌识别系统中, 车牌字符能够正确分割的前提是车牌图像能够水平,以至于水平投影和垂直投影能够正常进行。如果车牌倾斜没有矫正,那么水平投影和垂直投影,甚至铆钉都无法正常处理。所以,当车辆信息中获取车牌的第一步,应该是检查倾斜角度,做倾斜矫正。

1、倾斜角度检测: 霍夫变换

2、倾斜矫正: 图像旋转


1、提取车牌整体图片数据, 根据第一步结果,提取出,车牌在辆大体位置信息。

关于车牌定位,我使用两部,第一步粗略定位,然后做一些预处理,比如倾斜矫正,然后第二部才是精确定位,只提取车牌的位置信息图像


2、利用HSV颜色空间转换,获取车牌背景蓝色区域位置,获取车牌粗略信息图像后,由于车牌背景颜色与周围颜色有很明显的区别,这里采用HSV颜色过滤的方法,过滤绿色背景图像


3、水平膨胀, 水平膨胀的目的,是为了边缘检测,只要求检测边缘,尽量除去字符信息,也可以降低hough变换的运算量


4、水平差分运算,相当于 边缘检测,经过上面的处理后,才进行边缘检测


5、这个时候就可以利用hough变换检测直线了。

由于hough变换运算量十分大,所以,尽量减少图像中的白点,来降低计算量

下图的红线,就是检测出来的角度,为177度


6、利用旋转算法,旋转刚才粗略提取的车牌位置,尽管旋转后的车牌有些锯齿,但是已经能够保证水平,就可以使用水平投影和垂直投影了


这是旋转后的车牌,有些锯齿出现,由于图像分辨率较低,就没有用差值运算。

7、精确提取车牌



8、正常分割字符



9、识别结果



由于正弦余弦运算,计算量比较大,这里进行一部分优化,就是正弦余弦计算用数组代替。

生成正弦,余弦数组的的代码如下

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <math.h>  
  5.   
  6. int main(void)  
  7. {  
  8.     char buf[20];  
  9.     int i;  
  10.     float p;  
  11.     float k;  
  12.     FILE *fcos;  
  13.     FILE *fsin;  
  14.       
  15.     fcos = fopen(".\\cos.txt""wb");  
  16.     fsin = fopen(".\\sin.txt""wb");  
  17.       
  18.     if(fcos == NULL || fsin == NULL)  
  19.     {  
  20.         printf("open error\n");  
  21.         exit(-1);  
  22.     }  
  23.   
  24.   
  25.     i = 0;  
  26.   
  27.     for(i = 0; i <= 180; i++)  
  28.     {  
  29.         k = 3.1415926 * i / 180.0;  
  30.         p = cos(k);  
  31.           
  32.                   
  33.         if((i%16 == 0))  
  34.             fwrite("\n",strlen("\n"),1,fcos);  
  35.           
  36.         sprintf(buf,"%f, ", p);  
  37.         fwrite(buf,strlen(buf),1,fcos);  
  38.   
  39.     }  
  40.   
  41.     for(i = 0; i <= 180; i++)  
  42.     {  
  43.         k = 3.1415926 * i / 180.0;  
  44.         p = sin(k);  
  45.           
  46.                   
  47.         if((i%16 == 0))  
  48.             fwrite("\n",strlen("\n"),1,fsin);  
  49.           
  50.         sprintf(buf,"%f, ", p);  
  51.         fwrite(buf,strlen(buf),1,fsin);  
  52.   
  53.     }  
  54.     fclose(fcos);  
  55.     fclose(fsin);  
  56.     return 0;  
  57. }  




  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值