ISP图像处理算法之Demosaic
ISP RAW图像处理算法之Demosaic ---- Zhang-Wu Directional LMMSE Image Demosaicking
- 前言
- ZhangWu Demosaic
- 算法步骤
- Directional Estimates方向估计/初步滤波
- Fusion of the Directional Interpolations 方向差值融合
- Obtaining the Red and Blue Channels 获取红/蓝通道
- LMMSE
- LMMSE Denoising
前言
最近在看ISP算法,被分配到了任务中有一项Demosaic去马赛克算法,用于RAW图转RGB。
多方查询后,效果较为理想的是Adam-Hamilton梯度自适应插值和一种基于LMMSE的方向线性最小均方误差方法—Zhang-Wu Directional LMMSE Image Demosaicking,这是目前看来效果除深度学习以外最好的算法了,先做了解。
Adam-Hamilton梯度自适应插值去马赛克方法和双线性差值法,这两种方法较为简单,但是在纹理密集的地方效果不理想,后续会更新这两种算法的去马赛克步骤。文末会给出参考论文地址。
ZhangWu Demosaic
利用通道色差近似的规则对色素差值进行了LMMSE滤波与噪声估计,提高的算法对纹理密集区域的处理效果。
算法步骤
这个算法核心应该是体现在对估计差值的处理上,算法基于差异信号是平滑这一经验基础上。算法主要分为以下几步:
Directional Estimates方向估计/初步滤波
该步骤主要是建立通道色差表。
算法使用线性插值和二阶拉普拉斯插值对颜色进行初步估计,以红绿像素行为例(蓝绿像素行同理):
- 在已知红色像素值的的情况下需要估计绿色像素 G ^ n \hat {G}_n G^n。
G ^ n = 1 2 ( G n − 1 + G n + 1 ) − 1 4 ( R n − 2 − 2 R n + R n + 2 ) \hat {G}_n = \frac{1}{2}(G_{n-1}+G_{n+1}) - \frac{1}{4}({R_{n-2}-2R_{n}+R_{n+2}}) G^n=21(Gn−1+Gn+1)−41(Rn−2−2Rn+Rn+2) - 在已知绿色像素值的的情况下需要估计红色像素 R ^ n \hat {R}_n R^n。
R ^ n = 1 2 ( R n − 1 + R n + 1 ) − 1 4 ( G n − 2 − 2 G n + G n + 2 ) \hat {R}_n = \frac{1}{2}(R_{n-1}+R_{n+1}) - \frac{1}{4}({G_{n-2}-2G_{n}+G_{n+2}}) R^n=21(Rn−1+Rn+1)−41(Gn−2−2Gn+Gn+2)
可以看到 − 1 4 ( R n − 2 − 2 R n + R n + 2 ) - \frac{1}{4}({R_{n-2}-2R_{n}+R_{n+2}}) −41(Rn−2−2Rn+Rn+2) 的部分是使用了一维二阶拉普拉斯插值空域核心 [ 1 , − 2 , 1 ] [1,-2,1] [1,−2,1] 进行插值对绿色像素估计值进行了协助计算。然后利用估算值建立像素通道差值,计算方法如下:
- 对已知红色像素的像素点进行计算时,当前像素点水平GR通道差值为:
Φ ^ g , r h = G ^ − R n \hat{Φ}_{g,r}^h = \hat{G} - R_n Φ^g,rh=G^−Rn - 对已知绿色像素的像素点进行计算时,当前像素点水平GR通道差值为:
Φ ^ g , r h = G − R ^ n \hat{Φ}_{g,r}^h = G - \hat R_n Φ^g,rh=G−R^n
其中 Φ ^ g , r h \hat{Φ}_{g,r}^h Φ^g,rh 表示在这个像素点在水平方向上插值计算出的R与G的差,对垂直方向重复上述步骤同样可以得到一个垂直方向上的差值信号 Φ ^ g , r v \hat{Φ}_{g,r}^v Φ^g,rv。
对此可以构建出差值表,对于每个像素的位置都可以取得 Φ ^ v , Φ ^ h \hat{Φ}^v, \hat{Φ}^h Φ^v,Φ^h 随后使用近似高斯滤波器分别对其进行滤波,一维空域核为 [ 4 , 9 , 15 , 23 , 26 , 23 , 15 , 9 , 4 ] [4,9,15,23,26,23,15,9,4] [4,9,15,23,26,23,15,9,4],滤波器响应为:
h ( z ) = 26 128 + 23 128 ( z + z − 1 ) + 15 128 ( z 2 + z − 2 ) + 9 128 ( z 3 + z − 3 ) + 4 128 ( z 4 + z − 4 ) h(z) = \frac{26}{128} + \frac{23}{128}(z+z^{-1}) + \frac{15}{128}(z^2+z^{-2}) + \frac{9}{128}(z^3+z^{-3}) + \frac{4}{128}(z^4+z^{-4}) h(z)=12826+12823(z+z−1)+12815(z2+z−2)+1289(z3+z−3)+1284(z4+z−4)
Fusion of the Directional Interpolations 方向差值融合
在前一小节中计算得到的水平与垂直方向差将在这一小节中融合用作恢复像素。作者利用LMMSE选择了参数最小化估计的均方误差用作水平与垂直方向估计值的融合。
w = ( 1 − λ ) h + λ v w = (1-λ)h + λv w=(1−λ)h+λv
- w w w 为最终融合值 Φ g , r Φ_{g,r} Φg,r 或 Φ g , b Φ_{g,b} Φg,b
- h h h 为水平估计值 Φ ^ g , r h \hat{Φ}_{g,r}^h Φ^g,rh 或 Φ ^ g , b h \hat{Φ}_{g,b}^h Φ^g,bh
- v v v 为垂直估计值 Φ ^ g , r v \hat{Φ}_{g,r}^v Φ^g,rv 或 Φ ^ g , b v \hat{Φ}_{g,b}^v Φ^g,bv
- λ λ λ 为经过估计的最优参数,其计算方式如下:
λ = σ h 2 σ h 2 + σ v 2 λ = \frac{σ^2_h}{σ^2_h + σ^2_v} λ=σh2+σv2σh2
至此,我们就可以通过融合得到的差值恢复出所有像素点的G通道值了。
G n , r = Φ g , r + R n G n , b = Φ g , b + B n G_{n,r} = {Φ}_{g,r} + R_n \\ G_{n,b} = {Φ}_{g,b} + B_n Gn,r=Φg,r+RnGn,b=Φg,b+Bn
Obtaining the Red and Blue Channels 获取红/蓝通道
经过前一步的操作后,我们恢复了所有的绿色像素值。因此目前像素整列上存在两种情况:
第一种,已知蓝色或红色像素值,并且已经恢复出了绿色像素值。对于该像素点,假如是蓝色,我们需要计算周围对角线上四个已知红色点像素值的GR差值的平均值来对该通道进行插值。
Φ g , r ( i , j ) = 1 4 ( Φ g , r ( i − 1 , j − 1 ) + Φ g , r ( i + 1 , j − 1 ) + Φ g , r ( i − 1 , j + 1 ) + Φ g , r ( i + 1 , j + 1 ) ) {Φ}_{g,r}(i,j) = \frac{1}{4}({Φ}_{g,r}(i-1,j-1) + {Φ}_{g,r}(i+1,j-1) + {Φ}_{g,r}(i-1,j+1) + {Φ}_{g,r}(i+1,j+1)) Φg,r(i,j)=41(Φg,r(i−1,j−1)+Φg,r(i+1,j−1)+Φg,r(i−1,j+1)+Φg,r(i+1,j+1))
对于红色通道,计算过程也类似。
第二种,只有绿色像素点已知,这种情况下需要在第一种情况计算完毕之后,利用该点上下左右四个点来插值。
Φ g , r ( i , j ) = 1 4 ( Φ g , r ( i − 1 , j ) + Φ g , r ( i + 1 , j ) + Φ g , r ( i , j + 1 ) + Φ g , r ( i , j − 1 ) ) {Φ}_{g,r}(i,j) = \frac{1}{4}({Φ}_{g,r}(i-1,j) + {Φ}_{g,r}(i+1,j) + {Φ}_{g,r}(i,j+1) + {Φ}_{g,r}(i,j-1)) Φg,r(i,j)=41(Φg,r(i−1,j)+Φg,r(i+1,j)+Φg,r(i,j+1)+Φg,r(i,j−1))
最后,
R = G − Φ g , r R = G - {Φ}_{g,r} R=G−Φg,r
由此我们就恢复出了所有的像素信息。
LMMSE
LMMSE(Linear Minimum Mean Square Error,线性最小均方误差估计) 是一种基于统计的最优线性估计方法,旨在通过线性模型最小化估计误差的均方值(MMSE)。
X ^ L M M S E = a ( Y − E [ Y ] ) + b (1) \hat{X}_{LMMSE} = a(Y - E[Y]) + b \tag{1} X^LMMSE=a(Y−E[Y])+b(1)
其中为了得到最优系数使均方误差最小化,要对a,b进行偏微分,这里直接给出结果,对过程有兴趣的可以下载论文查看或自行查询资料。
a = C o v ( X , Y ) V a r ( Y ) a = \frac{Cov(X,Y)}{Var(Y)} a=Var(Y)Cov(X,Y)
b = E [ X ] b = E[X] b=E[X]
- E [ X ] E[X] E[X]是期望值
- C o v ( X , Y ) Cov(X,Y) Cov(X,Y)是信号与观测的协方差
- V a r ( Y ) Var(Y) Var(Y)是观测值的方差
LMMSE Denoising
基于上文最小均方误差估计的思想,论文作者提出了一种基于LMMSE去噪的融合模型。
首先,先对问题进行建模,作者认为自然图像的颜色通道具有很强的相关性,自然场景中的光照(如阳光)和物体表面的反射通常是连续且平滑的。例如,同一物体表面的相邻区域在光照下会表现出相似的颜色变化,导致R、G、B通道的强度变化趋势一致。因此在一块区域内通道差值通常较为恒定。基于这一思想,在建立起水平与垂直差值表后,我们假设对于某个像素:
h h h 是水平方向的估计,误差为 ϵ h ϵ_h ϵh, 方差 σ h 2 σ^2_h σh2
v v v 是垂直方向的估计,误差为 ϵ v ϵ_v ϵv, 方差 σ v 2 σ^2_v σv2
真实信号是 u u u ,满足:
h = u + ϵ h v = u + ϵ v h = u + ϵ_h \\ v = u + ϵ_v h=u+ϵhv=u+ϵv
那么,面对这两个估计值,我们需要找到一个合理的权重,将这两个估值融合在一起以后使其最接近真实值。
我们假设权重是 λ λ λ, 那么有很容易得出
w = ( 1 − λ ) h + λ v w = (1-λ)h + λv w=(1−λ)h+λv
w w w是融合后的值,那么我们的目标就变成找到权重 λ λ λ使得 w w w的均方误差(MSE)最小。这一可以使估计值最接近真实值。计算过程如下:
w − u = ( 1 − λ ) ϵ h + λ ϵ v ( w − u ) 2 = ( ( 1 − λ ) ϵ h + λ ϵ v ) 2 M S E = E [ ( w − u ) 2 ] = E [ ( ( 1 − λ ) ϵ h + λ ϵ v ) 2 ] = 0 ∂ M S E ∂ λ = E [ [ 2 ( 1 − λ ) ϵ h + 2 λ ϵ v ] ( ϵ v − ϵ h ) ] = 0 ∂ M S E ∂ λ = 2 E [ − ( 1 − λ ) ϵ h 2 + λ ϵ v 2 + ( 1 − 2 λ ) ϵ h ϵ v ] = 0 = > λ = ϵ h 2 ϵ h 2 + ϵ v 2 w-u = (1-λ)ϵ_h + λϵ_v \\ (w-u)^2 = ((1-λ)ϵ_h + λϵ_v)^2\\ MSE = E[(w-u)^2] = E[((1-λ)ϵ_h + λϵ_v)^2] = 0 \\ \frac{\partial MSE}{\partial λ} = E[[2(1-\lambda)\epsilon_h+2\lambda\epsilon_v](\epsilon_v-\epsilon_h)] = 0\\ \frac{\partial MSE}{\partial λ} = 2E[-(1-\lambda)\epsilon^2_h+\lambda\epsilon^2_v+(1-2\lambda)\epsilon_h\epsilon_v] = 0 => \lambda = \frac{\epsilon^2_h}{\epsilon^2_h+\epsilon^2_v} w−u=(1−λ)ϵh+λϵv(w−u)2=((1−λ)ϵh+λϵv)2MSE=E[(w−u)2]=E[((1−λ)ϵh+λϵv)2]=0∂λ∂MSE=E[[2(1−λ)ϵh+2λϵv](ϵv−ϵh)]=0∂λ∂MSE=2E[−(1−λ)ϵh2+λϵv2+(1−2λ)ϵhϵv]=0=>λ=ϵh2+ϵv2ϵh2
论文地址Zhang-Wu Directional LMMSE Image Demosaicking