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