数字图像处理——2D降噪

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

        细数主要的2D降噪算法,如下图所示,从最基本的均值滤波到相对最好的BM3D降噪,本文将详解这些算法的实现流程,并给予一定的FPGA加速实现的实现思路。

一、均值/中值滤波

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

图片

均值滤波        

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

图片

因此实现的流程如下

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

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

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

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

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

中值滤波

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

图片

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

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

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

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

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

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

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

图片

二、高斯滤波

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

        正态分布是最重要的一种概率分布,也叫做高斯分布。在正态分布里,中间状态是常态,过高和过低都属于少数,因此正态分布具有相当的普遍性。

图片

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

图片

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

图片

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

图片

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

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

2)9累加9个乘法结果

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

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

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

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

图片

 三、双边滤波

        双边滤波是一种非线性滤波器,它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布。

        但是,双边滤波的权重不仅考虑了像素的欧式距离(如高斯滤波)——核域,还考虑了像素范围域中的辐射差异(比如像素与中心像素之间相似程度)——值域,计算时同时考虑这两个权重。 图片

        借用上网的一个图,如上为同时考虑核域与值域的像素滤波计算公式,其中space weight和range weight都符合高斯分布,但前者仅靠了距离,后者考虑了差值,因此两者结合就是同时考虑了space & range滤波。上述公式太抽象,重新梳理如下(其中1/Wp为归一化因子):

图片

        由于双边滤波同时考虑了空间距离和像素相似度的影响,因此尤其在具有边缘梯度的图像中,能够有不错的效果。即在平坦区域,空间距离占优势,在边缘区域,像素间相似度占优势,可以直观的用下面这个图来表示:

图片

图片

图片

根据上图,继续进一步细化步骤,详解在FPGA中的实现方式,如下:

1)提前计算好高斯模板,和用于值域权重计算的256地址数据(均已扩大1024倍定点化)

2)根据3*3原图和中心点差值判断,得到值域模板

3)将提前准备的高斯模板和上一步的值域模板相乘,得到双边权重模板

4)将得到的3*3个新的权重累加,

5)根据累加结果,归一化(归1024化)完成最终权重模板的计算

6)最新模板和原始3*3原图卷积,得到新的目标像素。

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

OK,搞定,巧妙使用1024倍定点化,及查找表的方法,所有指数相关操作全部解决,在允许的误差范围内,实现FPGA的加速运算。

双边滤波其实就是个磨皮算法,用于美容养颜还是不错,所以网上找了一个图给大家参考下,如此下:

图片

    但是,这里的归一化还是有不尽人意的地方,因为不确定9个权重累加的值是多少,因此无法采用乘法来替代除法,这一块暂且在后面想好了再追加讨论。

参考文章

  1. https://blog.csdn.net/qinghuaci666/article/details/81737624
  2. https://www.cnblogs.com/yoyo-sincerely/p/6058944.html
  3. https://www.jianshu.com/p/73e6ccbd8f3f
  4. https://blog.csdn.net/abcjennifer/article/details/7616663
  5. https://blog.csdn.net/u013066730/article/details/87859184

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目开发(Require + E.js)

最近在做的几个项目,分别用了不同的框架跟方式,有个H5的项目,用了vue框架, 这个项目我还没有正式加入进去, 等手头的这个项目完成就可以去搞vue了, 现在手头的这个项目是一个招聘的项目, 用到了…

五个常用的Linux监控脚本代码

bash中 2>&1 & 的解释 1、首先,bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准…

AHB协议学习

1. 简介 AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、A…

jquery lazy load

LazyLoad是一个Js编写的Jq插件,它可以延迟加载页面中的图片,在浏览器可视范围中的图片会被加载。如何使用&#xff1a;LazyLoad依赖于Jquery&#xff0c;在html的结尾处 ,就是在</body>前。<script type"text/javascript" src"jquery.js"><…

linux内核中的循环缓冲区

Linux内核中的循环缓冲区&#xff08;circular buffer&#xff09;为解决某些特殊情况下的竞争问题提供了一种免锁的方法。这种特殊的情况就是当生产者和消费者都只有一个&#xff0c;而在其它情况下使用它也是必须要加锁的。 循环缓冲区定义在include/linux/kfifo.h中&#xf…

js的规范写法ES5(自己以后按照这样写)

1、引号的使用&#xff0c;单引号 优先&#xff08;如果不是引号嵌套&#xff0c;不要使用双引号&#xff09; 正常情况&#xff1a;console.log(hello there) 双引号转码&#xff1a; $("<div classbox>") 2、空格的使用问题&#xff1a;&#xff08…

