rawdatadenoise - yubo105139/paper GitHub Wiki
Raw Image Denoising
相关概念
Bayer pattern四种模式
- GBRG
- GRBG
- BGGR
- RGGB
Bayer unify
- Convert a bayer raw image from one bayer pattern to another
- 两种方式:pad or crop
rawpy
- 处理原始图像的python库,可将raw图像转为sRGB
ISO
- 感光度
- 在胶片时代,ISO感光度是衡量传统相机所用的胶片感光速度标准的国际统一指标,感光度是由所购买的胶片决定的,数值是固定的,是胶片本身的一种属性;
- 数码相机的ISO感光度同样反映了其感光的速度;
- ISO影响:提升ISO可以提升画面的曝光度(ISO数字越大,代表对光线也越敏感);高感光度(后者长时间曝光)会带来噪点问题;
- 拍摄相关概念和影响可参看这里
SID
- 数据集:包含成对的Raw数据和sRGB,sRGB是经由rawpy转换的(存疑);
Unprocess
BM3D
- 传统降噪算法的一个标杆;
- 具体原理及过程
图像中噪声来源
- 散粒噪声。这种典型的噪声是由于每个像素检测到的光子的数量在每一帧每一个像素之间都很随机。想象一下,当下雨时,你有方法可以计算每一秒雨点进入到容器的数量。当降雨稳定的时候,如果你每一秒钟计算掉入到容器中雨滴的数量,每一秒钟所获的到的雨滴大小并不是一样的。在某一时刻你可能计算的到20,另一个时刻可能是21,19,22,18,17,23等等。这些自然的变量即为散粒噪声。有意思的是,散粒噪声的大小等于被检测到光子数量的平方根。
- 读出噪声。读出噪声是由于sensor的模拟数据转换为数字数据时所带入的噪声。读出噪声是图像传感器本身的特性。一些sensor的读出噪声高于另一些sensor的读出噪声。在 当前所使用的CMOS sensor中,其读出噪声一般都比CCD sensor读出噪声小。
- 热噪。sensor本身的热量所散发出电子。sensor检测到自身所散发的电子当做光的一部分。曝光时间越长热噪越多,曝光时间较短是热噪可以忽略不计。降温可以在一定程度上减少热噪。
- 暗噪声。是由于电子的离散特性导致的统计涨落;
Raw image噪声模型
- 高斯泊松噪声模型
数据集
- Google HDR+ Dataset
- Darmstadt Noise Dataset(DND)
论文
Learning to See in the Dark(2018)
- 论文目的
- 将低光照下的原始图像转换为清晰图像
- 论文贡献
-
制作数据集
- 低光照条件下短曝光(1/30秒和1/10秒)获得原始图像
- 相同条件下长时间曝光(短曝光时间的100倍-300倍,即10-30秒)获取高质量的GT图像(libraw处理,问题:按照论文所述,短时间曝光拍摄的图像会产生噪声,长时间曝光的图像会产生模糊并且不真实。猜测可能是只选取清晰的)
- 共5094对,多张短曝光的图像对应一张GT,GT的数量为424张;
- 图像拍摄场所有室内和室外,室外为晚上拍摄,室内的图像更暗;
- 70%作为训练集,10%作为验证集,20%作为测试集;
- 拍摄过程:调节好光圈、ISO、焦距等使得能够拍摄一张长时间曝光的清晰图像,拍摄好后,将曝光时间缩短100-300倍,获取拍摄一系列短时间曝光图像;
-
网络结构:
-
- 图中上边三个是常用的方法
- 下方为本文模型
- $\gamma$ 为放大率,根据采集数据设置为100或者300(应该是原始图像与GT之间的曝光时间比值);
- U-net
- loss:L1 loss
问题
- 短时间曝光和长时间曝光的图像可能并非完全对应;
- $\gamma$ 为放大率,在推理时需要人工调节;
- 网络中black level还未明白其含义----按光流,raw data会输出;
Seeing Motion in the Dark(2019)
- 论文目的
- 将低光照下的原始视频转换为清晰视频
- 论文贡献
-
制作数据集
- 获取raw视频数据:每秒16-18帧,连续获取110帧作为一个视频;
- 获取两种视频:第一种视频静态场景,此视频利用长时间曝光(短时间曝光的120和300倍)获取的图像帧作为GT(原始数据通过Rawpy操作获取sRGB作为GT);第二种为动态场景(三种动态:场景动、相机动、两者都动),此场景图像帧没有GT(不能获取长时间曝光图像帧作为GT是因为,短时间和长时间曝光拍摄照片中的内容不同);
- 静态场景视频:202个,64%用于训练,12%用于验证,24%用于测试
- 动态场景视频:用作评估
-
网络结构
- 预处理包含:Bayer视频帧转为原始RGB,black level substration,binning(可以增加图像信噪比,降低分辨率,详细信息)、全局增益、VBM4D
- 后续为神经网络处理,训练时,输入为Raw RGB video中随机选取的两帧,输入到Siamese网络;
- 损失函数:包含两部分:siamese网络两个分支输出与GT的Vgg特征损失;两分支输出之间的Vgg特征损失。
vgg选用的卷积层有:conv1_2 conv2_2 conv3_2 conv4_2
问题
- Raw RGB video是经过binning处理的,此处理会降低图像分辨率,而GT应该对应raw数据的分辨率,所以网络中的ResUnet网络带有上采样层??
Learning Raw Image Denoising with Bayer Pattern Unification and Bayer Preserving Augmentation
- 论文目的
- 解决raw图像去噪的两个问题:1.Bayer阵列有多种模式,通常会为每种模式训练一个模型;本文是采用一个模型解决多种模式;2.RGB图像增强的方式不适用于raw data,设计一种数据增强方式适用于Bayer阵列。
- raw data 到raw data 去噪
- 本文算法
为解决上述问题1,本文通过Bayer Pattern Unification (BayerUnify)将不同模式的Bayer阵列转换为同一种,本文为BGGR模式
BayerUnify具体方法
- 训练时通过切实现
- 测试时,通过padding实现模式转换为BGGR,通过切变为原来的模式;这是因为测试时,每个pixel都应参与去噪
为解决上述问题2,本文通过Bayer Preserving Augmentation (BayerAug)对rawdata进行增强
- 先镜像,再切
原始数据做镜像如上图(a)(b)所示会改变bayer阵列模式,本文采取先镜像再切的数据增强方式来保护数据模式。
网络结构:Unet网络
NTIRE2019比赛提交的模型
数据集
- SIDD,提供成对的noisy raw data和clean raw data及其对应的RGB图
问题
- 文中未提及最终如何将raw data转换为RGB,猜测用的rawpy
Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes
- 额外信息
- realistic noise removal通常构建noisy-clean图像数据对;
- noisy-clean图像数据对两种构建方法:通过平均多帧静态场景的图像来构建noise-free图像,而这些静态场景的图像都是通过固定的camera和固定的设置获取的(One approach is generating the noise-free image by averaging multiple frames for one static scene and all the images are captured by a stationary camera with fixed settings);通过对静态场景设置低/高ISO设置获取,低ISO获取的是GT,高ISO获取的为noise图像(Another strate2302gy is capturing a static scene under low/high ISO setting and use the low ISO image as the ground truth of the noisy high ISO image,获取对应的raw data,通过相同的ISP处理为sRGB)
- 论文目的
- 为noise视频去噪;
- 现在合成视频数据上训练,再在真实视频数据上微调;
- 论文贡献
-
制作数据集
-
采集真实场景的数据:背景为静态的,运动物体选择运动可控的(如玩具等),对于每一次移动拍摄M帧noisy图像,对M帧取平均即可获得对应的clean帧,以此构成noise-clean图像对;
-
模拟数据合成:对干净视频数据进行unprocess获取干净的raw数据,加上高斯泊松噪声模型之后来生成训练数据对。
干净的视频使用的是MOTChallenge dataset,其中包含场景及相机的混合运动,每个视频的帧数也非常的多。
这里使用的高斯泊松的噪声参数标定方法是分别标定shot noise 与read noise。
标定shot noise是在均匀光照的条件下,在平坦的墙面区域拍摄白纸,固定ISO之后使用不同的曝光时间,连续拍摄2张来计算。为了避免暗角的影响,取中间的400x400的区域来计算。由于有着均匀光照以及白纸的前提下,像素强度值应该是一致的,取这400x400的两次拍摄的平均作为像素强度值y;两次拍摄的像素强度差的方差$sigma_d$应该为真实方差的两倍(两个变量相减的方差等于各个变量方差的和)。得到一组标定数据(y, sigma_d)。
第一项的均值为$y_p$,方差为${\sigma}{s}^{2}y_p$,第二项的均值为0,方差为${\sigma}{r}^{2}$,则$var(x_p)={\sigma}{s}^{2}y_p+{\sigma}{r}^{2}$,假设两次拍摄分别为$x_p^1$和$x_p^2$,则$var(x_p^1-x_p^2)=var(x_p)=2{\sigma}{s}^{2}y_p+2{\sigma}{r}^{2}$,则给出一组标定数据,通过求斜率/2即可获取shot noise的方差。
标定read noise的方法比较简单,盖住镜头,没有信号的话拍出来的暗电流的方差即为read noise。
-
-
网络结构
- pre-Denoising:为了后续的对齐模块,噪声强度较大的情况下,对齐的精度会大幅下降,是预训练模型,采用SID中的230张干净的raw 数据,加上高斯泊松的噪声模型来进行单帧降噪训练。
- packing:Bayer阵列按照RGBG分别取出;
- Alignment:将reference frame对齐到当前帧
- Non-local Attention:这里使用了criss-cross attention来进行通道、空间、时序上的三次attention,然后再融合在一起。
- Temporal Fusion: 分别与当前帧做元素相乘作为相似度,reference帧乘以相似度,作为加权后的reference帧,最后再对所有帧求平均,则获得的特征尺寸为$1\times C \times H \times W$
- Spatial fusion: 使用了10个残差块,然后一个CBAM的模块来进行通道及空间上的attention,最后加上一层卷积输出4xHxW,再unpack回1x2Hx2W的尺寸大小来作为参考帧的残差。
- ISP:这里使用ISP来将raw数据转换成sRGB的,同样是使用SID的230组raw与sRGB的训练数据对来训练ISP模型。
- 损失函数:包括了重建损失与时序损失两个部分,重建损失包括raw 与sRGB域上的L1损失函数,时序损失则是挑选4帧数据,前3帧与后3帧的结果同时与GT进行L1损失计算。
训练时,第一阶段训练不加时序损失,因其计算代价太大,只在第二阶段加入时序损失函数。