1. 概述

本设计采用FPGA技术,实现CMOS视频图像的高斯滤波,并通过以太网传输(UDP方式)给PC实时显示。

2. 硬件系统框图

CMOS采用MT9V011(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片,硬件框图如下:

d702d2894e43049aef6b1fad8de620c4.png-wh_

硬件平台采用ETree的FPGA开发板,如下图所示:

1bb46e10174f201f73309869907d657b.jpg-wh_


3. 算法原理

均值滤波开的3×3矩阵加权系数为全1,而高斯滤波开的3×3矩阵加权系数是中间大两边小,如下图所示。

d5bd740e3aa9cfc57694ee84f0eca640.png

计算公式如下:其中C为高斯加权系数。

33f85d4fee5fcfba781f148c8489ef47.jpg

4. 算法实现

高斯加权系数为定点小数,这里需要乘以1024实现整数运算,最后得到加权累加和后再除以1024即可,这样高斯加权系数如下图所示。

97d07c1eaa5a1938a5f0eb427ba3e58a.png

always @(posedge cmos_pclk)
    if(cmos_vsync)
        cmos_data_result <= 0;
    else 
        cmos_data_result <=                   (((taps0x*104+taps0x_r0*772)+taps0x_r1*104)+ 
 ((taps1x*772 + taps1x_r0*5707) +taps1x_r1*772))+
((taps2x*104 + taps2x_r0*772) + taps2x_r1*104);

上面代码中的‘cmos_data_result’只是累加的结果,还需要求均值。在FPGA中实现移位操作实现除法比较好实现,所以需要将除数做一下处理,具体处理方法:将累加的和乘以1024再除以1024,这样可以先人为求的1024/9的值,然后和累加和相乘,最后除以1024得到最终的值。1024/9=113.777,取113=64+32+16+1,具体计算公式如下:

结果=累加和×(64+32+16+1)÷1024


5. 最终效果

下图为原始图片效果。

32334e919640e5cdb1c7b4b2e50eb37b.png

高斯滤波后的效果图如下,实现了完成了图像细节与噪声滤除之间的平衡。

6bb17d1accd845b7ac43efd06987c98b.png