噪声及降噪算法总结-程序员宅基地

技术标签: 计算机视觉  -- 图像画质增强  图像处理  ISP  人工智能  降噪  

1. 噪声介绍

噪声是图像中不请自来的信号。当相机拍摄一个亮度十分均匀的区域时,相机输出的结果会不可避免地叠加一部分噪声。

在这里插入图片描述
相机的输出信号=真实信号+噪声信号。由于真实信号的具体值是未知的,所以只能用多次测量的平均值来代替。用数学公式表示就是,

在这里插入图片描述
在数码照相机和摄影机产品中,总的规律是光圈越小、(电子)快门越短、ISO越高,图像噪声就越大。

2. 噪声类型

  • 高斯噪声 Gaussian,也称热噪声或约翰逊-奈奎斯特噪声。在电子系统中,自由电子的热运动是一种典型的高斯噪声源,其特点是在工作频段内,噪声的功率谱密度符合均匀分布,而瞬时值符合高斯分布。
    在这里插入图片描述
  • 散粒噪声 Shot noise,源于光信号(或电信号)本身的统计涨落,符合泊松分布。
    在这里插入图片描述
  • 椒盐噪声 Salt and Pepper,取盐和胡椒的颜色,salt指代暗区中的亮点,pepper指代亮区中的暗点。CMOS sensor
    中的hot pixel在图像中即表现为椒盐噪声。
    在这里插入图片描述
  • 斑点噪声 Speckle,根据相干原理进行成像的系统中普遍存在的一类噪声,如超声、雷达、SAR等。噪声原理是反射表面在波长尺度上是粗糙的,因此反射波存在明显的散射效应(scattering),导致所成的像出现斑点。
    在这里插入图片描述
  • 数字噪声 Digital,由sensor和ISP的数字增益引起,原因与数字系统的有限精度有关。
    在这里插入图片描述
  • 量化噪声 Quantization noise,数字系统对模拟信号进行采样时,由于采样精度不足导致的一种失真形式。目前主流的图像都是采用8比特量化,多数的时候效果是不错的,但是在描述单色平坦区域时(如白墙)容易出现明显的台阶效应。未来的趋势是采用10比特量化,每个(R,G,B)数据能够描述超过10亿种颜色,基本可以消除台阶效应。
    在这里插入图片描述

3. 噪声的知觉特性

在一幅图像内部,当噪声的信号幅值相同时,对人类视觉来说暗部的噪声会比亮部的噪声更明显,如下图所示。

在这里插入图片描述
噪声一方面会表现为像素亮度的随机波动,对于彩色图像还会造成像素颜色的随机波动,给图像引入并不存在的颜色,这对图像质量造成的破坏往往更加严重。

在这里插入图片描述
关于人类视觉系统(Human Vision System)的研究表明,人眼对亮度和色度的空间分辨能力是不同的,在低频段色度的分辨能力大于亮度,随着频率提高缓慢衰减,频率高于一定阈值后色度的空间分辨能力迅速衰减至零,而亮度空间分辨能力则是先增大再衰减

在这里插入图片描述
噪声的空间频率高低会影响关于图像质量的主观感受,而且这种影响与人的直觉不一定相符。在下图的例子中,右图主要包含高频噪声,在人眼看来其图像质量比左图要好很多,其实右图的方差是12.5,大于左图的方差11.7,左图感觉噪声更大的主要原因是噪声的频率更低一些。

在这里插入图片描述
因此,关于噪声的一般规律是,幅度小的高频噪声对主观图像质量影响较小,而幅度大的低频噪声对主观图像质量影响较大。
在这里插入图片描述
噪声对图像质量造成的影响并不仅限于人眼观察时引起的主观不适,它对后续的图像使用环节也会带来很多负面的影响,比如会引起视频编码的码率上升、人脸识别准确率下降等问题。

3. 信噪比(SNR)

任何实际测量到的信号都无可避免地含有噪声成分,而评价一幅图像成像质量的标准是信号幅度与噪声幅度的比值,即信噪比。

在这里插入图片描述
对于一组测量数据样本,一般用均值作为信号的幅值,而该组样本的标准差反映噪声的大小。

在这里插入图片描述

在这里插入图片描述

4. 彩噪(Chroma Noise)

