图像拼接——AANAP
1.简介
Adaptive As-Natural-As-Possible Image Stitching是CVPR2015的一篇文章
代码
文章pdf
文章提出了一种新的图像拼接方法,结合了几种技术,使全景图看起来更加自然。
(1)为了减轻As-Projective-As-Possible (APAP) [12]拼接中出现的透视失真,我们对与其他图像没有重叠的区域中的单应性矩阵进行了线性化处理。
(2)自动估计了在重叠区域中使用一部分对应点得到的全局相似变换。
(3)在重叠区域中平滑地插值两种变换(单应性矩阵和全局相似变换),并在非重叠区域中同样使用线性化的单应性矩阵(仿射变换)和全局相似变换进行外推。
两种拼接场(单应性矩阵/线性化单应性矩阵和全局相似变换)的平滑组合有助于实现以下优势:
(a) 完全连续和平滑的拼接场,无任何弯曲伪影
(b) 在非重叠区域使用全局相似变换改进透视效果
© 充分发挥APAP提供的先进对齐精度的优势。
2.Homography Linearization
2.1 为什么要Homography Linearization
以一维数据为例如果
x
x
x和
x
′
x_{'}
x′相匹配,使用
x
′
=
a
x
+
b
c
x
+
d
x^{\prime}=\frac{a x+b}{c x+d}
x′=cx+dax+b去估计
a
,
b
,
c
,
d
{a,b,c,d}
a,b,c,d这四个参数,那么对于非匹配点的区域的点来说,相对应的点的关系将是非线性。在二维场景中体现为严重的透视失真,可以使用线性化变换来最小化失真。
单应性矩阵(homography matrix
)是一种更一般的二维变换矩阵,它可以实现更复杂的变换,包括平移、旋转、缩放、剪切以及透视投影。但是,单应性矩阵有四个自由度
,而仿射变换只有三个自由度
,因此在某些情况下,我们希望将单应性矩阵转化为仿射变换。
当一个单应性矩阵用于变换一个图像时,图像中的平行线
可能会变成非平行线,导致透视畸变。为了解决这个问题,可以将单应性矩阵进行线性化处理,从而获得一个仿射变换矩阵。
在线性化单应性矩阵的过程中,我们通过局部线性近似
来近似描述单应性变换
。具体地说,我们在单应性矩阵的局部邻域内将其近似为一个仿射变换矩阵。这样做的目的是为了消除透视畸变,使得变换后的图像在局部区域内保持平行性和直线的相对位置关系。
关于仿射变换的详细解释:
仿射变换是二维空间中的一种线性变换,它可以保持平行线性、直线的相对位置和比例关系。仿射变换可以用一个2x2的矩阵来表示,并且还包括一个平移向量。在仿射变换中,点的位置发生了线性变换和平移,但没有发生旋转、剪切或缩放。
x ′ = a ∗ x + b ∗ y + c y ′ = d ∗ x + e ∗ y + f x' = a*x + b*y + c \\ y' = d*x + e*y + f x′=a∗x+b∗y+cy′=d∗x+e∗y+f
其中,a、b、d、e是2x2的仿射矩阵的元素,c和f是平移向量的分量。
仿射变换可以实现一些基本的几何变换,例如平移(translation)、缩放(scaling)、旋转(rotation)和镜像(reflection)。
具体来说:
平移:通过调整平移向量 c 和 f 可以将整个图像沿着 x 和 y 轴方向移动。
缩放:通过调整矩阵元素 a 和 e 可以对图像进行水平和垂直方向上的缩放。
旋转:通过调整矩阵元素 a、b、d 和 e 可以实现图像的旋转。
镜像:通过调整矩阵元素 a 或 e 可以实现图像的水平或垂直镜像。
在
单应性变换
中,一个点的坐标(x, y)在变换后的坐标(x’, y’)之间存在关系:
[ x ′ y ′ 1 ] = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ x y 1 ] \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ 1 \end{array}\right]=\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] x′y′1 = h11h21h31h12h22h32h13h23h33 xy1
单应性矩阵H
具有8个自由参数
(因为乘以一个非零常数仍然可以得到等效的变换),并且可以用于描述透视变换。
在仿射变换中
,一个点的坐标(x, y)在变换后的坐标(x’, y’)之间存在关系: [ x ′ y ′ 1 ] = [ a 11 a 12 a 13 a 21 a 22 a 23 0 0 1 ] [ x y 1 ] \left[\begin{array}{c} x^{\prime} \\ y^{\prime} \\ 1 \end{array}\right]=\left[\begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ 1 \end{array}\right] x′y′1 = a11a210a12a220a13a231 xy1
仿射矩阵
具有6个自由参数
,可以用来进行平移、旋转、缩放和剪切等线性变换。在图像处理中,仿射变换常用于图像的平移、旋转和缩放等操作。
2.2 如何线性化
一般来说,线性化通过在某参考点泰勒展开实现。假设现在要对任意点q
处的单应性进行线性化,先要在
q
q
q邻域选取一个anchor point
p
p
p,在
p
p
p点进行泰勒展开:
h
(
q
)
=
h
(
p
)
+
J
h
(
p
)
(
q
−
p
)
+
o
(
∥
q
−
p
∥
)
\mathbf{h}(\mathbf{q})=\mathbf{h}(\mathbf{p})+\mathbf{J}_{\mathbf{h}}(\mathbf{p})(\mathbf{q}-\mathbf{p})+o(\|\mathbf{q}-\mathbf{p}\|)
h(q)=h(p)+Jh(p)(q−p)+o(∥q−p∥)
其中
h
h
h是9×1(单应性矩阵的展开)。
J
h
(
p
)
\mathbf{J}_{\mathbf{h}}(\mathbf{p})
Jh(p)是h的雅可比矩阵。
anchor point p 通常位于图像的非重叠区域边界附近,这样可以在非重叠区域中实现较好的透视畸变校正。并且最好距离q点较近。
在本文中,作者在target图的边界均匀地取80个点作为anchor point。
难以确认应该在哪个anchor point进行线性化,所以采用线性加权组合(其实就是对所有有可能的点各自给一个权重):
h
L
(
q
)
=
∑
i
=
1
R
α
i
(
h
(
p
i
)
+
J
h
(
p
i
)
(
q
−
p
i
)
)
\mathbf{h}^L(\mathbf{q})=\sum_{i=1}^R \alpha_i\left(\mathbf{h}\left(\mathbf{p}_i\right)+\mathbf{J}_{\mathbf{h}}\left(\mathbf{p}_i\right)\left(\mathbf{q}-\mathbf{p}_i\right)\right)
hL(q)=i=1∑Rαi(h(pi)+Jh(pi)(q−pi))
其中
α
i
\alpha_i
αi是权重,与PAPA
算法类似,有Gaussian weighting
形式:
exp
(
−
∥
q
−
p
i
∥
2
/
σ
2
)
\exp \left(-\left\|\mathbf{q}-\mathbf{p}_i\right\|^2 / \sigma^2\right)
exp(−∥q−pi∥2/σ2)
以及Student’s t-weighting
形式:
α
i
=
(
1
+
∥
q
−
p
i
∥
2
ν
)
−
(
ν
+
1
)
2
\alpha_i=\left(1+\frac{\left\|\mathbf{q}-\mathbf{p}_i\right\|^2}{\nu}\right)^{\frac{-(\nu+1)}{2}}
αi=(1+ν∥q−pi∥2)2−(ν+1)
因为Gaussian weighting分布的尾部(就是距离匹配点比较远的点,或者说图像的边缘点)衰减的特别快(因为是指数函数嘛),所以APAP 的作者,为了避免许多较远的点不赋予权重的情况,人工设置了一个阈值$\gamma$=0.1
,当高斯函数小于阈值时,就将权重设置为
γ
\gamma
γ。
本文的作者采用的是Student’s t-weighting形式,这样就不用人工设置了阈值参数,较少地依赖了参数地选择。
3. Global Similarity Transformation
全局相似性变换和仿射变换类似,也是刚性变换。全局相似变换能够很好地近似目标图像和参考图像之间的相机运动,估计得到的相似性变换可以用来补偿相机运动。同时也可以削弱透射投影引起的一些畸变。
SPHP
就是使用全局单应性变换
来唯一确定全局相似性变换
,但这可能无法很好地近似相机运动。
所以本文采取的确定全局相似性变换
的方法的具体步骤如下:
在获得特征点匹配后,首先设置阈值 ε g \varepsilon_g εg 采用RANSAC去除异常值。
while 内点数>η
1.设置阈值 ε l \varepsilon_l εl 采用RANSAC,获得更少性能更优越的内点( ε g > ε l \varepsilon_g>\varepsilon_l εg>εl)
2. 每组匹配的内点被用来计算一个单独的相似变换。获取相似变换对应的旋转角。存放在R中
选择R中最小的旋转角对应的相似变换即为所求的全局相似变换
图中的绿色和黄色圆圈属于两组不同的点对应。红圈不属于任何组。在本例中,黄点组以最小的旋转角度生成最优的全局相似度变换。
4.利用全局相似变换优化整张target图
4.1组合优化
在重叠区域,分别给予透视投影
和全局相似变换
不同权重,组合优化。
在非重叠区域,给与仿射变换
和全局相似变换
不同权重,组合优化。公式如下:
H
^
i
(
t
)
=
μ
h
H
i
(
t
)
+
μ
s
S
\hat{\mathbf{H}}_i^{(t)}=\mu_h \mathbf{H}_i^{(t)}+\mu_s \mathbf{S}
H^i(t)=μhHi(t)+μsS
H
i
(
t
)
\mathbf{H}_i^{(t)}
Hi(t)代表透视投影or仿射变换,S代表全局透视投影。
4.2权重参数求取
μ
h
(
i
)
=
⟨
κ
m
p
(
i
)
→
,
κ
m
κ
M
→
⟩
/
∣
κ
m
κ
M
→
∣
\mu_h(i)=\left\langle\overrightarrow{\kappa_m p(i)}, \overrightarrow{\kappa_m \kappa_M}\right\rangle /\left|\overrightarrow{\kappa_m \kappa_M}\right|
μh(i)=⟨κmp(i),κmκM⟩/
κmκM
μ
s
(
i
)
=
1
−
μ
h
(
i
)
\mu_s(i)=1-\mu_h(i)
μs(i)=1−μh(i)
设target投影到参考图像上的图为wtarget,其中,
κ
κ
κ为wtarget在
o
r
o
t
→
\overrightarrow{o_r o_t}
orot方向上的投影点。
O
r
O_r
Or和
O
t
O_t
Ot是参考图像和wtarget的中心点。
k
m
k_m
km和
k
M
k_M
kM分别是使得
⟨
o
r
p
(
i
)
→
,
o
r
O
t
→
⟩
\left\langle\overrightarrow{o_r p(i)}, \overrightarrow{o_r O_t}\right\rangle
⟨orp(i),orOt⟩取最小和最大的点。
5.参考图像的补偿
在将目标图像的变换(warp)更新为全局相似性变换
时,可能会导致参考图像
与目标图像之间之前已经对齐的重叠区域
出现错位。因此,需要通过适当地从目标图像传播变化到参考图像来补偿这些变化(通俗点就是,你之前使用的APAP的对齐方法,但是叠加了全局相似性以后,可能导致重叠区域对齐发生偏差,所以需要适当地弯曲参考图像以补偿这个偏差):
H
^
i
(
r
)
=
H
^
i
(
t
)
(
H
i
(
t
)
)
−
1
\hat{\mathbf{H}}_i^{(r)}=\hat{\mathbf{H}}_i^{(t)}\left(\mathbf{H}_i^{(t)}\right)^{-1}
H^i(r)=H^i(t)(Hi(t))−1
(b)中为APAP 采用Gaussian权重(c)为APAP采用Student’s权重,并且对非重叠区域进行线性化=变换(d)为本文提出的重叠区域APAP对齐+非重叠区域线性变换+全局相似变换(可以看出对参考图像进行了些许校正)
6。总结
SPHP利用约束项对PAPA的非重叠区域实现仿射变换而非单应变换,有效的抑制了透视投影的畸变。
AANAP是在PAPA的基础上进行改进的,也是对非重叠区域的单应矩阵进行线性化,并且在此基础上,在整张图施加全局线性变换与原本的单应变换\仿射变换进行加权组合优化。