我想开发一个可识别车牌的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);
的示例
请帮帮我..有什么建议??
答案 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.。一旦检测到文本。使用空间局部性,应该很容易提取图像中的牌照位置。唯一可能失败的情况是车牌号损坏。