登录 注册
购物车0
TOP
Imgs 行业资讯

0

FPGA中高斯滤波算法的实现

2021-11-19 18:17:54
1.高斯滤波算法的实现
上面提到的平均/中值滤波对于滤波窗口中的每个像素具有相同的权重。但是,噪声在图像中往往表现为具有异常视觉效果的孤立像素或块,因此一定不能均匀分布。
首先介绍一个概念:正态分布:
正态分布是最重要的概率分布。1733年,德国数学家、天文学家莫伊弗提出了相关概念。然而,它也被称为高斯分布,因为德国数学家高斯率先将其应用于天文学研究。在正态分布中,认为中间状态是正常的,过高过低都属于少数,所以正态分布是相当普遍的,典型的有我们的身高、寿命、血压、成绩、测量误差等。都遵循正态分布。
以中国家庭动态追踪、抽样自报身体高数数据为例。以下是2010年男女身高分布直方图,近似正态分布。
题外话,回到正题,我们这里的主题是处理高斯噪声,它不同于椒盐噪声,而高斯噪声是画面上每一点高斯分布程度不同的噪声,它远离当前像素。在这里,我们继续解释高斯算法和MatlabFPGA在上述成熟的3*3滑动窗口方案上的实现。
2.高斯滤波算法理论
根据概率论猜想和中心极限定理(MBA智库百科、中国经济与管理全球专业百科),大部分噪声也要符合正态分布/高斯白噪声,所以有高斯滤波和按正态分布计算权重的滤波方法。
我们已经介绍了高斯分布(正态分布),这里直接介绍高斯分布函数,它是一维和二维的高斯分布函数,其中是高斯分布的强度,越大,数据越分散,否则越向中心集中:
首先,我们利用Matlab的高斯函数对结果进行了验证。=1的高斯滤波可以看出有一定的模糊效果。图3为5*5的窗口,=3高斯滤波,模糊的强度略大。图4显示了11*11的窗口、=3的高斯滤波以及与5*5的窗口相比=3的滤波。可以看出,扩大窗口后,滤波后的模糊程度很大,滤波窗口对滤波强度的影响较大,其次是的大小。
在左边,为了生成5*5模板的Matlab代码,我们首先根据高斯分布的公式生成5*5模板。其中11行是原二维高斯分布的函数,12行我去掉了常熟。毕竟公式归一化后可以简化,得到的高斯权重分布是一堆浮点数据,如图G1。
然而,二维高斯分布不仅在5*5的范围内,而且权重仍然分布在5*5以上。但是我们目前采用的是5*5高斯分布,我们认为数据主要分布在5*5以内,所以需要进一步归一化,使所有权之和等于1,如第17-18行所示,得到右边第二个表数据的模板。
如果在Matlab中实现,此时得到的模板已经可以用于高斯滤波卷积计算。然而,我们的目标是FPGA实现,因此需要进一步的本地化。这里以*1024为例生成最终的5*5模板,如上表三所示。最后,当然我们需要缩放回/1024,这样结果才能最终恢复到0-255。
5*5高斯模板卷积的Matlab源代码,其中IMG1为原始图像,IMG2为利用Matlab自带的高斯滤波函数在=3,5*5窗口内的滤波结果,IMG3为基于生成的定点模板卷积的结果,由我们手工编译。
其中,在处理5*5卷积时,为了设计简单,边缘像素采用复制原值的操作。另外,由于Matlab是浮点运算,卷积后数据类型再次转换为uint8定点。最后,生成的结果如下图所示,其中图2类似于图3,处理结果差不多

高都电子,为客户创造价值!

双面板免费加费,四层板加急打样,厚铜电路板打样

Xcm