对于高速视频图像中的物体轮廓提取中,图像的二值化,采用软件方式,速度无法满足需要,因此要采用FPGA方案,这样可以实现二值化速度和帧率一样,完全和视频同步。
一、算法原理: 边缘二值化的算法很多,象sobel法,roberts法,拉普拉斯法,导数法。为了简单化,采用导数法。
视频图像每帧扫描顺序如下图的黑色箭头所示
为了保证二值化和视频同步,必须要求视频每扫描一个点,就立刻进行二值化处理,也就是说每个像素点时钟进行一次。每个点(如上图红色点)进行锐化求导只能和已经出现过的相邻点(如图上图绿色4个点)进行,当前点的锐化导数值subv为:
subv=max(|v-v10|,|v-v00|,|v-v01|,|v-v02|) ,即和相邻点差值绝对值最大一个作为其锐化值
当subv大于规定的值时,标记该点是1,否则是0,实现图像二值化。
二、FPGA结构原理图如下:
说明:
1. CMOS摄像头连接camera接口上,该接口模块提取视频数据分成2路:1)保存到双口RAM1中,以便下一行点锐化用。2)和上一行里的4个数据进行比 较,得到锐化的二值化数据存放到双口ram2中。
2. CMOS摄像头同时连接S3c2440(三星arm,带camera接口)
3 。数据读取模块根据TFT时序发生器送来的控制,选取RAM2或者S3c2440送来的视频数据。通过TFT时序发生器将两个视频数据合并同时显示在屏幕上。这种结构主要目的是把原始图像和处理后的图像同时显示,以便对比调试。
三、verilog HDL 代码:
// 定义了一个双口ram存放可存放640*480个二值化像素点
RAM2PORT cambuf_ram(sharp_caminv,sharp_camreadAdr,ARM_DCLK,sharp_camadr,LVDS_PCLK,1,sharp_camoutv);
//////////////////////////////////////////////////////////////////////
always @( negedge LVDS_PCLK) //相机时钟下降沿,(这里的LVDS把相机所有信号传来)
begin
if (LVDS_VS==0) //相机的帧时钟=0
begin
cam_pcnt=0;//每行点计数器清
cam_hcnt=0; //每帧行计数器清
end
else
begin
if (LVDS_HS==0) //相机的行时钟
begin
cam_pcnt=0; //每行点有效点计数器清空
hs1=0;
end
else
begin
if (hs1==0)
begin
hs1=1;
cam_hcnt=cam_hcnt+1; //每帧行计数器加
end
cam_pcnt=cam_pcnt+1;
if ((cam_pcnt<1280)&&(cam_hcnt<480)) //注意每行有效点1280,不是640,因为YUV格式,每个点需要传送两个时钟
begin
camadr=cam_pcnt[15:1;
sharp_camadr=cam_hcnt*640+camadr; //二值化双口RAM地址
if(cam_pcnt%2==1)
begin
camLastV10<= camLastV11; //获取对应邻近点值V10
camLastV11<=LVDS_D; //当前点值v11是当前点
camLastV00<= camLastV01;//获取对应邻近点值V00
camLastV01<= camLastV02;////获取对应邻近点值V01
camLastV02<=camLastV11buf[camadr+1]; //获取对应邻近点值V02,注意V02是从上一行的RAM
camLastV11buf[camadr]<=LVDS_D;//保存当前点到上一行中
//以下是和相邻的4个点进行比较,最大差值作为锐化导数值
subv1=camLastV00>camLastV11?camLastV00-camLastV11:camLastV11-camLastV00;
subv2=camLastV10>camLastV11?camLastV10-camLastV11:camLastV11-camLastV10;
subv3=camLastV01>camLastV11?camLastV01-camLastV11:camLastV11-camLastV01;
subv4=camLastV02>camLastV11?camLastV02-camLastV11:camLastV11-camLastV02;
subv=subv1>subv2?subv1:subv2;
subv=subv>subv3?subv:subv3;
subv=subv>subv4?subv:subv4;
sharp_caminv= (subv>sharpv0)?1:0; //二值化,结果保存到双口ram中
end
end
end
end
end
四、运行结果照片和视频
该FPGA软件方案在北京数磊的IEC03工业智能相机运行结果如下:
1. 照片
2.演示视频(录像时用手机录的,不是很清楚,请大家包涵了)