Matlab中(蓝色)车牌定位算法(1)

这里写自定义目录标题

Matlab中(蓝色)车牌定位算法(1)

方案一:

clc
close all
clear all
%%
[uuu,vvv]=uigetfile({'*.jpg;*.tif;*.png;*.gif;*.BMP;*.JPEG','All Image Files'} ,'MultiSelect', 'on');%获取一张车牌照片
path=strcat(vvv,uuu);%拼接图片路径

img_rgb=imread(path); %读取图像
img_rgb=imresize(img_rgb,[240,320]); %设置图像大小
imshow(img_rgb);title('原图');   %显示图像
%%
%-------------------车牌定位--------------------%
%[img_lp]=LPLocation(img_rgb);         %调用车牌定位函数
%-------自己写的车牌定位函数---------%
img_gray = rgb2gray(img_rgb);
figure;
subplot(1,2,1);
imshow(img_gray);
title("灰度图像");
subplot(1,2,2)
imhist(img_gray);
title("灰度处理直方图");
%均值滤波
A=fspecial('average',3)
img_gray=filter2(A,img_gray)/255;
figure('name','均值滤波');
imshow(img_gray);
title("灰度图均值滤波")
% 边缘提取
img_edge =edge(img_gray,'sobel',0.1,'vertical');
figure('name','边缘提取');
imshow(img_edge);
title('sobel 算子边缘检测');
%% 检测RGB图像的背景蓝色区域
img_r=img_rgb(:,:,1);
img_g=img_rgb(:,:,2);
img_b=img_rgb(:,:,3);
index= img_r>200&img_g>200;
img_b(index)=0;
index2=img_r<20&img_g<20;
img_b(index2)=0;
%img_r=double(img_r);
%img_g=double(img_g);
[m,n]=size(img_b);  %0是黑色,255白色;
figure("name","RGB图像中蓝色区域")
imshow(img_b);
title("RGB图像中蓝色区域");

%二值化
img_bw=im2bw(img_b,0.4);
figure('name','蓝色区域二值化')
imshow(img_bw);
%%
[L,m]=bwlabel(img_bw,8);   %二值图联通域
% figure();
% imshow(L);
status = regionprops(L,'BoundingBox'); %测量标注矩阵L中每一个标注区域的一系列属性。
for i=1:m
    rect(i,:)=getfield(status(i),'BoundingBox');
end
ratio=rect(:,3)./rect(:,4);
for i=1:m
    if(ratio(i)<=2.5)
        img_bw(find(L==i))=0;
    end
end
figure('name','蓝色区域长宽比')
imshow(img_bw);
%% 腐蚀
se=[1 1];
img_bimr = imerode(img_bw, se);
figure('name','图像腐蚀');
imshow(img_bimr);
title('图像腐蚀后的图像');
%%
%膨胀                             %%%buyao
se = strel('rectangle',[1,5]);
img_bimr2 = imdilate(img_bimr, se);
figure('name','膨胀');
imshow(img_bimr2);
title('膨胀'); 
%% 选出竖向纹理复杂的蓝色区域
img_b_edge=img_bimr2&img_edge;     %%%%
img_b_edge=bwareaopen(img_b_edge,5);
figure('name','图像取交');
imshow(img_b_edge);
title('图像取交');
%%
se = strel('rectangle',[10,40]);
img_close = imclose(img_b_edge, se);
figure('name','平滑处理');
imshow(img_close);
title('平滑图像的轮廓');
%%
[L,m]=bwlabel(img_close,8);
status =regionprops(L,'Area');
area = cat(1,status.Area);  
index = find(area/max(area)>=0.7);        %求最大连通域的索引  
img_area = ismember(L,index);          %获取最大连通域图像  
%img_area = bwareaopen(img_b_imr, 1300);
figure('name', '移除小对象');
imshow(img_area);
title('从图像中移除小对象');
%长宽比提取
[L,m] = bwlabel(img_area,8);
status = regionprops(L,'BoundingBox');
for i=1:m
    rect(i,:)=getfield(status(i),'BoundingBox');
end
ratio=rect(:,3)./rect(:,4);
for i=1:m
    if(ratio(i)<=2.5)
        img_area(find(L==i))=0;
    end
end
figure('name', '移除比例');
imshow(img_area);
title('从图像中移除比例不对的区域');
 %% 选择车牌文字位置
 
 % 统计图片蓝色区域
 % Y方向
 
[y, x, z] = size(img_area);
img_area_double = double(img_area);    % 转成双精度浮点型

blue_Y = zeros(y, 1);
for i = 1:y
    for j = 1:x
        if(img_area_double(i, j) == 1) % 判断车牌位置区域
            blue_Y(i, 1) = blue_Y(i, 1) + 1;    % 像素点统计
        end
    end
end

% 找到Y坐标的最小值
img_Y1 = 1;
while (blue_Y(img_Y1) < 5) && (img_Y1 < y)
    img_Y1 = img_Y1 + 1;
end

% 找到Y坐标的最大值
img_Y2 = y;
while (blue_Y(img_Y2) < 5) && (img_Y2 > img_Y1)
    img_Y2 = img_Y2 - 1;
end

% x方向
blue_X = zeros(1, x);
for j = 1:x
    for i = 1:y
        if(img_area_double(i, j) == 1) % 判断车牌位置区域
            blue_X(1, j) = blue_X(1, j) + 1;
        end
    end
end

% 找到x坐标的最小值
img_X1 = 1;
while (blue_X(1, img_X1) < 5) && (img_X1 < x)
    img_X1 = img_X1 + 1;
end

% 找到x坐标的最小值
img_X2 = x;
while (blue_X(1, img_X2) < 5) && (img_X2 > img_X1)
    img_X2 = img_X2 - 1;
end

% 对图像进行裁剪
img_lp = img_rgb(img_Y1:img_Y2, img_X1:img_X2, :);
figure('name', '定位剪切图像');
imshow(img_lp);
title('定位剪切后的彩色车牌图像')
imwrite(img_lp, './车牌文字/车牌图像.jpg');
save img_lp img_lp

原图
灰度图与直方图
均值滤波
边缘提取
RGB通道中蓝色通道图像
蓝色通道二值化图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_763061740

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值