删除本地git的远程分支和远程删除git服务器的分支

在项目中使用git管理代码后&#xff0c;有些时候会创建很多不同名称的分支&#xff0c;以此区分各个分支代码功能。 而随着代码的合并&#xff0c;以前的分支就可能不再需要保存了&#xff0c;所以就要对没有用的分支进行删除&#xff0c;包括紧急回滚时从中抽取某一个版本记录…

数字图像处理——引导滤波

一、概述 引导滤波是由何恺明等人于2010年发表在ECCV的文章《Guided Image Filtering》中提出的&#xff0c;后续于2013年发表。引导过滤器根据局部线性模型原理&#xff0c;通过考虑引导图像的内容来计算过滤输出&#xff0c;引导图像可以是输入图像本身或另一个不同的图像。具…

Ubuntu 18.04换国内源

2019独角兽企业重金招聘Python工程师标准>>> 参考文档&#xff1a; https://blog.csdn.net/zhangjiahao14/article/details/80554616 https://blog.csdn.net/xiangxianghehe/article/details/80112149 1.复制源文件备份&#xff0c;以防万一 我们要修改的文件是sour…

video4linux简介

Video4linux&#xff08;简称V4L),是linux中关于视频设备的内核驱动,现在已有Video4linux2&#xff0c;还未加入linux内核&#xff0c;使用需自己下载补丁。在Linux中&#xff0c;视频设备是设备文件&#xff0c;可以像访问普通文件一样对其进行读写&#xff0c;摄像头在/dev/v…

动态DPC算法学习

造成坏点的原因 感光元件芯片自身工艺技术瑕疵造成;光线采集存在缺陷;制造商产品差异;坏点分类 hot pixel: 固定保持较高的像素值,一般呈现为画面高亮的点;dead pixel: 固定保持较低的像素值,一般在画面中呈现为暗点;noise pixel:信号强度随光照呈现的变化规律不符合正…

windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...

邮槽创建在服务程序内&#xff0c;可以创建成功&#xff0c; 但外部客户端连接时 m_hMailslot CreateFile("\\\\.\\mailslot\\zdpMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);GetLastError返回错误 5 &#xff0c;无权…

递归下降分析

对于给定的文法G[E] : E→ET|E-T|TT→T*F| T/F|FF→(E)|i 消除左递归后的文法是&#xff1a;E→TE E→TE|-TE|∑ T→FT T→*FT|/FT|∑ F→(E)|i 是否是LL(1)文法&#xff1f; select(E→TE)first(TE){(,i}select(E→TE)first(TE){}select(E→-TE)first(-TE){-}select(E→∑)fol…

SYS简介

"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/filesystems/sysfs.txt 可以先把documentation/filesystems/…

数字后端——布图规划

布图规划&#xff08;floorplan&#xff09;与布局&#xff08;place&#xff09;在芯片设计中占据着重要的地位&#xff0c;它的合理与否直接关系到芯片的时序收敛、布线通畅、电源稳定以及良品率。所以在整个芯片设计中&#xff0c;从布图规划到完成布局一般需要占据整个物理…

利用SSH传输文件

在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件scp usernameservername:/path/filename /var/www/local_dir&#xff08;本地目录&#xff09; 2、上传本地文件到服务器scp /path/filename usernameservername:/path 例如scp /var/www/test.php root19…

App WebView实例化

a&#xff0c;高级设置里的环境变量 jdk的配置 b&#xff0c;下载Google的sdk&#xff0c;里面直接包含eclipse 1&#xff0c;新建一个项目 2&#xff0c;起个名字 3&#xff0c;设么走不做&#xff0c;next 4&#xff0c;只操作选择显示的三种方式 5&#xff0c;next什么都不做…

[动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现

前言 关于动态代理的系列文章&#xff0c;到此便进入了最后的“一出好戏”。前俩篇内容分别展开了&#xff1a;从源码上&#xff0c;了解JDK实现动态代理的原理&#xff1b;以及从动态代理切入&#xff0c;学会看class文件结构的含义。 如果还没有看过这俩篇文章的小伙伴&#…

Ti的DM368系列芯片的所有PDF资料汇总

http://www.ti.com/sc/docs/psheets/man_dsp.htm

刘浩(专业打劫三十年)20155307的预备作业02:

我的技能&#xff1f;比大多数人好&#xff1f;经验是什么&#xff1f;与老师的经验的共同之处&#xff1f; 我的技能之一就是单词翻译王——其实看了娄老师的学习经验之后便有些自惭形秽了&#xff0c;我目前的单词量是7300,扇贝上测的&#xff0c;而且测试时是严格的“不会就…