1. 概述
本设计采用FPGA技术,实现CMOS视频图像的均值滤波,并通过以太网传输(UDP方式)给PC实时显示。
2. 硬件系统框图
CMOS采用MT9V011(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片,硬件框图如下:
硬件平台采用ETree的FPGA开发板,如下图所示:
3. 算法原理
均值滤波算法采用3×3矩阵累加求平均,其中中间元素(P22)为原始处理像素,如下图所示,这里不考虑边界的特殊情况。
计算公式如下:
4. 算法实现
均值算法需要缓存2行或3行数据,然后利用寄存器打拍延时实现3×3的矩阵窗。数据缓存可采用dpram实现,不过Quartus II为我们提供了shift_ram组件,方便我们实现均值算法,时序如下图所示,具体的shift_ram工作原理可参考官方手册,这里不做详细介绍。
shift_ram参数设置如下图所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
wire [7:0] shiftout;
wire [7:0] taps0x;
wire [7:0] taps1x;
wire [7:0] taps2x;
shift_ram shift_ram_inst
(
.
clock
(cmos_pclk) ,
// input clock_sig
.clken(cmos_href),
.shiftin(cmos_data) ,
// input [7:0] shiftin_sig
.shiftout(shiftout) ,
// output [7:0] shiftout_sig
.taps0x(taps0x) ,
// output [7:0] taps0x_sig
.taps1x(taps1x) ,
// output [7:0] taps1x_sig
.taps2x(taps2x)
);
reg [7:0] cmos_data_r0;
reg [7:0] cmos_data_r1;
reg [11:0] cmos_data_result;
reg [7:0] taps0x_r0;
reg [7:0] taps0x_r1;
reg [7:0] taps1x_r0;
reg [7:0] taps1x_r1;
reg [7:0] taps2x_r0;
reg [7:0] taps2x_r1;
always @(posedge cmos_pclk)
if
(cmos_vsync)
begin
taps0x_r0 <= 0;
taps0x_r1 <= 0;
end
else
begin
taps0x_r0 <= taps0x;
taps0x_r1 <= taps0x_r0;
end
always @(posedge cmos_pclk)
if
(cmos_vsync)
begin
taps1x_r0 <= 0;
taps1x_r1 <= 0;
end
else
begin
taps1x_r0 <= taps1x;
taps1x_r1 <= taps1x_r0;
end
always @(posedge cmos_pclk)
if
(cmos_vsync)
begin
taps2x_r0 <= 0;
taps2x_r1 <= 0;
end
else
begin
taps2x_r0 <= taps2x;
taps2x_r1 <= taps2x_r0;
end
always @(posedge cmos_pclk)
if
(cmos_vsync)
cmos_data_result <= 0;
else
cmos_data_result <= (((taps0x + taps0x_r0) + taps0x_r1) +
((taps1x + taps1x_r0) + taps1x_r1)) +
((taps2x + taps2x_r0) + taps2x_r1);
|
上面代码中的‘cmos_data_result’只是累加的结果,还需要求均值。在FPGA中实现移位操作实现除法比较好实现,所以需要将除数做一下处理,具体处理方法:将累加的和乘以1024再除以1024,这样可以先人为求的1024/9的值,然后和累加和相乘,最后除以1024得到最终的值。1024/9=113.777,取113=64+32+16+1,具体计算公式如下:
均值=累加和×(64+32+16+1)÷1024
5. 最终效果
下图为原始图片效果。
下图为经过均值滤波后的图像效果,图像得到了平滑。
本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1976966