ISP内部会使用YUV空间对像素进行处理,其中Y表示像素的亮度,UV分别表示蓝色和红色的色度。当环境照度不足时,Y、U、V信号的期望值(绝对值)都很小,此时UV分量的随机噪声就变得相当显著,在画面上表现为彩色的噪点或噪斑,如下图所示。

在这里插入图片描述
目前主流的CMOS sensor都是使用硅基材料制造的,而硅材料在蓝光波段的光电转换效率较低,所以在低照度条件下拍摄的图像几乎都是蓝色通道的噪声最为显著。

4. 降噪原理

  • 对于画面中的平坦区域(homogeneous area),认为像素变化主要是由噪声引起的,可以加大降噪力度
  • 对于画面中的纹理区域(textured area),认为像素变化主要是由纹理引起的,噪声只占较小部分,需要控制降噪力度,尽量保持图像的纹理特征

为了区分纹理与平坦区域,我们需要设计一种算法,给定一个像素以及以该像素为中心的一个邻域,算法需要计算出该像素的纹理指标(权重)。意法半导体的算法专家们提出了一种基于频域变换的方法,基本思想是将使用8x8大小的DCT变换将小块图像变换到频域,然后对频率分量进行分析,

  1. 如果DCT变换后非零系数很少,且能量集中在低频,说明是平坦区域,应加强降噪力度;
  2. 如果两个相邻的DCT单元具备相同或相近的直流分量,则说明是平坦区域,应加强降噪力度;
  3. 如果某个方向(水平、垂直、对角)上存在明显占优的系数,则说明存在强边缘,应避免降噪;
  4. 如果某两个方向上存在占优的系数,则说明存在弱边缘,应进行中等强度的降噪;
  5. 如果很多方向上都有非零的系数,但又没有明显的优势系数,此时可能是纹理与噪声并存的情况,需要一定强度的滤波,削弱高频成分;

在这里插入图片描述
其它研究表明,降彩噪的力度不仅需要考虑纹理特征,还需要考虑画面的亮度。因为彩噪在画面的暗区最明显,所以应将噪范围局限在暗区。

另外,一般的规律是蓝像素的噪声最大(如下图所示),所以可以对蓝色通道使用更强的降噪力度。

在这里插入图片描述
综合来看,针对彩噪的降噪算法需要包含下列子算法

  • 纹理强度分析(texture degree / edgeness level analysis)
  • 噪声强度估计(noise level estimation)
  • 噪声阈值判定(noise threshold definition),区分信号与噪声的边界
  • 权重生成 (weight generation),决定对降噪和不降噪的倾向因子

下图显示了一种典型的算法流程。

在这里插入图片描述
下图给出了一个纹理强度分析算法的例子,左边是原图,右边是纹理检测算法输出的权重图像,白色代表纹理,黑色代表平坦。

在这里插入图片描述

5. 空域降噪(Spatial)

空域降噪是一种2D降噪方法,它只处理一帧图像内部的噪声。降噪算法根据实现原理不同可以分成很多种类型,比如线性/非线性、空域/频域,频域又包括小波变换、傅里叶变换或其他变换。
在这里插入图片描述
在camera ISP 中使用的降噪算法需要足够简单、快速、节省内存、适合硬件实现。经典的低通滤波器如中值滤波或高斯滤波虽然足够简单但是容易破坏图像中的边缘,所以主流ISP产品一般会使用某个加强了边缘保持特性的改进版本,如引导滤波(guided filter),双边滤波(bilateral filter)等。

高斯滤波的基本原理是,在处理当前像素的过程中会用到当前像素附近的像素做加权平均,权重取决于当前像素和周围像素的距离,距离越远则权重越小。双边滤波是在高斯滤波原理的基础上做了扩展,它除了考虑像素距离之外,还考虑当前像素和周围像素亮度的差异,对距离近但颜色差异大的像素会分配小的权重,这样就实现了边缘保持。

小波变换的原理是将信号分解到不同的频带,每个频带保留了一定的空域信息。通过对这些小波系数做阈值处理、滤波或者基于统计建模的处理,再反变换回空域,可以实现有效的降噪效果。

**小波变换和双边滤波结合使用可以取得更好的效果。对低频信号做双边滤波,对高频信号做阈值处理,结合之后生成低频信号再做双边滤波,如此反复。**这个方法的优势是可以针对不同的频带调节降噪的强度,同时保持了边界,在很多 ISP 中已有应用。

