飞道的博客

【车牌识别】基于HOG特征提取和GRNN网络的车牌识别算法matlab仿真

433人阅读  评论(0)

1.软件版本

matlab2017b

2.系统原理

       从图的算法流程图可知,基于车牌图像字符特征提取和神经网络的识别算法其首先将训练样本数据进行预处理,得到质量较高的样本数据,然后对这些样本数据进行HOG特征提取,再将特征数据通过神经网络进行训练学习最后得到基于神经网络的车牌识别模块。然后采集一些常规的测试样本图片,同样,对这些样本进行预处理操作,然后通过颜色模型对车牌进行定位和提取,然后将提取后的车牌进行字符分割,然后分别对分割后的多个字符进行HOG特征提取,最后输入到神经网络模型中进行识别,并得到识别输出结果。下面通过MATLAB对该算法进行仿真测试分析。

2.1基于HOG变换的特征提取方法

    基于HOG变换的图像特征提取算法,目前被广泛应用在图像识别领域[29],如车牌识别,人脸识别,车辆识别等。下面对HOG变换的基本原理进行介绍。HOG特征的提取其详细步骤如下:

    步骤一:细胞划分。如图1所示,将每一张目标图像划分为多个小的图像区域,每个小的图像区域作为一个细胞单元(如图1左图所示),由四个细胞单元构成一个块单元(如图1右图所示):

    步骤二:计算块单元的像素点的梯度特征数据,其计算公式为:

 

 

 通过上述HOG向量的计算步骤可知,HOG特征向量的提取主要是基于局部图像得到的,因此其具体更强的抗干扰能力。

2.2 GRNN神经网络

        GRNN广义回归神经网络[28]是一种具有极强学习能力和适应能力的神经网络,其通过少量样本就可以实现对样本的训练和学习。此外,GRNN网络是一种基于非参数核回归实现方式的网络函数,其通过将样本数据作为后验概率进行验证,然后进行非参数估计。

       GRNN网络第一层为网络输入层,输入层的神经元数量和学习样本中输入向量的维数相同。因此,每一个神经网络均接收一个维度的数据输入,然后在输入层中,将这些数据传递到第二层隐含层中。 

