色彩空间的转换简单应用(理想情况车牌数字的提取)matlab仿真和FPGA实现

本工程对图片环境的要求比较高,不能有同色的杂色干扰(所以说是理想状态下的)

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速度太慢了。。。)、

这里用到的仿真平台后来争取老师的同意再给出来。

处理的图片效果,出现了一点椒盐噪声,可以后期用滤波处理,用算法把边沿处理下,做到车牌的定位识别。

猜你喜欢

转载自blog.csdn.net/weixin_41445387/article/details/89410559