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
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630309

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADC的采样滤波算法利用卡尔曼滤波算法

    ; ADC_OLD_Value = ADC_Value; kalman_adc_old = kalman_adc; return kalman_adc;} 4 如何优化 用以上的代码实现滤波算法,通常要么滞后
    发表于 12-01 07:44

    激光焊接技术在焊接滤波器工艺中的应用

    及高可靠性的制造需求。激光焊接技术凭借其高能量密度、局部加热及接触加工的特点,为滤波器制造提供了新的解决方案。下面一起来看看激光焊接技术在焊接滤波器工艺中的应用。 激光焊接技术在焊接
    的头像 发表于 11-28 16:17 397次阅读
    激光焊接技术在焊接<b class='flag-5'>滤波</b>器工艺中的应用

    单片机的算法

    +=(Data_buff[i]/9); } return Result; } 算术平均滤波算法算法通过连续读取几个数据的方式来求取平均值
    发表于 11-28 08:19

    用于单片机几种C语言算法

    为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波滤波算法往往是
    发表于 11-27 06:00

    海绵密度测试仪的数据滤波算法:如何波动曲线中提取有效值

    传感器捕捉信号时混入的电子干扰。这些波动并非真实密度变化,需通过滤波算法提取有效值。 二、滤波算法核心原则 滤波旨在保留有用信号、剔除干扰,
    的头像 发表于 11-25 09:31 123次阅读
    海绵密度测试仪的数据<b class='flag-5'>滤波</b><b class='flag-5'>算法</b>:如何<b class='flag-5'>从</b>波动曲线中提取有效值

    详解电容滤波与电感滤波的区别

    在电子电路中,常常会用到滤波电路,尤其是电源芯片,有的是电容滤波,有的是电感滤波,电容和电感滤波的作用看起来差不多,那么它们之间有什么区别呢?在实际应用中又如何选择呢?
    的头像 发表于 10-23 14:10 4742次阅读
    <b class='flag-5'>详解</b>电容<b class='flag-5'>滤波</b>与电感<b class='flag-5'>滤波</b>的区别

    数据滤波算法的具体实现步骤是怎样的?

    (高频电磁、瞬时脉冲等),选择适配的滤波算法并落地。以下以电能质量监测中最常用的 IIR 低通滤波(抗高频干扰)、滑动平均滤波(抗瞬时脉冲)、卡尔曼
    的头像 发表于 10-10 16:45 429次阅读

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理
    的头像 发表于 07-10 11:28 4081次阅读
    基于Matlab与FPGA的双边<b class='flag-5'>滤波</b><b class='flag-5'>算法</b><b class='flag-5'>实现</b>

    蓝牙信标RSSI滤波算法

    蓝牙信标RSSI滤波算法‌主要用于处理RSSI值的不稳定性和噪声,以提高距离估计的准确性。RSSI(接收信号强度指示)是蓝牙信标中常用的参数,用于评估设备之间的距离或信号质量。然而,RSSI值的测量
    的头像 发表于 05-12 19:45 751次阅读
    蓝牙信标RSSI<b class='flag-5'>滤波</b><b class='flag-5'>算法</b>

    不同设备中电源滤波器接线方式的差异

    本文阐述了电源滤波器在不同设备中的重要性,并针对家用电器、工业设备、医疗设备以及通信设备分别介绍了其电源滤波器的接线方式差异。在不同设备中,电源滤波器的接线
    的头像 发表于 03-28 17:16 763次阅读
    不同设备中电源<b class='flag-5'>滤波</b>器接线<b class='flag-5'>方式</b>的差异

    AD8361均值响应功率检波器技术手册

    AD8361是一款均值响应功率检波器,适用于最高2.5 GHz的高频接收机和发射机信号链。 该器件使用非常简单, 在大部分应用中仅需2.7 V至5.5 V的单电源、电源去耦电容和输入耦合电容即可工作
    的头像 发表于 03-25 14:10 1351次阅读
    AD8361<b class='flag-5'>均值</b>响应功率检波器技术手册

    恩智浦讲解如何在低算力MCU平台上优雅的计算均值和方差

    本文主要探讨如何在有限的计算能力和内存条件下,优雅地实现高效的均值和方差计算。通过优化算法、减少计算复杂度、利用递推公式和定点数运算,文章提供了一系列使用技巧,帮忙开发者在保持精度的同时,显著降低计算开销。这些方法特别适用于物联
    的头像 发表于 03-06 08:56 1402次阅读
    恩智浦讲解如何在低算力MCU平台上优雅的计算<b class='flag-5'>均值</b>和方差

    FPGA上的图像处理算法集成与优化

    、Tophat形态学滤波、RAW8转RGB888、彩色图像均值滤波、Alpha背景叠加、直方图灰度拉伸算法以及自动白平衡算法。每种
    的头像 发表于 02-14 13:46 1153次阅读
    FPGA上的图像处理<b class='flag-5'>算法</b>集成与优化

    AMC1210对AMC1305进行数字抽取滤波,输出后的数据是否需要用处理器进行一次平均和移位处理?

    我使用的AMC1210对AMC1305进行抽取滤波。AMC1210配置为SIN3,256倍抽取。积分器为128倍积分。AMC1210配置为中断方式SPI接口32bit输出。输出后的数据,是否需要用
    发表于 01-14 08:21

    滤波器的一些常识

    滤波器简介:滤波器是一种用于信号处理的设备或系统,用于改变信号的频率特性,以实现信号的滤波、增强、去噪或降噪等功能。滤波器根据其工作
    的头像 发表于 12-18 17:05 1508次阅读
    <b class='flag-5'>滤波</b>器的一些常识