2

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

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

怎么做?

我读过很多论文,其中提到了修改霍夫变换、底帽、垂直涂抹、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);

这是我的图像示例,这是

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

4

2 回答 2

3

基于 Haar 特征的 Viola-Jones 算法被广泛用于目标检测。它在人脸检测方面特别受欢迎。

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

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

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

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

于 2013-08-04T12:11:36.557 回答
0

虽然我同意@Sebastian 的方法。我确实相信 Viola-Jones 算法在图像的仿射和投影失真方面表现不佳。这适用于面,对于任何其他对象也应如此。

如果您尝试实施的系统可以确保车牌在大多数情况下始终正对着摄像机。这会很好用。

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

于 2016-03-11T18:05:37.823 回答