ISP算法之BNR降噪(Bayer域)

news/2024/12/28 18:14:10/

概述

BNR(Bayer Noise Reduction)即Bayer域降噪算法。对于噪声的分类如下表所示:

高斯噪声( Gaussian)

高斯噪声也被称为热噪声,通常是由于电路系统中自由电子的热运动,这种噪声幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的。

散粒噪声

量子涨落现象,​ 量子涨落也是一种涨落,也就是对平均值的偏差,当然这是发生在量子世界的。在量子力学中,一个粒子出现的位置是不确定的,通常是通过一个概率去描述,在量子力学中成为波函数。简单总结一下就是一个粒子(这里我们考虑的是光子)会出现的位置是不确定的,是通过概率,即波函数去描述的,正因为是概率性的事件,所以会产生一定的涨落。该种噪声服从泊松分布(其均值与方差均相同)。

椒盐噪声

椒盐噪声(salt-and-pepper noise)又称脉冲噪声,它随机改变一些像素值,在图像中表现为离散的亮点或暗点。类似于动态坏点。

量化噪声

数字系统对模拟信号进行采样时,由于采样精度不足导致的一种失真形式。在图像中表现为明显的台阶效应,通过增大量化Bit位可以解决部分问题.

固定模式噪声(FPN)

固定模式噪声(Fixed Pattern Noise),通常是由于CMOS Sensor的质量不行,导致图像中出现周期性的竖条纹或横条纹。例如下列OV6946摄像头,在遮黑时出现的明暗交替竖条纹。

降噪是图像处理算法中很大一个板块。本章只讨论对于ISP中的一些基本降噪算法,在ISP Pipeline中降噪分为Bayer域、RGB域、和YUV域的算法。RAW图像是CMOS Sensor输出的最原始数据,一般在降噪前会进行坏点校正DPC、黑电平校正BLC、镜头阴影校正LSC,RAW图像保留了最原始的细节和纹理特征,降噪时需要考虑降噪效果,也要考虑对细节的保留,强度不能太大。RGB域进行降噪的原因是,在RGB域中的一些算法,如图像增强、锐化、ToneMapping等非线性算法在增强图像的同时也会增强噪声,所以在RGB域也需要设置降噪算法来处理这些情况。而在YUV域中亮度和色度通道分开了,可以很方便的处理明暗噪声和伪彩噪声,因此在YUV域中有时候也会添加相关降噪算法

ISP PIpeline是一个非常系统的框架,单个算法性能好不一定整个系统出图效果好,需要各个模块之间的紧密配合,相关参数也需要合理设置才会达到最好的效果。

降噪算法的分类

空域降噪

此种方法是一种2D方法,通常做法是创建一个加权卷积核模板,然后与该像素的邻域区域进行卷积加权,得出一个平滑后的值,比如高斯降噪模板。该类算法容易导致的问题是图像模糊,一方面是邻域窗口的大小,另一方面是对于边缘像素的处理,这些都是要考虑的问题。

核心思想就是:平均(加权)一些相似的像素,去得到噪声更小的像素值。 大部分空域降噪解决的问题都是: 怎么计算两个像素的相似性权重。

一般的空域降噪算法有:

均值滤波(盒式滤波)、高斯滤波、中值滤波,这些算法最大的问题是对于边缘的模糊问题。、

高斯滤波的基本原理是,在处理当前像素的过程中会用到当前像素附近的像素做加权平均,权重取决于当前像素和周围像素的距离,距离越远则权重越小。

常见的保边算法有:

双边滤波(Bilateral Filter)、非局部均值滤波(NLM)、导向滤波(guided filter)等。

双边滤波是在高斯滤波原理的基础上做了扩展,它除了考虑像素距离之外,还考虑当前像素和周围像素亮度的差异,对距离近但颜色差异大的像素会分配小的权重,这样就实现了边缘保持。(一般大边缘保留住了,但是小细节被抹平了,对于绒毛类细节会被抹平)

可以参考经典论文:Bilateral Filtering for Gray and Color Images

非局部算法思想: 根据图像块的相似性来计算像素的相似性权重。非局部并不是指的图像块加权求和,而是指的是求得权重时采用图像块。

该算法需要计算图像中所有像素与当前像素之间的相似性,考虑到这个计算量与效 率的问题,一般会设定两个固定大小的窗口,一个大的搜索窗口(D×D)和一个小的邻域 窗口(d×d),邻域窗口在搜索窗口中进行滑动,根据邻域间的相似性来确定对应中心像素对当前像素的影响度,也就是权值。

大窗口是以目标像素为中心的搜索窗口,两个灰色小窗口分别是以 x,y 为中心的邻域窗口。其中以 y 为中心的邻域窗口在搜索窗口中滑动,通过计算两个邻域窗口间的相似程度为 y 赋以权值𝑤(𝑥, 𝑦) 。假设含噪声的图像为𝜈,去噪后的图像为𝑢,𝑢中 x 点处的像素灰度值计算如下:

其中权值𝑤(𝑥, 𝑦)表示像素点 x 和 y 之间的相似度,值由以 x、y 为中心的矩形邻域 𝑉(𝑥)和𝑉(𝑦)的几何距离决定,计算公式如下所示:

