在深度学习大火的今天,熟不知以前的图像处理方法大都还是使用能量泛函优化的方法,即使是今天依然有着深度学习不可取代的魅力。要想学习,基础的优化方法必不可少。
先说说传统的图像处理方法包括图像超分,图像去模糊,图像去噪等,现在一些有意思的应用比如去雨、去雾、去霾、去云等等。在深度学习之前解决这类问题最流行的方法是基于MAP的框架的优化方法。先说说,如何求解这类数据项加先验项的问题。首先说说对于L2范数的先验项如何求解。
问题
求解
argminx∥Ax−b∥22+λ∥x∥22\arg \min _ { x } \| A x - b \| _ { 2 } ^ { 2 } + \lambda \| x \| _ { 2 } ^ { 2 }argminx∥Ax−b∥22+λ∥x∥22.
解析解求解方法
上述的问题凸且连续可导的问题。因此可以通过求导的方法来求解,这也是一种求取解析解的方式。求解方法如下:
令E=(Ax−y)T(Ax−y)+λxTxE = ( A x - y ) ^ { T } ( A x - y ) + \lambda x ^ { T } xE=(Ax−y)T(Ax−y)+λxTx, 经展开
E=xTATAx−xTATY−YTAx−YTY+λxTxE = x ^ { T } A ^ { T } A x - x ^ { T } A ^ { T } Y - Y ^ { T } A x - Y ^ { T } Y + \lambda x ^ { T } xE=xTATAx−xTATY−YTAx−YTY+λxTx.
求导:
∂E∂x=2ATAx−ATy+2λx=0\frac { \partial E } { \partial x } = 2 A ^ { T } A x - A ^ { T } y + 2 \lambda x = 0∂x∂E=2ATAx−ATy+2λx=0,
求解上式得到,X=(ATA+λI)−1ATyX = \left( A ^ { T } A + \lambda I \right) ^ { - 1 } A ^ { T } yX=(ATA+λI)−1ATy.
如果A是一个对称矩阵,比如对应于模糊核k的矩阵,上述可以使用FFT进行加速
X=F−1(F(k)‾⋅F(y)F(k)‾F(k)+λ)X = F ^ { - 1 } \left( \frac { \overline { F ( k ) } \cdot F ( y ) } { \overline { F ( k ) } F ( k ) + \lambda } \right)X=F−1(F(k)F(k)+λF(k)⋅F(y)).
上述可以简单地使用MATLAB实现。
迭代解求解方法
迭代解求解的方法也很多,比如梯度下降法,牛顿法等,这里不再赘述。在图像处理中,更常用的是共轭梯度法。
共轭梯度法是一种使用迭代的解决最小二乘问题的算法。最小二乘问题如下:
Ax=bA x = bAx=b,
其中A是一个 n×nn \times nn×n 维的对称正定矩阵。上述问题等价于
minΦ(x)=12xTAxT−bTx\min \Phi ( x ) = \frac { 1 } { 2 } x ^ { T } A x ^ { T } - b ^ { T } xminΦ(x)=21xTAxT−bTx,
对上式进行求导得
∇Φ(x)=Ax−b=r(x)\nabla \Phi ( x ) = A x - b = r ( x )∇Φ(x)=Ax−b=r(x),
其中,r是残差。
当存在非零向量组 {p1,p2,……,pl}\left\{ p _ { 1 } , p _ { 2 } , \ldots \dots , p _ { l } \right\}{p1,p2,……,pl} 和正定的对称矩阵A满足
piTApj=0;p _ { i } ^ { T } A p _ { j } = 0 ;piTApj=0; for all i≠ji \neq ji̸=j
时,说明非零向量组 {p1,p2,……,pl}\left\{ p _ { 1 } , p _ { 2 } , \ldots \dots , p _ { l } \right\}{p1,p2,……,pl} 共轭
共轭梯度法的思想是,使解沿着共轭梯度的方向进行迭代减小,最终达到最优解。
共轭梯度的算法流程如下:
初始化:r0←Ax0−b,p0←−r0,k←0r _ { 0 } \leftarrow A x _ { 0 } - b , p _ { 0 } \leftarrow - r _ { 0 } , k \leftarrow 0r0←Ax0−b,p0←−r0,k←0
迭代: while rk≠0r _ { k } \neq 0rk̸=0
αk←rkTrkpkTApk\alpha _ { k } \leftarrow \frac { r _ { k } ^ { T } r _ { k } } { p _ { k } ^ { T } A p _ { k } }αk←pkTApkrkTrk,
xk+1←xk+αkpkx _ { k + 1 } \leftarrow x _ { k } + \alpha _ { k } p _ { k }xk+1←xk+αkpk,
rk+1←rk+αkApkr _ { k + 1 } \leftarrow r _ { k } + \alpha _ { k } A p _ { k }rk+1←rk+αkApk,
βk+1←rk+1Trk+1rkTrk\beta _ { k + 1 } \leftarrow \frac { r _ { k + 1 } ^ { T } r _ { k + 1 } } { r _ { k } ^ { T } r _ { k } }βk+1←rkTrkrk+1Trk+1,
pk+1←−rk+1+βk+1pkp _ { k + 1 } \leftarrow - r _ { k + 1 } + \beta _ { k + 1 } p _ { k }pk+1←−rk+1+βk+1pk,
k=k+1k = k + 1k=k+1.
end (while)
输出:x。
对于提到的问题,带有二范数的正则化项。对其进行求导
∂E∂x=2ATAx−ATy+2λx=0\frac { \partial E } { \partial x } = 2 A ^ { T } A x - A ^ { T } y + 2 \lambda x = 0∂x∂E=2ATAx−ATy+2λx=0
将上式改写为
∂E∂x=(2ATA+2λ)x−ATy=0\frac { \partial E } { \partial x } = \left( 2 A ^ { T } A + 2 \lambda \right) x - A ^ { T } y = 0∂x∂E=(2ATA+2λ)x−ATy=0
这就是一个最小二乘问题,可以使用上述的共轭梯度法进行求解,避免了对矩阵进行求逆的操作。注:这里的矩阵A是模糊核的BCCB,因此满足对称正定矩阵的要求,因此可以采用共轭梯度进行求解。
OK,图像处理中解决这类问题常用的两种方法完毕。如果有什么错误的地方请大家不宁赐教。