FPGA线性滤波实现

简介

FPGA数字图像处理系列终于迎来了第三更了,马上要开始写毕业论文了,这次的教程写的比较潦草,不过代码和上位机都是完整的,重点参考了《基于FPGA的数字图像处理原理及应用》的第七章,关于直方图均衡化的原理推到和设计思想可以重点看书,或者自己百度一下。直方图均衡化还是有点难的,需要有一定的基础。

本教程与上期《系统仿真》中的规定有点区别,再次声明一下,为了简化开发难度,这里规定图像格式为6404808bit @60的灰度图,也就是图像分辨率为640*480,一个像素占8个bit,帧率为60.

均值滤波实现

均值滤波的数学表达式如下:
在这里插入图片描述
由上述公式列出求图像均值的步骤:

1)获取当前窗口所有像素。 (窗口:-r<=i<=r,-r<=j<=r的像素区域)

2)计算当前窗口所有像素之和。

3)将第(2)步结果除以当前窗口数据总数。

4)滑动窗口到下一个窗口,直到遍历完整幅图像。

实现效果图如下:
在这里插入图片描述

Sobel边缘检测实现

书上给的教程太过繁琐,本节教程是根据书上简化而来的,设计思路还是差不多的。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下所示:
在这里插入图片描述
图像的每一个像素的横向和纵向灰度值通过公式
在这里插入图片描述
由于平方和开方计算用FPGA实现比较困难,效率低,故简化为:
在这里插入图片描述
为了尽量利用FPGA的并行特性,同时进行X方向和Y方向的计算。同时,我们注意到,由于模板的数值为1和2或者-1,-2,将负数和正数相加后再整体做减法。模板元素为2时直接进行移位操作则简单地多。
同时得到窗口内9个像素是比较简单的一件事情。两个行缓存加上当前行即可同时得到3行图像数据,将3行数据分别打两拍即可得到一个窗口9个像素数据。则缓存电路设计如下所示:
在这里插入图片描述
得到9个像素之后还需将分别对X和Y方向的模板进行计算。计算结果如下所示:
在这里插入图片描述
Sobel现实效果图如下:
在这里插入图片描述

福利

为了能及时回复大家,现在获取源码方式如下:
微信扫描下面的二维码关注【春哥笔记】公众号,回复“线性滤波”即可Get源码的获取方式:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章