如何用Matlab进行车牌定位?

时间:2013-08-04 09:41:51

标签: matlab image-processing localization image-recognition

我想开发一个可识别车牌的matlab程序。

但在此之前,我必须在“CAR”图像中对板进行本地化。

怎么做?

我读了很多论文,说过修改过的Hough变换,底帽,垂直拖尾,Gabor过滤等方法。

我有2个示例代码,但结果图像错误。

以下是我的第一个代码,但结果是错误

I = imread('DSC_0512.JPG'); 
BW = im2bw(I,0.4); 
se = strel('rectangle', [2 20]); 
BW_opened = imclose(BW,se); 
figure, imshow(BW_opened,[]) 
s=regionprops(BW_opened,'Area','BoundingBox'); 
[hh,ii] = sort([s.Area],'descend'); 
out = imcrop(I,s(ii(2)).BoundingBox); 
figure,imshow(out); 

这是我的第二个代码,结果错误 ......

I = imread('DSC_0512.JPG');
r = I(:,:,1);  %red plane 
g = I(:,:,2);  %green plane
b = I(:,:,3);  %blue plane
BW = (r >= 230) & (r <= 260) & (g >= 160) & (g <= 240) & (b >= 160) & (b <= 240);
s = regionprops(BW, 'Area', 'BoundingBox');
[HH, ii] = sort([s.Area], 'descend');
out = imcrop(I, s(ii(1)).BoundingBox);
imshow(out);

以下是我的imagesthis

的示例

请帮帮我..有什么建议??

2 个答案:

答案 0 :(得分:3)

基于Haar特征的Viola-Jones算法被广泛用于对象检测。它特别适合人脸检测。

您可以在维基百科上找到关于该算法的概述,并在此处获取原始的2001 Viola和Jones论文:(http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.10.6807

它是在Matlab的计算机视觉系统工具箱中实现的,更具体地说是vision.CascadeObjectDetector System对象完成工作。

示例代码可在此处找到:http://www.mathworks.com/matlabcentral/fileexchange/29437-viola-jones-object-detection

到目前为止,这么好。但是这里有一个问题:afaik,Matlab只提供面部,眼睛,上半身等的分类器,但不适用于车牌。因此,您需要自己训练算法。因此,您需要提供带注释的培训样本。这些是车牌位置已知的图像。 trainCascadeObjectDetector函数执行该培训。

答案 1 :(得分:0)

虽然我同意@ Sebastian的做法。我相信Viola-Jones算法对图像的仿射和投影失真效果不佳。这对于面部是正确的,对于任何其他对象应该是相同的。

如果您尝试实施的系统可以确保在大多数情况下号牌始终面向相机。这样做会很好。

另一种可能值得探索的方法是基本文本检测。有多种算法可供选择。因为我们可以安全地假设车牌上总是包含文字。您可以使用MSER功能算法来查找此文本。您可以找到MATLAB实现here.。一旦检测到文本。使用空间局部性,应该很容易提取图像中的牌照位置。唯一可能失败的情况是车牌号损坏。