车牌定位matlab程序:通过hsv彩色分割方式定位车牌

最近看了《基于数字图像处理的车牌识别研究》这篇论文,对车牌识别知识讲的很仔细,推荐。

1.(摘自《基于数字图像处理的车牌识别研究》)

通过对大量车牌图像的分析,可以发现对于具有某种目标色的像素,可以直接通过对H、s、v三分量设定一个范围来把它们过滤出来,无需进行较复杂的色彩距离计算, 这样可以在色彩分割时节省大量的时间。这种过滤对蓝色和黄色车牌特别有效,但对于黑色和白色的过滤效果不是很理想。这是因为对于纯色的黑色和白色,它们的色调和饱和度没有意义,所以和其它颜色相比缺少了两个过虑指标。

根据这篇论文所讲的步骤想要写程序,开始居然是无从下手。通过参考各种车牌识别matlab程序,才写出来第一个程序。此程序是针对蓝色车牌的识别,识别效果还不错,通过HSV颜色空间分割确实可行。

通过先验知识,汽车车牌的HSV值可由下表确定:

车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第1张图片


2.蓝色车牌HSV彩色分割定位Matlab程序

clear all;clc;
[Im,Path]=uigetfile('*jpg','选择图片');
Image=imread([Path,Im]);
Image=im2double(Image);
s=size(Image,2)
I=rgb2hsv(Image);
[y,x,z]=size(I);
Blue_y = zeros(y, 1);
p=[0.56 0.71 0.4 1 0.3 1 0];
for i = 1 : y
    for j = 1 : x
        hij = I(i, j, 1);
        sij = I(i, j, 2);
        vij = I(i, j, 3);
        if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&...
                (vij>=p(5)&&vij<=p(6))
            Blue_y(i, 1) = Blue_y(i, 1) + 1; 
        end
    end
end
[~, MaxY] = max(Blue_y);
Th = p(7);
PY1 = MaxY;
while ((Blue_y(PY1,1)>Th) && (PY1>0))
    PY1 = PY1 - 1;
end
PY2 = MaxY;
while ((Blue_y(PY2,1)>Th) && (PY2<y))
    PY2 = PY2 + 1;
end
PY1 = PY1 - 2;
PY2 = PY2 + 2;
if PY1 < 1
    PY1 = 1;
end
if PY2 > y
    PY2 = y;
end
It=Image(PY1:PY2,:,:);
subplot(231),imshow(It);
IY = I(PY1:PY2, :, :);
subplot(232),imshow(IY);
I2=im2bw(IY,0.5);
subplot(233),imshow(I2);

[y1,x1,z1]=size(IY);
Blue_x=zeros(1,x1);
for j = 1 : x1
    for i = 1 : y1
        hij = IY(i, j, 1);
        sij = IY(i, j, 2);
        vij = IY(i, j, 3);
        if (hij>=p(1) && hij<=p(2)) &&( sij >=p(3)&& sij<=p(4))&&...
                (vij>=p(5)&&vij<=p(6))
            Blue_x(1, j) = Blue_x(1, j) + 1; 
%              bw1(i, j) = 1;
        end
    end
end
PY1,PY2

[~, MaxX] = max(Blue_x);
Th = p(7);
PX1 = MaxX;

while ((Blue_x(1,PX1)>Th) && (PX1>0))
    PX1 = PX1 - 1;
end
PX2 = MaxX;
while ((Blue_x(1,PX2)>Th) && (PX2<x1))
    PX2 = PX2 + 1;
end
Ita=Image(PY1:PY2,PX1:PX2,:);
subplot(234),imshow(Ita);
IX = I(PY1:PY2, PX1:PX2, :);
subplot(235),imshow(IX);
I3=im2bw(IX,0.5);
subplot(236),imshow(I3);

3.效果展示

(1)

车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第2张图片车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第3张图片


(2)

车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第4张图片车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第5张图片

(3)

车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第6张图片车牌定位matlab程序:通过hsv彩色分割方式定位车牌_第7张图片


不过改进空间还是很大,对于蓝色车辆、深蓝色车辆以及图片中蓝色较多的图片,识别效果还是不行。


你可能感兴趣的:(车牌定位matlab程序:通过hsv彩色分割方式定位车牌)