0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解从均值滤波到非局部均值滤波算法的原理及实现方式

FPGA设计论坛 来源:未知 2023-12-19 16:30 次阅读

图像降噪处理主要分为2D(空域)与3D降噪(时域/多帧),而2D降噪由于相关的实现算法丰富,效果各异,初学入门有着丰富的研究价值。理解2D降噪算法的流程,也对其他的增强算法有很大的帮助,因此本文将再啰嗦一次,详解从均值滤波到非局部均值滤波算法的原理及实现方式。

细数主要的2D降噪算法,如下图所示,从最基本的均值滤波到相对最好的BM3D降噪,本文将尽量用最同属的语言,详解这些算法的实现流程,并给予一定的FPGA加速实现的实现思路。其中BM3D由于篇幅较大,后面再补上。

wKgZomWBVb6Af2ICAAHV9gqy8II496.png

1.1.均值/中值滤波

首先所有滤波算法都是通过当前像素周边的像素,以一定的权重来计算滤波的像素值。因此主要涉及两个变量:窗口的大小,以及窗口内像素的权重。以最简单的均值滤波/中值滤波,3*3窗口为例,计算及优缺点如下:

wKgZomWBVb6ARqweAADKCKhbQ6E689.png

对于FPGA的硬件加速实现,过程还好,唯一头疼的就是涉及了除法,由于除法计算时钟周期长且耗费LE,我们需要升级改造下,因此优化公式如下(sum为9个像素累加的结果),将除法巧妙变成乘法:

wKgZomWBVb6ANWthAAAJ1l8Fzgs858.png

因此实现的流程如下

1)sum1=P0+P1+P2; sum1=P3+P4+P5; sum3=P6+P7+P8,即先求每行3像素累加

2)sum=sum1+sum2+sum3,即求三行9像素累加

3)sum*144,取结果的[17:10],即为均值滤波的结果。

4)以上过程流水线,最终每个clk输出一个计算结果。

备注:这里1024/9取了floor,这样保证不会溢出。

对于中值滤波而言,本身计算并不复杂,就看怎么取巧最快得到中间数,网上流传了一个三步法,即如下图所示,

wKgZomWBVb6ASzWYAADnl6GvmuU841.png

那么FPGA硬件加速实现,流程如下:

1)计算每行3个像素的最大中、中值、最小值

2)计算三个最大值的最小值,中间值的中间值,以及最小值的最大值。

3)对上述三个值求得中间值。

4)以上过程流水线,最终每个clk输出一个计算结果。

中值滤波计算相对均值滤波稍微复杂一点,但是好处是只用了比较器,没用乘法器,比均值滤波更省资源。

对于椒盐图像的均值滤波、中值滤波计算效果对比,如下所示,分别为椒盐图像、均值滤波、中值滤波结果。

wKgZomW-5jaAfiQNAAKKaeHbqys604.png

1.2.高斯滤波

1)

前面讲的均值/中值滤波,对于窗口内每个像素的权重都是一样的,噪声在图像当中常表现为一引起较强视觉效果的孤立像素点或像素块,那么他必然不是平均分布。

正态分布是最重要的一种概率分布,相关概念上是由德国的数学家和天文学家Moivre与1733年首次提出的,但由于德国数学家Gauss率先将其用于天文学研究,因此也叫做高斯分布。在正态分布里,人为中间状态是常态,过高和过低都属于少数,因此正态分布具有相当的普遍性,典型的比如升高、寿命、血压、成绩、测量误差等都遵从正太分布。

wKgZomWBVb-Af3cYAASHJsu57q0062.png

因此以概率论及中心极限定理(https://wiki.mbalib.com/wiki/中心极限定律)猜想,大部分噪声应该也符合正态分布/高斯分布(高斯白噪声),所以也就有了高斯滤波,及根据正态分布进行权重计算的滤波方法。上图曲线是高斯分布的一维函数,而图像应该是二维的,图解如下二维高斯分布:

wKgZomWBVb-AZpurAAHfG42NU28767.png

既然已经得到二维高斯分布函数,那么根据窗口到目标像素的距离,就可以是计算出周边像素的权重——高斯模板。均值滤波每个像素的权重都是1/9,再通过卷积后计算得到结构,而高斯滤波就是根据正态分布,去计算当前像素相对距离的权重值,假定σ=1.5(σ就是滤波的强度),3*3的高斯模板计算计算过程如下:

wKgZomWBVb-AG_O7AAMsXn0kokw921.png

但是这还不够,毕竟我们的目标是直接上FPGA,那必须顶定点化,因此假设扩大1024倍,则3*3的高斯模板定点化如下:

wKgZomWBVb-ADNd5AAA449zqkMo618.png

对于33或者55,选定的σ,高斯模板那么,现在计算就简单了,卷积后再缩小1024倍即可,采用FPGA计算,过程如下:

1)计算9个像素的对应卷积参数的乘法

2)9累加9个乘法结果

3)右移10bit或取结果的[17:10],即为高斯滤波的结果。

4)以上过程流水线,最终每个clk输出一个计算结果。

备注:当然实现还可优化,比如只用3个乘法器,算一行累加一行,也就4个时钟算完。

最后,暂且盗用别人针对不同σ的3*3高斯滤波效果图,如下(σ越大越模糊):

