基于SVM支持向量机的车牌分割识别算法matlab仿真

目录

一、理论基础

二、核心程序

三、仿真测试结果

作者ID :fpga和matlab
CSDN主页:https://blog.csdn.net/ccsss22?type=blog
擅长技术:
1.无线基带,无线图传,编解码
2.机器视觉,图像处理,三维重建
3.人工智能,深度学习
4.智能控制,智能优化
5.其他

一、理论基础

车牌识别系统集合了先进的光电、计算机视觉、信号处理、图像处理、模式识别、人工智能、远程数据访问等技术,实现对监控路面过往的每一辆机动车的特征图像和车辆全景图像进行连续全天候实时记录,利用图像处理的分析方法,提取出车牌区域,进而对车牌区域进行字符分割和识别。随着交通现代化的发展要求,汽车牌照自动识别技术已经越来越受到人们的重视。车牌识别(License Plate Recognition,LPR)技术是一项利用车辆的动态视频或静态图像进行牌照号码自动识别的模式识别技术。车牌字符识别的准确性和识别速度直接关系到该技术是否能够得到实际应用。传统的字符识别方法,如模板匹配法、神经网络法等,在进行车牌字符识别时其识别率很大程度上依赖于训练样本的数量,且在无特征提取的情况下,识别的正确率相对较低。由于车牌字符识别包括数字、字母、汉字等不同识别对象,同时又由于大量噪声的存在,这就要求识别分类器具有更好的性能和推广能力。
智能交通系统作为一个热点研究领域,已经引起日益广泛的关注,而车牌自动识别(License Plate Recognition,LPR)是机器视觉与模式识别技术在这个领域的应用,是实现交通管理的一个重要环节。车辆牌照作为车辆的外在唯一身份标识是智能交通系统中大量信息的来源和直接处理对象,从而使得车牌识别系统的研究成为智能交通系统的核心。车牌识别技术在智能交通领域的应用十分广泛。比如在高速公路领域中,联网收费的各种舞弊现象日益增多,急需智能化的系统管理和手段。目前已有不同级别的城市建立了车牌识别平台,为高速公路引进了智能化的技术。不单单是高速公路领域涉及到车牌识别技术,现在如公安部门、交通管理等部门都已开始利用车牌识别技术为其领域服务,利用车牌识别技术和其他技术相结合,设立监控点对流通车辆进行监控。

基于SVM的车牌识别,整个设计流程如下所示,首先将输入的测试数据进行训练,得到一个训练结果,这里,我们通过支持向量机的方法进行训练。然后将测试图像输入的训练结果的模型中进行测试分析。以上是基于SVM向量机的训练和测试,除此之外,最为重要的是对车牌的提取,在进行训练和测试之前,我们需要对车牌进行提取,获得车牌中每个数据的分割后的图形信息,然后才能进行测试。

二、核心程序

clc;
clear;
close all;
warning off;
%读取图片
I = rgb2gray(imread('IMAGE\6.jpg'));
figure;
imshow(I);
%首先提取车牌上的中文,字母以及数字
%首先提取车牌上的中文,字母以及数字
addpath 'func'
dw = func_position(I);%步骤一:进行车牌定位
figure;
imshow(dw),title('定位剪切后的彩色车牌图像')
[img1,img2,img3,img4,img5,img6,img7] = func_seg(dw);
figure;
subplot(241);imshow(img1);title('第1个字符');
subplot(242);imshow(img2);title('第2个字符');
subplot(243);imshow(img3);title('第3个字符');
subplot(244);imshow(img4);title('第4个字符');
subplot(245);imshow(img5);title('第5个字符');
subplot(246);imshow(img6);title('第6个字符');
subplot(247);imshow(img7);title('第7个字符');
%SVM训练
%SVM训练
model = func_svm_train();
model
%SVM测试识别
%SVM测试识别
img1s = imresize(img1,[140 70]);%将需要识别的数据变为和库图像一样的大小
inpt1 = func_p2s(img1s);
img2s = imresize(img2,[140 70]);
inpt2 = func_p2s(img2s);
img3s = imresize(img3,[140 70]);
inpt3 = func_p2s(img3s);
img4s = imresize(img4,[140 70]);
inpt4 = func_p2s(img4s);
img5s = imresize(img5,[140 70]);
inpt5 = func_p2s(img5s);
img6s = imresize(img6,[140 70]);
inpt6 = func_p2s(img6s);
img7s = imresize(img7,[140 70]);
inpt7 = func_p2s(img7s);
figure;
subplot(241);imshow(img1s);title('第1个字符');
subplot(242);imshow(img2s);title('第2个字符');
subplot(243);imshow(img3s);title('第3个字符');
subplot(244);imshow(img4s);title('第4个字符');
subplot(245);imshow(img5s);title('第5个字符');
subplot(246);imshow(img6s);title('第6个字符');
subplot(247);imshow(img7s);title('第7个字符');
predict_label1 = svmpredict(0, inpt1, model);
predict_label2 = svmpredict(0, inpt2, model);
predict_label3 = svmpredict(0, inpt3, model);
predict_label4 = svmpredict(0, inpt4, model);
predict_label5 = svmpredict(0, inpt5, model);
predict_label6 = svmpredict(0, inpt6, model);
predict_label7 = svmpredict(0, inpt7, model);
clc
%得到识别号码
data1 = func_check(predict_label1);
data2 = func_check(predict_label2);
data3 = func_check(predict_label3);
data4 = func_check(predict_label4);
data5 = func_check(predict_label5);
data6 = func_check(predict_label6);
data7 = func_check(predict_label7);
data = [data1 data2 data3 data4 data5 data6 data7];
data
hs = msgbox(data);
ht = findobj(hs, 'Type', 'text');
set(ht, 'FontSize', 20, 'Unit', 'normal');
%由于识别的测试需要大量的数据进行测试,这里直接通过特征数据进行测试
%由于识别的测试需要大量的数据进行测试,这里直接通过特征数据进行测试
%由于识别的测试需要大量的数据进行测试,这里直接通过特征数据进行测试
load shibielv.mat
[r,c] = size(data);
train = [1:100];
test = [101:r];
train_data = data(train,:);
test_data = data(test,:);
train_Ind = label(train);
test_Ind = label(test);
model = svmtrain(train_Ind, train_data, '-t 0 -c 1 -g 0.001');
[predict_label, tempaccuracy] = svmpredict(test_Ind, test_data, model);

三、仿真测试结果

 

 


 

 



A09-25

posted @ 2022-10-25 22:08  fpga和matlab  阅读(126)  评论(0编辑  收藏  举报