今天来总结一下Color Demosaicking(CDM)里面的重要论文和方法。希望能囊括AP, AHD, SA, LDI-NAT, DLMMSE, LSSC, GBTF, RI等方法
比较旧的:AP, AHD, SA等
AP给出两个图像规律统计假设:1.自然图像在R,G,B通道间有较大的相关性(inter-color correlations) 2.G通道的采样率比R,B高一倍。则G通道的细节信息更丰富。它的方法包括两步:1.用了高低通滤波,然后构建inter-color恢复像素的公式 2.将结果投影到observed和label constrants sets上,进行fine-tune.(这些后来都有更好的方法)
Comment: AP这个方法效果已经不佳,但是它统计出来的inter-color correlation很重要
SA让G和RB通道的像素估计进行一个交替循环地求解,类似于近似逼近的思想。迭代式求解涉及三个问题:1.从何开始(初始化方法) 2.该算法收敛吗(论文用AP的constrains set论证) 3.什么时候结束(更新不再提高,或到一个较少值)
Comment: SA这个方法主要说明了一个Iterative求解CDM问题的可行性,但iterative问题需要说明清楚上述的三个问题。
AHD这篇文章2005年提出了homogeneity概念,有效结合梯度较小的变化方向进行有效的像素估计,最后结合adaptive中值滤波的方法去除一下artifacts。效果比之前好,而且还快。
接下来说一下速度比较慢,效果比较好的:DLMMSE, LDI-NAT, LSSC, Dict Learning
DLMMSE: 基于G和R/B通道的primal difference signals是low pass的,提出了基于directional minimum mean square-error estimation的方法,这里用到了horizon和vertical两个方向。先恢复G通道,然后用G恢复R/B通道。
论文首先给出统计表,说明GR和GB的相关性比RB的强,所以用G-R和G-B作为通道相关性的信号,然后估计真实值与观察值的误差。为了方便求解,而且假设两个信号demosaick noise是i.i.d gaussian,则LMMSE的公式可以简化为 其中x是观察值,mu_x是x的均值,sigma为方差,y为估计值。
LDI-NAT的方法在之前的博文说过,这里总结一下,相比DLMMSE,LDI-NAT用LDI做一个初始化方法,然后结合non-local similarity的方法,构建矩阵进行SVD去噪,从而达到去马赛克噪声的效果。具体数学部分挺多的,请看原文或者之前博文。
LSSC是09年提出的nonlocal+dictionary learning的美妙融合,成为了领域的milestone,当时做image restoration是效果最好的。先学字典,然后稀疏编码求解。这个字典的学习是精髓,不同于BM3D直接使用小波字典,这里作者用了L1,2 norm来使得同样的信号尽量获得同样的编码,用group sparsity从而使得字典更紧凑。
Regularization-based: 由于CDM是一个ill-posed problem,所以一般人们习惯于加入正则项来约束退化模型,从而得到原始的估计信号,这就使得正则项对于整个问题的重要性不言而喻了。这里说一篇《cdm using inter-channel correlation and nonlocal self-similarity》的TIP文章,作者提出了两个重要的term来做CDM restoration问题。首先是TV-term和inter-color channel的结合,在difference map上做tv效果会比单独TV更佳。 然后是nonlocal matrix的low rank constraint,由于高频纹理复杂以及噪声影响,这个nonlocal matrix可能不是低秩的,这里用一个低秩矩阵加上Outliers矩阵来近似,意思是总能来nonlocal matrix附近找到一个低秩矩阵满足低秩,从而将假设放宽了一点。最后优化这两个正则项。(当然这是基于MLRI的初始化之后再做的demosaicking denoise),接下来都是凸优化的数学问题求解了。
最后是又快又好的插值方法:GBTF, RI-based, CNN-based
GBTF的论文可以理解为更细致的adaptive插值方法,先做一个LCC1的初始化,然后类似Total Variance的方法,构建一个difference map.在这个difference map上面做四个方法的加权插值,最后将这个estimate difference加回初始化图像,得到最终结果。特别地,对于R,B通道,提出用Laplacian filter加权拟合效果更佳。(这也是后来MLRI的思想)
RI-based methods:
RI是最近比较热门的方法,传统流程是在估计G通道之后,用R-G的difference做R图的恢复估计。现在RI是不直接在R-G difference map上面做,而是让G做引导图像,R做被滤波图像,得到tentative R,我们用tentative R - R 的difference(residual map)做插值恢复。最后作者用residual map和difference map对比一下,说明了residual map的像素梯度变化更缓和,有利于梯度插值,减少了插值误差,所以work.
之后延伸了MLRI:bilinear interpolation perform better for minimum laplacian energies. 在G和R通道上分别做sparse laplacian filter的卷积操作,其余跟RI一样。我的理解是,做完这个laplacian filter之后,residual image变得更加smooth,所以效果又提升了。
IRI: 将Iterative和RI结合,交替做G和R/B的恢复
ARI: 将MLRI和IRI加权融合,因为有时候MLRI处理不佳,有时候IRI对对于强相关区域处理不佳,所以ADAPTIVELY结合两者,再做加权平均。
Deep JDD: 将CDM和DNS一起做,它的网络没有用初始化方法,而是rearrange CFA,加入一个噪声参数层,end-to-end train,用了大量的数据,并且用目前的criterion来提取Hard-case建立了复杂库,并用这些库对网络进行fine-tune。最后得到较佳的JDD结果。
个人理解:由于没有初始化方法,所以需要大量的数据来学习CDM的初始化,网络需要学习的内容复杂(针对自己的实验,如果没有初始化效果会十分不佳),专注于hard-case的CDM可能会导致平滑区域的CDM效果不佳,其实不太有必要(我没有hard case效果还是不错,这也是它的网络在Kodak上面表现不佳的原因). 其实用CNN做JDD是十分好用的,但目前还存在的问题大概是:1.在处理CDM和DNS的流程上应该如何较佳(张老师认为DNS->CDM会更好,而目前CFA DNS效果不佳,导致其后的CDM也不太好) 2.如何将CNN-JDD做得更快更好,拟合真实噪声的分布
CNN-based的CDM,暂时我自己的网络用20层,64的kernel就已经把CDM效果做爆了,甚至比JDD要好。初始化方法是很有必要的,sequence end-to-end效果已经很好了,但这里面G channel细节信息更多error小,R/B channel细节信息较少,所以error大;如何用G CHANNEL来GUIDANCE成为问题。