1. 概述
本设计采用FPGA技术,实现CMOS视频图像的Tophat形态学滤波,并通过以太网传输(UDP方式)给PC实时显示。
2. 硬件系统框图
CMOS采用MT9V011(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片,硬件框图如下:
硬件平台采用ETree的FPGA开发板,如下图所示:
3. 算法原理
Tophat变换是原图像与开运算结果之差,突显出图像轮廓周围更亮的区域。
开运算(Opening)是先腐蚀后膨胀的过程。开运算一般是对象的轮廓变得更加光滑,断开狭窄的间断和消除细小的凸起物。因此,开运算可用于消除小物体。
膨胀是形态学滤波的基本运算。膨胀(dilate)就是求局部最大值,这样会使图像中的高亮区域逐渐增大,效果图将会拥有比原图更大的高亮区域,整体亮度会增加,同时可以连通相邻的高亮区域。
腐蚀(erode)是形态学滤波的基本运算,与膨胀是一对对立操作,求局部最小值。通过腐蚀操作后,高亮区域被腐蚀掉,会比原图更暗些。腐蚀操作会连通相邻比较暗的区域。
具体的计算公式如下:
4. 算法实现
在“开运算”输出端用原图像减去“开运算”的结果,代码如下。
//file name: filter_tophat.v//author: shugen.yin//date: 2017.10.27//function: 开运算//log:module filter_tophat( input cmos_pclk, input cmos_href, input cmos_vsync, input [7:0] cmos_data, output cmos_href_o, output cmos_vsync_o, output [7:0] cmos_data_o);wire [7:0] cmos_data_open;wire [7:0] cmos_data_old;filter_open filter_open_inst( .cmos_pclk(cmos_pclk) , // input cmos_pclk_sig .cmos_href(cmos_href) , // input cmos_href_sig .cmos_vsync(cmos_vsync) , // input cmos_vsync_sig .cmos_data_old(cmos_data_old), .cmos_data(cmos_data) , // input [7:0] cmos_data_sig .cmos_href_o(cmos_href_o) , // output cmos_href_o_sig .cmos_vsync_o(cmos_vsync_o) , // output cmos_vsync_o_sig .cmos_data_o(cmos_data_open) // output [7:0] cmos_data_o_sig);assign cmos_data_o = (cmos_data_old>=cmos_data_open)?(cmos_data_old-cmos_data_open):8'h00;endmodule
与Tophat对应的还有一个Blackhat形态滤波器,用“闭运算”减去原来图像,突显出原图像轮廓周围更暗的区域。“Blackhat形态学滤波器”留给有兴趣的读者完成,算法实现方法和本篇类似。
5. 最终效果
下图为原始图片效果。
Tophat滤波后的效果图如下所示,图像轮廓周围更亮的区域被突显出来。