6. 时域降噪(Temporal)

时域降噪是一种3D降噪方法,它的主要思想是利用多帧图像在时间上的相关性实现降噪。
在这里插入图片描述
一种最简单的实现方法是时域均值滤波,即将相邻几帧图像做加权平均。由于累加后噪声的增长速度(根号关系)小于信号的增长速度(线性关系),所以图像的信噪比会提高。这种方法的主要问题在于只适合处理静态图像,如果画面中存在运动的物体则会出现伪影(ghost effect),如下图所示。

在这里插入图片描述

7. 运动适应降噪 Motion Adaptive Noise Filter

对基本的时域降噪进行一些改造就可以得到一种自适应降噪算法。假设图像中坐标(x,y)处的像素值为P(x,y), 新一帧中同位置像素值为P’(x,y),如果两个像素值的差异小于某阈值,即|P’-P|<threshold, 则可以用P代替P’。这种方法对静止的图像效果非常明显,尤其是可以显著降低H.264/265编码码率。
在这里插入图片描述
假设g(i,j,k)代表有噪声的视频信号序列,其中(i,j)代表像素坐标,k代表时间序列,则g(i,j,k) 可以表示为真实信号f (i,j,k)和噪声信号n (i,j,k)的叠加形式
在这里插入图片描述
真实信号f (i,j,k)当然是不可能知道的,只能用某种方法对其进行估计。一种经典的估计方法是采用以下非线性滤波器,
在这里插入图片描述

其中f(k)代表第k帧图像,它的来源是在第k-1帧图像的基础上叠加了g(k)与f(k-1)的差值成分,即 ∆= α(k)|g(k)-f(k-1)| ,其中α(k) 是与∆相关联的阻尼系数。

  • 当∆<thres0时判断为噪声,采用α(k)=0;
  • 当∆>thres1时判断为真实信号,采用取α(k)=1;
  • 当thres0<∆<thres1时α(k)介于0和1之间。

在这里插入图片描述
当然,这种方法的局限也是很明显的,一方面阈值的选取需要能够有效地区分噪声与画面变化,这本身不是一件很容易的事情;另一方面当像素变化超过阈值后此方法就失效了,因此画面前景部分的噪声处于逍遥法外的状态,这也是一个问题。

因此,一个理想的滤波器应该同时满足几个特征,即

  • 能够有效地区分画面的前景(运动目标)和背景(不动目标)
  • 对画面中的前景像素进行空域降噪
  • 对画面中的背景像素进行时域降噪

于是就应运而生了STNR技术。

8. 空域时域降噪(STNR)

STNR是一种2D+3D降噪方法,它通过一套算法判别一个像素是属于前景还是背景,被判决为背景的像素将会参与时域平滑,被判决为前景的像素将会参与空域平滑,而判决条件则每一帧都在动态更新,以尽可能保证判决准确性。

在这里插入图片描述
STNR 的核心算法是在对图像中的运动物体进行检测并估计出运动矢量,因此这种技术也称为Motion Compensated Noise Reduction, MCNR,它依赖于视频编解码中常用的运动估计和运动补偿技术(Motion Estimation & Motion Compensation,MEMC)。

8.1 光流法 Optical Flow

假设前一帧时间为t, 后一帧时间为t+δt。在理想情况下(δt很小,在δt时间内图像亮度保持稳定,物体运动速度不大,并且不会突然消失或被遮挡),则前一帧I的像素点I(x, y, z, t)在后一帧中的位置为I(x+δx, y+δy, z+δz, t+δt )。

如果假定图像亮度恒定,即可得到光流法的约束方程(constraint equation)
在这里插入图片描述
进一步假定图像中的物体运动速度不大,则后一帧图像可以用前一帧图像的泰勒展开形式表示(只保留一阶近似)
在这里插入图片描述
根据约束方程,上式中偏导数之和应为0,即
在这里插入图片描述
对于二维图像可忽略z分量,约束方程的最终形式为
在这里插入图片描述
通常在一个小窗口内进行光流计算,采用最小二乘法求得该窗口内的平均运动向量。理想情况下,小窗口内的像素应具有一致的运动向量,因此求得的平均向量就代表着物体真实的运动方向。

