FPGA设计——图像处理(均值滤波)

简介:

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矩阵累加求平均,其中中间元素(P22)为原始处理像素,如下图所示,这里不考虑边界的特殊情况。

5f34ae63da51075211084b2c3fbeaeda.png

计算公式如下:

a31dac209549fbecd5138b1f0a4a2b4b.jpg

4. 算法实现

均值算法需要缓存2行或3行数据,然后利用寄存器打拍延时实现3×3的矩阵窗。数据缓存可采用dpram实现,不过Quartus II为我们提供了shift_ram组件,方便我们实现均值算法,时序如下图所示,具体的shift_ram工作原理可参考官方手册,这里不做详细介绍。

d0b3ddbddae4034948dc570662785035.png-wh_

shift_ram参数设置如下图所示。

fa090a0f3e9f269187b3f34b1b2de037.png-wh_

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. 最终效果

下图为原始图片效果。

2e69c519bbe7f991707ef172ebaab75d.png-wh_

下图为经过均值滤波后的图像效果,图像得到了平滑。

4c21cac77edf78f179de87ca9b12e76a.png-wh_



本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1976966

相关文章
|
机器学习/深度学习 算法 C语言
FPGA图像处理之边缘检测算法的实现
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
FPGA图像处理之边缘检测算法的实现
|
算法 计算机视觉 异构计算
FPGA图像处理之rgbtogray算法的实现
Ycbcrr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。
|
算法 计算机视觉 异构计算
FPGA图像处理(高斯滤波)仿真篇
高斯滤波是一种低通平滑滤波,常用于模糊处理和减少噪声信号,其中模糊处理常用于预处理,即在提取目标之前去除图像中的一些细节等,这有利于高通处理。对于二维的数字图像信号,一般通过线性滤波器和非线性滤波器的模糊处理来减少强噪声信号。平滑滤波器就是用滤波掩模确定的邻域内的像素与加权值相卷积后得到的灰度均值来代替每个像素的值,这就很容易使用硬件实现。 GAUSS 滤波算法克服了边界效应,因而滤波后的图像较好。
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
199 0
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
|
算法 异构计算
FPGA-均值滤波算法的实现
FPGA-均值滤波算法的实现
156 0
|
计算机视觉 数据格式 异构计算
FPGA-图像处理-色彩空间转换(RGB转YUV和YCBCR)
FPGA-图像处理-色彩空间转换(RGB转YUV和YCBCR)
311 0
|
算法 计算机视觉 异构计算
FPGA与MATLAB-图像处理-学习列表(图像处理专题更新目录,补充中)
FPGA与MATLAB-图像处理-学习列表(图像处理专题更新目录,补充中)
149 0

热门文章

最新文章