文档章节

对图像去噪的拙见

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:46
字数 1856
阅读 38
收藏 1

         本文主要从实用主义的角度,表达了作者对当前图像去噪算法的一些见解。

         图像去噪,是图像处理中的一个经典课题。尽管有很多有效的算法被提出,但能真正可实际使用的算法却还没有,至少从公开发表的文章来看是如此。也许是本文作者坐井观天,才疏浅薄,欢迎大家拍砖。如果您有好的算法,欢迎和本文作者一道讨论,共同进步。

1. 从高斯滤波到双边滤波

         高斯滤波是经典的图像滤波的算法,能够在一定程度上抑制噪声。很多算法都拿高斯滤波做预处理,例如canny边缘检测算子。然而高斯滤波在模糊图像的同时,也模糊了图像的边缘信息。于是,衍生出大量的边缘保持滤波算法。这主要有两类:基于PDE的非线性们扩散和双边滤波。

         关于高斯滤波和边缘保持滤波,有很多的快速算法。也有最近新提出的一些边缘保持滤波算法。例如:guiled filter, 基于SVM的边缘保持滤波,其中SVM边缘保持滤波是第一个基于学习的快速算法。

       imageshop的作者的个人博客上有两篇博文讨论了双边滤波的快速算法:

       http://www.cnblogs.com/Imageshop/p/3406823.html

      本文作者目前正在开发的FastCv也实现了相关的算法,性能指标如下:



        双边滤波作为有效的边缘保持滤波,能够获得更高信噪比。虽然如此,双边滤波并不能拿来专门做图像去噪,即使其PSNR比非局部算法都要高。


2. 非局部算法

          非局部及其改进算法比较多,之前本文作者有一篇博文讨论过非局部算法。这里再次提一下非局部算法。因为作者前不久重新实现了一下非局部算法,对浙大的这篇非局部快速算法的评价也许不是很准确。

         本文作者经过一些简单的代码优化措施,对于30W像素的彩色图像,原始非局部算法大概需要6s的时间。而浙大的这篇文章的快速算法我并没有实现,因为我对其去噪效果持怀疑态度。非局部算法在进行快相似将计算过程中使用了加权的SAD,这个加权值可以是线性衰减的,也可以是高斯衰减的。而根据浙大的这篇论文中的推导公式,完全没有加权,或者说直接采用的SAD作为快匹配标准。而直接采用SAD的非局部算法效果就大打折扣了。

          本博客作者认为,非局部快速有效的算法是Laurent Condat个人主页上的一篇参考文献:

          A Simple Trick to Speed Up and Improve the Non-Local Means。这篇文献中的快速算法不是对非局部的近似,而是一种改进。

          根据SAD权重计算方式的不同,形状自适应的非局部算法被提出,主要的文献如下:

         http://hal.upmc.fr/docs/00/53/67/23/PDF/draft.pdf . 在其主页上提供了大量的各种非局部算法的matlab代码可以下载。


3.  DCT去噪

        DCT 去噪主要是参考下面的文献:DCT image denoising: a simple and effective image denoising algorithm

        DCT去噪是一种看似极其简单,但实际上根本没法用的图像去噪方法。

        说其简单,是因为,整个过程就是进行dct变换,然后进行dct域的硬阈值操作,再反变换回来。但这样做有效吗?

        如果说是按照jpeg编码的方式去处理,明显是没有效果的。但dct去噪是每次滑动一个像素,而不是滑动一个dct块,以这一个像素为中心取当前快进行操作的。这样在实现的时候,势必要把图像组装成数量巨大的小块patch。对每一个小块dct,阈值,IDCT;然后在把小块重新加权组合与原始的像素相对应。

       这个算法执行过程的确简单,而且其效果很多时候比非局部算法要好,当然还是没有BM3D算法来的好。作者指出其理论时间复杂度比原始的非局部算法不是一个数量级的。理论分析也的确如此。但是实际上呢?

       我测试了这个算法,对于800x600的图像,根本没法工作,因为内存不足!我的系统内存也许有点小,只有2G。但是对于处理这么小的图像就导致内存溢出,这明显是无法接受的。对于更小一点的图,512x512的图片,时间是多少了?我的非局部是6s,而同样的配置下dct去噪的c代码给出的时间是2min。

       也许,不用事先分块的方法可以有效较小系统内存开销,但这样做实现就比较复杂了。