8.2 块匹配法 Block Matching

块匹配的思想是在参考帧(通常是上一帧)中的一个小范围内搜索与当前块(block)最匹配的块,如果确实能够找到则计算出运动向量v。
在这里插入图片描述
所谓“最匹配”的块其实可以有很多种不同的评判标准。常用的标准有 Mean Squared Error (MSE) 以及 Mean Absolute Error (MAE) 等算法。

搜索区域一般是根据产品的需求和设计约束而定,常用的有13x13,17x17像素等。搜索区域越大能够检测的运动速度越大,但是所需的算力成本也会呈平方增长。

当图像种存在重复的纹理模式时,光流法和块匹配法都容易失效。在下图的例子中,绿框所示的块状纹理和黄框所示的边缘纹理都容易引起算法失效。而蓝框所示的含直角的块则较容易被算法正确识别。
在这里插入图片描述

8.3 形态学运算

形态学是基于形状处理图像的一组广泛的图像处理运算。在形态学运算中,图像中的每个像素都基于其邻域中其他像素的值进行调整。通过选择邻域的大小和形状可以构造对特定形状敏感的形态学运算。下表是Matlab支持的一些典型形态学运算。
在这里插入图片描述
当图像较暗时往往信噪比SNR较低,信噪在噪声中若隐若现。由于噪声的干扰,不论是阈值法还是块匹配法都很容易判断失误,错将背景当作前景,或者反过来。此时,运用形态学方法可以对帮助修正判断,提高判断的准确率,其基本思想是,

  • 一旦某个块被判断为前景,则与其相邻的8个块也被无条件判断为前景
  • 如果某个块被判断为背景,而与其相邻的8个块中至少存在4个已经被判断为前景,则该块也无条件被判断为前景

这种方法可以显著增加像素被判断为前景的概率,从而增加空域滤波的机会,能够减少运动鬼影的概率。

下面是一些 STNR 效果的例子。
在这里插入图片描述
在这里插入图片描述

9. 最后

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45250844/article/details/125023977

智能推荐

promise解决重复调用同一接口(同步)_promise.all并行调同一个接口-程序员宅基地