𝑍(𝑥)为权重归一化系数;𝑆d为小搜索窗区域;ℎ为平滑参数,控制高斯函数的衰减程 度,ℎ越大,高斯函数变化越平缓,去噪水平越高,但同时也会导致图像越模糊,ℎ越小, 边缘细节保持的更多,但会残留过多的噪点,降噪效果相对不错。

频域降噪

频域降噪的核心思想是利用信号在空间上的连续性,将图像信号变换到频率域,在频率域将信号和噪声分开,进而对信号降噪,处理后再转回空域,流程如下:

常见的图像变换频域有:傅里叶变换、小波变换、离散余弦DCT变换

对于数字图像 f(x,y),其二维离散傅立叶变换公式如下:

反变换公式为:

该部分可以参考冈萨雷斯的数字图像处理相关章节,个人觉得受益匪浅。

3D降噪(时域降噪)

核心思想是将多帧噪声图像通过融合降噪算法合成一张去噪图像,一种最简单的实现方法是时域均值滤波,即将相邻几帧图像做加权平均。

此种方式产生的最大问题是运动伪影,由于图像帧之间不是同时采集的,在拍摄动态场景和物体时候,帧时间差内画面部分已经发生改变,此时简单加权平均法就会导致运动物体出现伪影,如下图所示,所以该类方法通常都会与运动补偿算法进行结合。

还有一种情况是即使拍摄静态场景,由于手部抖动也会导致图像对应点没有对齐,强行融合会导致画面在边缘出现伪影或拖影,解决该问题的算法被称为图像配准对齐。

因此时域3D降噪通常是与运动补偿和图像配准对齐算法结合对图像序列进行融合处理

混合降噪

顾名思义就是混合使用前述的多种算法,例如有一个比较重要的算法是BM3D,虽然带有3D,但其实是空域2D+频域混合的算法,算法思想是首先在空间域中将图像相似度高的2D patch组合成3D group,这一步与Non-local mean的思想是一样的。然后会在变换域中对3D group进行协同变换和滤波,从而增强稀疏表示,其中变换域主要包括三个连续的步骤:各个group的3D变换,变换谱的收缩和逆3D变换。

算法相对还是较为复杂的,可以参考经典论文(论文附有开源代码):

Image denoising by sparse 3D transform-domain collaborative fitering

参考

ISP基础(03):拜尔域去噪BayerNR - ningKing - 博客园

一篇文章看懂散粒噪声 - 知乎

浅谈ISP-图像噪声模型3_isp图像处理raw域降噪-CSDN博客

图像传感器与信号处理——详解图像传感器噪声_图像噪声检测方法和原理-CSDN博客

图像处理之FPN校正 - 淇淇宝贝 - 博客园

图像降噪:频域与混合域去噪 - 知乎


http://www.ppmy.cn/news/1557770.html

相关文章

springboot/ssm智能停车计费系统Java代码编写web停车场车位管理项目

springboot/ssm智能停车计费系统Java代码编写web停车场车位管理项目 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&#x…

【数据库】大二数据库复习范围 (快速版)帮助你快速复习数据库

第一章 1. 信息=数据+语义 2:数据库管理系统(database management system, DBMS) 3. 数据库系统(database system, DBS)由数据库、数据库用户、计算机硬件系统和计算机软件系统等几部分组成 4. 数据模型按应用层次可分为概念模型、逻辑模型和物理模型。 5.每个二维表…

Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略

Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略 目录 Excalidraw 简介 1、Excalidraw 的主要特点: Excalidraw 安装和使用方法 1、Excalidraw的安装 T1、使用 npm 安装: T2、使用 …

virtualbox7 使用 自带的nat网络配置 解决虚机上网问题

virtualbox7 使用 自带的nat网络配置 解决虚机上网问题 单纯在虚机上设置,不知为啥啊nat不好使, 后来看了网上一篇文章,不在虚机上设置。 一、在virtualbox 管理器的 管理 ------>工具------> 网络管理器 ------>NAT网络 -----…

牛客--求小球落地5次后所经历的路程和第5次反弹的高度,称砝码

求小球落地5次后所经历的路程和第5次反弹的高度 描述 假设有一个小球从 hh 米高度自由落下,我们不考虑真实的物理模型,而是简洁的假定,该小球每次落地后会反弹回原高度的一半;再落下,再反弹;……。 求小球…

C语言初阶习题【14】数9的个数

1.编写程序数一下 1到 100 的所有整数中出现多少个数字9 2.思路 循环遍历1到100,需要判断每一位的个位数是否为9,十位数是否为9,每次符合条件就count进行计数,最后输出count,即可 3.code #define _CRT_SECURE_NO_W…

KAFKA消費數據的三種方式

点对点 点对点的消费模式也称为队列模式,它会将详细发送到一个队列中,并由只能有一个消费者来读取信息,即一个消息智慧被一个消费者处理,这种模式下只有一个消费者可以处理消息,如果想要多个消费者处理消息就要启动多…

【Steel Code】 10.5 COMPOSITE COLUMNS

10.5 COMPOSITE COLUMNS 组合柱 10.5.1 General 总则 (1) This clause applies for the design of composite columns and composite compression members with fully encased H sections, partially encased H sections, and infilled rectangular and circular hollow sect…