原创 【博客大赛】FPGA实现实时视频加权均值滤波

2015-11-25 11:24 4148 23 30 分类: FPGA/CPLD

本文设计的是一种加权均值滤波算法,窗口大小是5(列)*1(行),适用于灰度图像实时视频处理,可以有效淡化视频竖条纹。同时为了保持图像的细节,采用如下图所示的加权窗口。

1.jpg

同时考虑到一场视频最左边和最右边的2列数据的特殊性,其窗口对应为:

最左边两列

2.jpg

最右边两列

3.jpg

代码接口定义如下表所示。

接口名称

输入输出

接口含义

I_clk_7m

I

视频采样时钟,实际为6.75MHz

I_reset_n

I

系统复位信号,低复位

I_smooth_en

I

均值滤波使能信号,1:使能,0:不使能

I_data_vsync

I

输入视频场同步信号

I_data_valid

I

输入视频数据有效信号,1:视频信号,0:消隐信号

I_data_in[11:0]

I

输入视频数据信号

O_data_vsync

O

输出视频场同步信号

O_data_valid

O

输出视频数据有效信号,1:视频信号,0:消隐信号

O_data_out[11:0]

O

输出视频数据信号

简单介绍下设计原理:由于采用的是5*1的窗口,不需要大规模数据缓存,窗口内相邻的视频数据相差一个时钟周期,使用触发器将原始视频数据缓存5级,分别对应5个寄存器信号。在同一时钟周期内的5个寄存器信号即为窗口内的5个数据,在同一时钟周期内可进行并行处理。

4.jpg接下来,需要对窗口内的视频数据以16位基数进行加权处理,得到数值除以16后用来替换原有像素灰度值。

R_sum16 = R_data_5*2 + R_data_4*3 + R_data_3*6 + R_data_2*3 + R_data_1 *2

最左边两行:

R_sum16 = R_data_5*4 +R_data_4*6 + R_data_3*6

最右边两行:

R_sum16 = R_data_3*6 + R_data_2*6 + R_data_1*4

源代码不算很复杂,适合初学FPGA的同学作为学习参考,如有需要,请留下您的邮箱地址,每当回复数超过10 的整数倍时,我会统一发送!

 

如果文章或代码对您有帮助,麻烦您为我投上一票,您的支持是我不断进步和分享的动力,谢谢!

PARTNER CONTENT

文章评论29条评论)

登录后参与讨论

用户3878319 2018-2-8 11:29

wivden@163.com谢谢楼主

用户1615289 2016-1-18 17:04

这个滤波挺简单的,到底图像滤波结果效果怎样的,楼主说是对图像中竖条纹有较好的滤波效果,现在做的项目中图像的竖条纹是比较明显的,有幸看到楼主博文,很感谢提供了一个解决方案,我邮箱judement@126.com,楼主给个源码,我做个对比测试,谢谢

用户377235 2016-1-18 13:02

非常好,812534644@qq,com

用户606370 2016-1-18 09:22

非常感谢分享!学习学习!!!369897726@qq.com

用户1854463 2015-11-26 08:57

求赐教!zhangshengwei2013@163.com.同时我想问一下,楼主的图像数据是如何存储的?选用的窗口是一个列向量吧,那你的图像是按列存储的吗?刚接触FPGA处理图像,问的问题要是不恰当,还望海涵。。

用户1833262 2015-11-24 14:11

谢谢分享! 731429842@qq.com

用户1573828 2015-11-13 14:54

非常感谢分享!学习学习,wmbu368@163.com

用户1773537 2015-11-13 11:47

刚接触FPGA,前端是时间写了一个类似的代码,但是没有你这个写的好,学习学习, 954695847@qq.com

用户377235 2015-11-9 23:17

谢谢分享!136868000@qq.com

用户1769465 2015-10-1 23:12

谢谢分享啊!我的邮箱 806518565@qq.com
相关推荐阅读
用户1845900 2016-05-20 13:28
【来点不一样的】Microsemi(原Actel)最新FPGA和开发板介绍
最近接触到了一款Microsemi(原Actel)的代理商艾懋电子开发的SmartFusion2 Starter Kit开发板,逐渐了解了Microsemi(原Actel)FPGA的一些情况。 ...
用户1845900 2015-09-07 21:33
【博客大赛】基于FPGA的串行flash的读写控制(一)----串行flash的管脚、寄存器和操作命令
1、串行flash简介     串行flash是用串行接口进行连续数据存取的小尺寸,低功耗的flash memory。串行flash比并行flash用更少的线从系统中传送数据。对于引脚数目少的...
用户1845900 2015-09-07 21:30
【博客大赛】基于FPGA的串行flash的读写控制(二)-串行flash操作时序
1、 读操作(25Mhz)     该操作支持最高时钟速率为25Mhz的读操作。执行该操作时,芯片内部地址指针自动递增,连续输出从起始地址单元开始的数据,直到遇到CE#信号的上升沿。如果到达最...
用户1845900 2015-09-07 21:28
【博客大赛】基于FPGA的串行flash的读写控制(三)-串行flash操作的状态机实现
    上两篇都是对串行flash的介绍,我们的主角FPGA还没有登场。大家如果看了前两篇关于串行flash的介绍,这么多的命令,这么多的操作,需要有一根主线把他们串起来,这根主线应该就是FPGA...
用户1845900 2015-09-01 15:28
Vivado IP core管理-FPGA器件型号变更时的 IP core管理
在FPGA工程开发和维护的过程中,有可能需要在原有的代码上进行增量开发,但是发现原来选用的FPGA器件资源不够,需要更换器件。对于你自己一行行写的代码都好办,但是工程里调用的IP core与FPG...
EE直播间
更多
我要评论
29
23
关闭 站长推荐上一条 /3 下一条