文章浏览阅读4.7k次。前端实现多次调用同一个接口,所有数据均成功返回后,才可继续执行下面的代码封装请求数据方法getData(param) { return new Promise((resolve, reject) => { this.$axios .get(`/xx/xx/xxpath/${param}`) .then(res => { let content = res.data reso_promise.all并行调同一个接口

socket编程种名字与地址转换函数_getservbyname是可重入函数吗-程序员宅基地

文章浏览阅读274次。参考:《UNIX 网络编程 · 卷1 : 套接字联网API》之前都是使用数值地址来表示主机(比如:127.0.0.1),用数值端口号来标识服务器(比如:6379)。但是有时候最好使用名字而不是数值:名字比较容易记住,数值地址容易变动,而名字地址保持不变;随着 IPv6 上转移,数值地址变得很长,手工键入数值容易出错。之后将有一系列函数用于名字、数值、端口之间的转换。gethostbyname & gethostbyaddr 函数gethostbyname 函数查找主机名字最基本的函数时 g_getservbyname是可重入函数吗

第一章 Java概述_第 1章java me的概述-程序员宅基地

文章浏览阅读436次。JavaSE结构•Java概述•Java编程基础•面向对象编程•异常处理•API常用类•多线程•容器类•I/O•网络编程•注解1 Java概述结构•1.1 软件编程常识•1.2 Java语言概述•1.3 Java体系结构•1.4 Java语言的跨平台特性•1.5 搭建Java程序的开发环境•1.6 Java程序开发体验_第 1章java me的概述

CSS 选取第几个标签元素_css 第几个几个div-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏11次。在前端开发中,我们可能会碰到这样的需求:想让列表中的第一个部分显示不同的样式 ,想让列表中的偶数部分显示不同的背景颜色,想让列表中的最后一部分样式不一样……这样的需求,我们怎样来实现?其实,如果前面文件是php开发的,可以通过php的循环语句+判断语句+css样式来实现。但是,如果是静态代码,php就无法用了。这时,我们还可以通过CSS来实现,CSS给我们提供了几个非常有用的样式参数:first-..._css 第几个几个div

固定资产管理系统的打造-程序员宅基地

文章浏览阅读106次。固定资产管理总体分为两个部分:固定资产管理财务帐部分,固定资产管理实物帐部分。前者偏重价值管理,后者偏重实物管理,前者一般由财务部门负责,后者一般由行政部门负责。两部分信息又是紧密衔接相辅相成的,通过信息系统的..._crv管理系统

SAP MM 物料主数据MRP2 视图Rounding Value字段-程序员宅基地

文章浏览阅读639次。SAP MM 物料主数据MRP2 视图Rounding Value字段如下物料号,MRP2视图中,维护了rounding value字段值为50。MRP type..._sap mpr2视图

随便推点

单片机入门资料,按键消抖方式,按键怎么消抖_单片机按键消抖-程序员宅基地

文章浏览阅读1.2w次,点赞19次,收藏108次。1.什么是按键消我们先来看一下按键按下去的波形图1.按键消抖原理我们可以看到当按键按下的那一时刻和松开的时候有类似于锯齿的形状那就是按键抖动,这个抖动不是我们人为能控制得了的,所以我们只能对进行硬件消抖或者进行软件消抖本期我们讲解软件消抖.**上图中我们可以看到理想波形和实际波形有很大的区别,区别在于实际波形在按键按下的那一刻前后有20毫秒的抖动,我们按键消抖的目的呢就是把抖动忽略掉只要中间的稳定闭合区域.**## 方法一延时消抖法可以用延时的方式跳过抖动的区域优缺点:优点._单片机按键消抖

Image2Lcd图片取模软件-程序员宅基地

文章浏览阅读3.7w次,点赞73次,收藏265次。image2lcd是一款非常简单使用的图片转换成LCD图像数据的图片转换软件。它能够将各种形式来源的图片转换成特定的数据格式以用来匹配单片机系统所需要的显示数据格式。在输入方面,它支持JPG、BMP、EMF、WBMP、GIF、ICO等多种格式图片的输入,输出的数据拥有二进制类型、WBMP格式、C语言数组类型和标准的BMP格式等多种类型。同时它还能将图象的数据扫描方式、亮度、对比度、灰度(颜色数)以及图像数据排列方式等等进行调节。image2lcd v3.2破解版image2lcd是一款非常简单使_image2lcd

IOS里的TaggedPointer[NSNumber篇]_nsnumber的tagged pointer-程序员宅基地

文章浏览阅读1.9k次。转自:http://www.infoq.com/cn/articles/deep-understanding-of-tagged-pointer/前言在2013年9月,苹果推出了iPhone5s,与此同时,iPhone5s配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念。对于64位程序,引入Tagged Po_nsnumber的tagged pointer

BUUCTF_2.RIP覆盖一下_buuctf rip-程序员宅基地

文章浏览阅读3.7k次。解题思路1. 查看文件信息,安全机制2. 代码审计3. 分析漏洞点4. 编写EXP1.基本信息$checksec ./文件名2.代码审计不管在简单题都一定要IDA查看一下伪代码(IDA做好是7.0以上的版本)首先查看敏感字符串(Ctrl+1)1.gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执..._buuctf rip

curl_init()和curl_multi_init()多线程的速度比较_curl_multi_init c++-程序员宅基地

文章浏览阅读7k次。php中curl_init()的作用很大,尤其是在抓取网页内容或文件信息的时候,例如之前文章curl获得header检测GZip压缩的源代码就介绍到curl_init()的强大。curl_init()处理事物是单线程模式,如果需要对事务处理走多线程模式,那么php里提供了一个函数curl_multi_init()给我们,这就是多线程模式处理事务的函数。curl_init()与cur_curl_multi_init c++

execve系统调用_execve系统调用寄存器参数-程序员宅基地

文章浏览阅读2.6k次。sys_execve()在真正的开始执行系统调用函数之前,系统调用服务程序已经将一些系统调用的函数的参数传递给了相应的寄存器,比如这里的ebx,ecx,edx都分别保存了系统调用的参数,ebx保存的是第一个参数,依次类推(当然最多传递的参数个数不能大于5个),首先这个函数通过ebx获取需要执行的文件的绝对路径,他通过这样一个函数实现获取到文件名之后他就会调用do_execve();_execve系统调用寄存器参数

推荐文章

热门文章

相关标签