2022年车牌识别系统MATLAB源代码完整 .pdf
《2022年车牌识别系统MATLAB源代码完整 .pdf》由会员分享,可在线阅读,更多相关《2022年车牌识别系统MATLAB源代码完整 .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、clc; clear all; close all; filename, pathname, filterindex = uigetfile(*.jpg;*.tif;*.png;*.gif,All Image Files;. *.*,All Files , 选择待处理图像, . images01.jpg); file = fullfile(pathname, filename);%文件路径和文件名创建合成完整文件名id = Get_Id(file);% 得到 file 中的所有对象Img = imread(file);% 根据路径和文件名读取图片到Img Plate, bw, Loc = Pr
2、e_Process(Img); % 车牌区域预处理result = Plate_Process(Plate, id); % 车牌区域二值化处理% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割bw = Segmation(result); words = Main_Process(bw); % 主流程处理Write_Mask(words, id); % 写出到模板库str = Pattern_Recognition(words); % 识别function id = Get_Id(file) % 获取图像id 信息% 输入参数:% file 图像路径% 输出参数:%
3、id图像id 信息info = imfinfo(file); FS = 422227 354169 293184 235413 214202 . 130938 490061 120297 98686 137193 . 80558 46208 69947 58110 62115 . 59072 52168 60457 53979 50223; id = find(FS = info.FileSize); if isempty(id) warndlg( 未建立该图像模板库,可能运行出错!, 警告 ); id = 1; end function R = Cubic_Spline(P) % 三次样条插
4、值% 输入参数:% P节点矩阵% 输出参数:% R样条节点矩阵名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - % 计算相邻插值点之间的弦长chordlen = sqrt(sum(diff(P, , 1).2,2); % 将弦长参数归一化到0,1 上chordlen = chordlen/sum(chordlen); % 计算每个插值节点处的累加弦长,作为给点处的参数cumarc = 0; cumsum(chordlen); x
5、 = cumarc; N = size(P, 1); R = ; % 以下部分为一元三次样条插值的程序,对于空间三维数据,以同样的累加% 弦长作为参数,对x,y,z 分量做三次一元样条插值得到的结果便是对三维数据% 做三次样条插值for k = 1 : size(P, 2) y = P(:, k); m = zeros(1, N); M = zeros(1, N); n = m; d = m; A = eye(N); A = 2*A; m(1) = 1; n(N) = 1; m(N) = 1; n(1) = 1; for i = 2:N-1 m(i) = (x(i+1)-x(i)/(x(i+1
6、)-x(i-1); n(i) = 1 - m(i); d(i) = 6*(y(i+1) - y(i)/(x(i+1) - x(i) - (y(i) - y(i-1)/(x(i) - x(i-1)/(x(i+1)-x(i-1); end for j = 1 : N-1 A(j, j+1) = m(j); A(j+1, j) = n(j+1); end p = A(2:N-1, 2:N-1); q = d(2:N-1); Q = inv(p)*q; M = zeros(1,N); M(1,1) = 0; M(1,N) = 0; M(1,2:N-1)= Q; S = ; temp = ; for i
7、 = 1:N-1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - % 对每一个分量计算出来的插值曲线进行采样,以便将其画出。s = 50;% 采样点个数z = linspace(x(i),x(i+1),s); h = x(i+1)-x(i); for j = 1:length(z) S(j) = M(i)*(x(i+1)-z(j)3)/(6*h)+M(i+1)*(z(j)-x(i)3)/(6*h)+(y(i)-M(i)*(h2
8、)/6)*(x(i+1)-z(j)/h)+(y(i+1)-M(i+1)*h2/6)*(z(j)-x(i)/h); end temp = temp S; end R(:, k) = temp; end function mask = Get_PointSplineMask(Img, Ptn) % 获取封闭有序节点的蒙板图像% Img图像矩阵% Ptn封闭有序节点% 输出参数:% mask蒙板图像if ndims(Img) = 3 I = rgb2gray(Img); else I = Img; end mask = zeros(size(I); Ptn = Cubic_Spline(Ptn);
9、% 样条插值for i = 1 : size(Ptn, 1)-1 pt1 = Ptn(i, :); % 线段起点pt2 = Ptn(i+1, :); % 线段终点x1 = pt1(1); y1 = pt1(2); x2 = pt2(1); y2 = pt2(2); % 直线段参数A = (y1 - y2)/(x1*y2 - x2*y1); B = (-x1 + x2)/(x1*y2 - x2*y1); % 直线段取点xk = linspace(min(x1, x2), max(x1, x2); if B = 0 yk = linspace(min(y1, y2), max(y1, y2); e
10、lse yk = (-1 - A*xk)/B; end 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - % 赋值操作for j = 1 : length(xk) if isnan(round(yk(j) & isnan(round(xk(j) & . isinf(round(yk(j) & isinf(round(xk(j) & . round(yk(j) 0 & round(xk(j) 0 mask(round(yk(j),
11、 round(xk(j) = 1; end end end mask = logical(mask); % 类型转换mask = bwmorph(mask, bridge); % 桥接操作mask = imfill(mask, hole); % 补洞操作function Im = Image_Rotate(Img, num, flag) % 旋转校正函数% 输入函数:% Img图像矩阵% num图像序号% flag显示图像窗口% 输出函数:% Im 结果图像if nargin 3 flag = 0; end role = 6 0 0 -13 5 10 0 10 0 -5 2 -1 2 2 0
12、-5 -2 0 6 2; Im = imrotate(Img, role(num), bilinear); if flag figure(2); subplot(1, 2, 1); imshow(Img); title(原图像 ); subplot(1, 2, 2); imshow(Im); title(旋转图像 ); end function words = Main_Process(bw, flag_display) % 主流程处理,分割字符并获取% 输入参数:% bw车牌区域图像% flag_display 显示图像标记% 输出参数:% words车牌字符数据if nargin 2 fl
13、ag_display = 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - end m, n = size(bw); k1 = 1; k2 = 1; s = sum(bw); % 列积分投影j = 1; % 列游标while j = n % 寻找车牌图像左侧边界while s(j) = 0 & j = n-1 j = j + 1; end k1 = j-1; % 车牌图像左侧边界% 寻找车牌图像右侧边界while s(j)
14、 = 0 & j Tol val, num = min(sum(bw(:, k1+5:k2-5); bw(:, k1+num+5)=0; % 抹去该字符end end % 再切割bw = Segmation(bw); % 切割出7 个字符m, n = size(bw); wideTol = round(n/20); % 区域宽度最小约束rateTol = 0.25; % 中心区域比值约束flag = 0; word1 = ; while flag = 0 m, n = size(bw); left = 1; wide = 0; % 找到空隙位置while sum(bw(:,wide+1) =
15、0 wide = wide+1; end if wide rateTol flag = 1; word1 = temp; %提取 WORD 1 end bw(:, 1:wide) = 0; % 抹去已处理的区域bw = Segmation(bw); end end % 分割出第二个字符word2, bw = Word_Segmation(bw); % 分割出第三个字符word3, bw = Word_Segmation(bw); % 分割出第四个字符word4, bw = Word_Segmation(bw); % 分割出第五个字符word5, bw = Word_Segmation(bw);
16、 % 分割出第六个字符word6, bw = Word_Segmation(bw); % 分割出第七个字符word7, bw = Word_Segmation(bw); wid = size(word1, 2) size(word2, 2) size(word3, 2) . size(word4, 2) size(word5, 2) size(word6, 2) size(word7, 2); maxwid, indmax = max(wid); maxwid = maxwid + 10; wordi = word1; wordi = zeros(size(wordi, 1), round(m
17、axwid-size(word1, 2)/2) wordi zeros(size(wordi, 1), round(maxwid-size(word1, 2)/2); word1 = wordi; wordi = word2; wordi = zeros(size(wordi, 1), round(maxwid-size(word2, 2)/2) wordi zeros(size(wordi, 1), round(maxwid-size(word2, 2)/2); word2 = wordi; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
18、 - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - wordi = word3; wordi = zeros(size(wordi, 1), round(maxwid-size(word3, 2)/2) wordi zeros(size(wordi, 1), round(maxwid-size(word3, 2)/2); word3 = wordi; wordi = word4; wordi = zeros(size(wordi, 1), round(maxwid-size(word4, 2)/2) wordi zeros(si
19、ze(wordi, 1), round(maxwid-size(word4, 2)/2); word4 = wordi; wordi = word5; wordi = zeros(size(wordi, 1), round(maxwid-size(word5, 2)/2) wordi zeros(size(wordi, 1), round(maxwid-size(word5, 2)/2); word5 = wordi; wordi = word6; wordi = zeros(size(wordi, 1), round(maxwid-size(word6, 2)/2) wordi zeros(
20、size(wordi, 1), round(maxwid-size(word6, 2)/2); word6 = wordi; wordi = word7; wordi = zeros(size(wordi, 1), round(maxwid-size(word7, 2)/2) wordi zeros(size(wordi, 1), round(maxwid-size(word7, 2)/2); word7 = wordi; % figure(1); % subplot(2, 7, 1); imshow(word1); title(字符 1); % subplot(2, 7, 2); imsho
21、w(word2); title(字符 2); % subplot(2, 7, 3); imshow(word3); title(字符 3); % subplot(2, 7, 4); imshow(word4); title(字符 4); % subplot(2, 7, 5); imshow(word5); title(字符 5); % subplot(2, 7, 6); imshow(word6); title(字符 6); % subplot(2, 7, 7); imshow(word7); title(字符 7); % 切割出的字符归一化大小为40*20,此处演示word11 = imre
22、size(word1, 40 20); word21 = imresize(word2, 40 20); word31 = imresize(word3, 40 20); word41 = imresize(word4, 40 20); word51 = imresize(word5, 40 20); word61 = imresize(word6, 40 20); word71 = imresize(word7, 40 20); % subplot(2, 7, 8); imshow(word11); title(字符 1); % subplot(2, 7, 9); imshow(word21
23、); title(字符 2); % subplot(2, 7, 10); imshow(word31); title(字符 3); % subplot(2, 7, 11); imshow(word41); title(字符 4); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - % subplot(2, 7, 12); imshow(word51); title(字符 5); % subplot(2, 7, 13); imsh
24、ow(word61); title(字符 6); % subplot(2, 7, 14); imshow(word71); title(字符 7); % 赋值操作words.word1 = word11; words.word2 = word21; words.word3 = word31; words.word4 = word41; words.word5 = word51; words.word6 = word61; words.word7 = word71; if flag_display figure; subplot(2, 7, 1); imshow(word1); title(字符
25、 1, FontWeight, Bold); subplot(2, 7, 2); imshow(word2); title(字符 2, FontWeight, Bold); subplot(2, 7, 3); imshow(word3); title(字符 3, FontWeight, Bold); subplot(2, 7, 4); imshow(word4); title(字符 4, FontWeight, Bold); subplot(2, 7, 5); imshow(word5); title(字符 5, FontWeight, Bold); subplot(2, 7, 6); ims
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年车牌识别系统MATLAB源代码完整 2022 车牌 识别 系统 MATLAB 源代码 完整
限制150内