3.部分源码


  
  1. clc;
  2. clear;
  3. close all;
  4. addpath 'func\'
  5. %STEP1
  6. %**************************************************************************
  7. I =imread('Images\ 18.jpg ');
  8. figure(1)
  9. subplot(161);
  10. imshow(I);
  11. title('原图 ');
  12. I1=rgb2gray(I);
  13. subplot(162);
  14. imshow(I1);
  15. title('灰度图 ');
  16. %车牌定位
  17. Ip = func_position(I,I1,1.4,150);
  18. subplot(163);
  19. imshow(Ip);
  20. title('车牌区域 ');
  21. %膨胀
  22. se = strel('ball ',16,16);
  23. Ip2 = uint8(imdilate(Ip,se));
  24. Ip2 = 255*double(im2bw(Ip2));
  25. subplot(164);
  26. imshow(Ip2);
  27. title('膨胀 ');
  28. %去掉小面积的噪声干扰
  29. %Determine the connected components.
  30. L = bwlabeln(Ip2);
  31. %Compute the area of each component.
  32. S = regionprops(L,'Area ');
  33. %Remove small objects.
  34. bw2 = ismember(L, find([S.Area] >= 10000));
  35. subplot(165);
  36. imshow(bw2);
  37. title('去掉干扰 ');
  38. %提取车牌
  39. PP = im2bw(bw2);
  40. Ipos = func_Pai_Position(I,PP);
  41. subplot(166);
  42. imshow(Ipos);
  43. title('车牌提取 ');
  44. save Result_STEP1.mat Ipos
  45. %STEP2
  46. %**************************************************************************
  47. %提取的车牌
  48. load Result_STEP1.mat
  49. figure;
  50. subplot(221);
  51. imshow(Ipos);
  52. title('车牌提取 ');
  53. %如果有角度倾斜,则旋转
  54. Iang = func_angle(Ipos);
  55. subplot(222);
  56. imshow(Iang);
  57. title('车牌提取-旋转 ');
  58. %车牌分割
  59. I2 = uint8(255*im2bw(Iang,1.2*graythresh(Iang)));
  60. subplot(223);
  61. imshow(I2);
  62. title('等待分割的车牌 ');
  63. tmps = func_fenge(I2);
  64. save Result_STEP2.mat tmps Iang
  65. %STEP3
  66. %**************************************************************************
  67. %提取的车牌
  68. load Result_STEP2.mat
  69. word1=imresize(tmps{1},[40 20]);
  70. word2=imresize(tmps{2},[40 20]);
  71. word3=imresize(tmps{3},[40 20]);
  72. word4=imresize(tmps{4},[40 20]);
  73. word5=imresize(tmps{5},[40 20]);
  74. word6=imresize(tmps{6},[40 20]);
  75. word7=imresize(tmps{7},[40 20]);
  76. figure;
  77. subplot(241);imshow(word1);
  78. subplot(242);imshow(word2);
  79. subplot(243);imshow(word3);
  80. subplot(244);imshow(word4);
  81. subplot(245);imshow(word5);
  82. subplot(246);imshow(word6);
  83. subplot(247);imshow(word7);

  
  1. clc;
  2. clear;
  3. close all;
  4. addpath 'func\'
  5. %提取的车牌
  6. load Result_STEP2.mat
  7. word1=imresize(tmps{ 1},[ 40 20]);
  8. word2=imresize(tmps{ 2},[ 40 20]);
  9. word3=imresize(tmps{ 3},[ 40 20]);
  10. word4=imresize(tmps{ 4},[ 40 20]);
  11. word5=imresize(tmps{ 5},[ 40 20]);
  12. word6=imresize(tmps{ 6},[ 40 20]);
  13. word7=imresize(tmps{ 7},[ 40 20]);
  14. figure;
  15. subplot( 241);imshow(word1);
  16. subplot( 242);imshow(word2);
  17. subplot( 243);imshow(word3);
  18. subplot( 244);imshow(word4);
  19. subplot( 245);imshow(word5);
  20. subplot( 246);imshow(word6);
  21. subplot( 247);imshow(word7);
  22. %神经网络训练
  23. tic
  24. net = func_grnn_train();
  25. toc
  26. %识别
  27. %第一个中文
  28. words = word1;
  29. wordss = func_yuchuli(words);
  30. wordsss = sim(net,wordss ');
  31. [V,I] = max(wordsss);
  32. d = 14;
  33. y{ 1} = func_check(d);
  34. %第 2个英文文
  35. words = word2;
  36. wordss = func_yuchuli(words);
  37. wordsss = sim(net,wordss ');
  38. [V,I] = max(wordsss( 11: 13));
  39. d = I;
  40. y{ 2} = func_check(d+ 10);
  41. for i = 3: 7
  42. if i == 3
  43. words = word3;
  44. end
  45. if i == 4
  46. words = word4;
  47. end
  48. if i == 5
  49. words = word5;
  50. end
  51. if i == 6
  52. words = word6;
  53. end
  54. if i == 7
  55. words = word7;
  56. end
  57. wordss = func_yuchuli(words);
  58. wordsss = sim(net,wordss ');
  59. [V,I] = max(wordsss);
  60. d = I;
  61. y{i} = func_check(d);
  62. end
  63. STR = [num2str(y{ 1}),num2str(y{ 2}),num2str(y{ 3}),num2str(y{ 4}),num2str(y{ 5}),num2str(y{ 6}),num2str(y{ 7})];
  64. s=strcat(STR);
  65. disp(s);
  66. load Result_STEP1.mat
  67. figure;
  68. subplot( 211);
  69. imshow(Iang);
  70. title(s);

4.仿真效果

 

 

5.仿真效果

[01]吴卉.城市交通信息平台中地图匹配、车辆跟踪及速度估算的研究[D].上海交通大学, 2006.

[02]李驰.智能交通中的车牌识别算法研究[D].华中科技大学,2012.

[03]陈振学,汪国有,刘成云.一种新的车牌图像字符分割与识别算法[J].微电子学与计算机,2007,24(2):42-44.A10-53


转载:https://blog.csdn.net/ccsss22/article/details/125650125
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场