本工程对图片环境的要求比较高,不能有同色的杂色干扰(所以说是理想状态下的)
1.原始车牌数据色彩空间转换RGB2YCbCr
PS:这里解释下为啥用cbcr色彩空间,RGB三色是颜色的三个色域,而YCBCR色彩空间只是在CBCR上对颜色有影响,检测的是cbcr对红和蓝色的颜色的偏差,运算量少了一个通道,特别是在高像素的运算中这样的处理必然是对速度的提升有很大的帮助。
2.节选图片进行颜色阈值提取
3.在MATLAB仿真,生成图片验证
4.找到合适的颜色阈值后,颜色在阈值范围内,数据为1,其他为0
(这里用二值图片进行显示)进行FPGA的算法实现
颜色阈值提取:
clear all
close all
clc
img =imread('chepai_test1.jpg');
ycbcr=rgb2ycbcr(img);
y=ycbcr(:,:,1);
cb=ycbcr(:,:,2);
cr=ycbcr(:,:,3);
min_cb=min(cb(:));
min_cr=min(cr(:));
max_cb=max(cb(:));
max_cr=max(cr(:));
disp(['min_cb=',num2str(min_cb)]);
disp(['min_cr=',num2str(min_cr)]);
disp(['max_cb=',num2str(max_cb)]);
disp(['max_cr=',num2str(max_cr)]);
FPGA算法仿真:
clear all
close all
clc
img_rgb=imread('chepai.jpg');
img_ycbcr=rgb2ycbcr(img_rgb);
[a,b,c]=size(img_rgb);
y = img_ycbcr(:,:,1);
cb = img_ycbcr(:,:,2);
cr = img_ycbcr(:,:,3);
img =imread('chepai_test1.jpg');
ycbcr=rgb2ycbcr(img);
y1=ycbcr(:,:,1);
cb1=ycbcr(:,:,2);
cr1=ycbcr(:,:,3);
min_cb=min(cb1(:));
min_cr=min(cr1(:));
max_cb=max(cb1(:));
max_cr=max(cr1(:));
for i=1:a
for j=1:b
if(cb(i,j)>min_cb && cb(i,j)<max_cb && cr(i,j)>min_cr && cr(i,j)<max_cr)
p(i,j) =1;
else
p(i,j) =0;
end
end
end
figure,
subplot(221),imshow(img_rgb);title('img_ycbcr');
subplot(222),imshow(img_ycbcr);title('img_ycbcr');
subplot(223),imshow(p);title('find');
disp(['min_cb=',num2str(min_cb)]);
disp(['min_cr=',num2str(min_cr)]);
disp(['max_cb=',num2str(max_cb)]);
disp(['max_cr=',num2str(max_cr)]);
disp('=====finish=====');
FPGA算法实现:
/*min_cb=165
min_cr=104
max_cb=183
max_cr=114*/
module img_car(
input clk,
input [7 : 0] i_cb_8b,
input [7 : 0] i_cr_8b,
output reg o_bit_1b,
input i_h_sync,
input i_v_sync,
input i_data_en,
output reg o_h_sync,
output reg o_v_sync,
output reg o_data_en
);
parameter min_cb=165;
parameter min_cr=104;
parameter max_cb=183;
parameter max_cr=114;
reg h_sync_delay;
reg v_sync_delay;
reg data_en_delay;
always@(posedge clk)begin
if(i_cb_8b<max_cb&&i_cb_8b>min_cb&&i_cr_8b<max_cr&&i_cr_8b>min_cr)begin
o_bit_1b<=1'b1;
end
else begin
o_bit_1b<=1'b0;
end
end
always@(posedge clk)begin
o_h_sync<=i_h_sync;
o_v_sync<=i_v_sync;
o_data_en<=i_data_en;
end
endmodule
我这里用了modelsim搭建的图像仿真平台对图片进行数据输出,进行仿真测试(下板子的话,vivado速度太慢了。。。)、
这里用到的仿真平台后来争取老师的同意再给出来。
处理的图片效果,出现了一点椒盐噪声,可以后期用滤波处理,用算法把边沿处理下,做到车牌的定位识别。