4. BM3D图像去噪

         BM3D去噪算法被公认为是最好的去噪算法之一,最近很多更有效的去噪算法都与BM3D去噪算法为对比基准。

         在作者主页上提供的BM3D的很多相关文献及其代码。

        本博客作者测试了BM3D作者提供的matlab代码给出的时间是:对于512x512的彩色图像大概是16s。

        仔细查看代码可以知道,BM3D的作者并没有提供matlab代码,其最核心的实现已经用c封装成matlab可调用的库了。作者应该是对这个算法做了很多的优化才能达到这样的速度。因为同样是BM3D,另外一个C代码的实现则比其慢了很多,链接如下http://www.ipol.im/pub/art/2012/l-bm3d/。这个代码对于512x512的彩色图像,在我的机器上测试的时间是2min以上,对于再大点的图像会导致内存溢出而crash掉。另外,这个链接中详细讨论了BM3D算法本身的诸多细节以及各个参数对去噪效果的影响,对于研究BM3D算法朋友可以认真研读一下。

        对IPOL上的这个实现,我的测试效果并不好,对于真实iphone数码相机夜间拍摄的图像,这个BM3D的去噪效果还没有我目前正在开发的FastCv中采用的动态阈值小波去噪算法来的好。而这个动态阈值小波去噪的时间是毫秒级别的。这也许是我还没有充分测试BM3D的各种参数所致。因为同样的测试,在BM3D算法作者主页上给出的测试结果有明显的差别。  


           综上,从公开发表的文献来看,在普通pc机上,还没有一个实时有效的图像去噪的方法。另外,对本博客作者正在开发的FastIv感兴趣的可以加入讨论群322687422讨论图像处理与视觉计算中的快速算法及其实现,主要是偏工程上的软件优化方法。


              




      



        

        



本文转载自:http://www.cnblogs.com/celerychen/p/3588189.html

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
【图像复原】SSDA论文详解(Image Denoising and Inpainting with Deep Neural Networks )

论文原文:http://papers.nips.cc/paper/4686-image-denoising-and-inpainting-with-deep-neural-networks.pdf 一、简介 论文主要介绍了一种解决盲图像去噪和图像复原问题的新方法SSDA(叠加...

李文豪
11/03
0
0
不需要干净样本的去噪方法:Noise2Noise

论文:Noise2Noise Github:第三方复现Noise2Noise 引言 用深度学习方法进行图像去噪的时候,通常需要大量的训练图像样本对,即带有噪声的图片和去噪后的图片,可是去噪后的图片往往很难获得...

Mordekaiser
08/11
0
0
基于matlab的图片处理(以图片验证码为例)

在一幅图像中,人们常常只对其中的一部分感兴趣,更重要的是,通常只有部分区域含有我们需要的某些重要的信息,这些部分通常占据一定的区域,并且具有某些特性(如灰度,轮廓,颜色和纹理等)...

qq_40996400
05/23
0
0
ICML 2018 | 英伟达提出仅使用噪点图像训练的图像增强方法,可去除照片噪点

  选自Nvidia   机器之心编译   参与:机器之心编辑部      如果有一天,在低亮度环境中拍摄的照片中的噪声可以被自动清除,并且自动修复失真,那将会如何?你的照片库里是否有很多...

机器之心
07/11
0
0
简单的解释,让你秒懂“最优化” 问题

最优化,就是: 1. 构造一个合适的目标函数,使得这个目标函数取到极值的解就是你所要求的东西; 2. 找到一个能让这个目标函数取到极值的解的方法。 下面通过两个例子进行解释。 >>>> 一、图...

fnqtyr45
2017/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

进程管理利器Supervisor--centos7下安装与卸载

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用在线安装,...

java_龙
18分钟前
2
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
18分钟前
2
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
21分钟前
2
0
numpy常用操作

水平合并数组 import numpy as npa = [1,2,3]b = [4,5,6]np.hstack((a,b))# array([1, 2, 3, 4, 5, 6])c = [a,['a','b','c']]d = [b,['d','e','f']]np.hstack((c,d))#array([['1'......

datadev_sh
37分钟前
5
0
四种检测异常值的常用技术简述

摘要: 本文介绍了异常值检测的常见四种方法,分别为Numeric Outlier、Z-Score、DBSCAN以及Isolation Forest 在训练机器学习算法或应用统计技术时,错误值或异常值可能是一个严重的问题,它们...

阿里云官方博客
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部