wKgaomW-5myAVna6AADoNA98tqA290.png

wKgZomWBVcCABUGrAABUdafP6GM276.jpg

精彩推荐 至芯科技FPGA就业培训班——助你步入成功之路、12月30号西安中心开课、欢迎试听! AXI总线协议总结 基于FPGA及模拟电路的模拟信号波形的实现扫码加微信邀请您加入FPGA学习交流群

wKgZomWBVcCAXgqKAABiq3a-ogY313.jpgwKgZomWBVcCAT7VzAAACXWrmhKE589.png

欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!

点个在看你最好看


原文标题:详解从均值滤波到非局部均值滤波算法的原理及实现方式

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21331

    浏览量

    593302

原文标题:详解从均值滤波到非局部均值滤波算法的原理及实现方式

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    降压斩波电路输出电流平均值怎么算

    降压斩波电路是一种常见的电源电路,它通过将交流电压转换为所需的较低直流电压。在降压斩波电路中,输出电流平均值是非常重要的指标,它决定了电路的稳定性和效率。为了详细地解释如何计算输出电流平均值,下面
    的头像 发表于 03-11 14:44 411次阅读

    滤波电容不同补偿方式优缺点对比

    滤波电容不同补偿方式优缺点对比  滤波电容是电子电路中常用的元件,用于对信号进行滤波处理。不同的补偿方式可以帮助提高
    的头像 发表于 01-04 16:00 309次阅读

    移动平均滤波的原理和C代码

    移动平均滤波是一种简单有效的平滑信号的方法,它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种:简单移动平均(SMA)和指数加权移动平均(EWMA)。简单移动平均
    的头像 发表于 12-04 08:00 525次阅读
    移动平均<b class='flag-5'>滤波</b>的原理和C代码

    大佬总结!这篇把单片机数字滤波算法讲绝了

    单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字
    发表于 11-30 18:39

    灰度图像均值滤波算法的HDL实现介绍

    首先要做的是最简单的均值滤波算法均值滤波是典型的线性滤波
    的头像 发表于 10-16 09:23 571次阅读
    灰度图像<b class='flag-5'>均值</b><b class='flag-5'>滤波</b><b class='flag-5'>算法</b>的HDL<b class='flag-5'>实现</b>介绍

    卡尔曼滤波算法对比其他的滤波算法有什么优点?

    卡尔曼滤波算法对比其他的滤波算法有什么优点
    发表于 10-11 06:42

    用于变压器局部放电在线监测的改进NLMS自适应滤波算法

    电子发烧友网站提供《用于变压器局部放电在线监测的改进NLMS自适应滤波算法.pdf》资料免费下载
    发表于 10-10 11:44 0次下载
    用于变压器<b class='flag-5'>局部</b>放电在线监测的改进NLMS自适应<b class='flag-5'>滤波</b><b class='flag-5'>算法</b>

    卡尔曼滤波算法是怎么实现对数据的预测处理的?

    卡尔曼滤波算法是怎么实现对数据的预测处理的
    发表于 10-10 08:28

    怎么评估一个滤波算法滤波效果?

    怎么评估一个滤波算法滤波效果
    发表于 10-10 07:31

    泰克示波器测量电压如何进行滤波

    : 1. 低通滤波器(Low-pass Filter):低通滤波器允许低频信号通过,而抑制高频信号。这种滤波器常用于去除高频噪声和干扰。在示波器中,可以通过设置低通滤波器的截止频率来控
    的头像 发表于 10-08 17:48 1137次阅读
    泰克示波器测量电压如何进行<b class='flag-5'>滤波</b>?

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态解算

    MPU6050使用互补滤波与卡尔曼滤波算法进行姿态解算
    发表于 08-07 15:46 2次下载

    11种滤波算法程序分享

    11种滤波算法程序分享
    的头像 发表于 07-24 15:57 1017次阅读

    2D中值滤波算法的设计实现

    该项目包含使用高级综合 (HLS) 的 2D 中值滤波算法实现。该项目的目标是在不到 3 ms的时间内对测试图像进行去噪,同时消耗不到 25% 的可用 PL 资源。
    的头像 发表于 07-12 15:19 758次阅读
    2D中值<b class='flag-5'>滤波</b><b class='flag-5'>算法</b>的设计<b class='flag-5'>实现</b>

    详解均值滤波到非局部均值滤波算法的原理及实现方式

    图像降噪处理主要分为2D(空域)与3D降噪(时域/多帧),而2D降噪由于相关的实现算法丰富,效果各异,初学入门有着丰富的研究价值。
    发表于 07-03 15:31 1521次阅读
    <b class='flag-5'>详解</b>从<b class='flag-5'>均值</b><b class='flag-5'>滤波</b>到非<b class='flag-5'>局部</b><b class='flag-5'>均值</b><b class='flag-5'>滤波</b><b class='flag-5'>算法</b>的原理及<b class='flag-5'>实现</b><b class='flag-5'>方式</b>

    ADC求平均值哪种方式比较合适?

    方法一: 取值A1、A2....An 平均值Av1 = (A1+A2+....An)/n 取第二组A1、A2....An 平均值Av2 = (A1+A2+....An)/n 方法二: 取值A1
    发表于 06-26 08:43