APAP项目主页,包括代码数据等:https://cs.adelaide.edu.au/~tjchin/apap/
大名鼎鼎的APAP。
主要思想:单一投影矩阵只适用于二维平面和旋转的情况,对于扭曲图像会出现重影和明显的视差,拼接线等不好的视觉效果。本文的关键就是得到全局投影,平滑拼接,使用的去重影算法就是MDLT,使用网格划分的方式无缝配准。
关键词:图像拼接,投影扭曲,全局投影,MDLT,网格。
DLT:direct linear transform 直接线性变换
应该是使用网格算法来进行图像拼接的开山之作。
SIFT:尺度不变特征变换(Scale-invariant feature transform)
在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量
用cv2的knn或者vlfeat十分方便,有的sift库可能因版权限制不能使用
RANSAC:Random Sample Consensus随机样本一致:有目的的得到目标数据
重点是这部分。
当两张图片不只是通过旋转相机或不在同一平面时,用投影扭曲不可避免会产生伪影。为了减少伪影现象,就是给每一个网格使用一个独立的局部单应。其实就是多加了一个权重w,之前是Ah,现在是WAh。权重由每个像素与该像素格子左上角的距离确定。
论文中的公式11:
w ∗ i = m a x ( e x p ( − ∣ ∣ x ∗ − x ∣ ∣ 2 / σ 2 ) , γ ) . (11) w_*^i = max(exp(-||x_*-x_||^2/\sigma^2),\gamma).\tag{11} w∗i=max(exp(−∣∣x∗−x∣∣2/σ2),γ).(11)
其中gamma是在0-1之间的一个很小的值,gamma趋近于1,每个网格的局部单应就变成了整体的全局单应。
首先是使用RANSAC,用DLT算出全局单应的最小解。阐述了RANSAC的重要,因为outliers的错误要比inlier错误严重的多。这是个很重要的思想:就是内点可以少也可以有错误,但是外点匹配错误必须尽可能避免。
将所有像素点作为一个cell太浪费了,因为相邻位置实际上计算的是相同的单应。分成C1*C2,网格中心作为每个网格扭曲的点。
更新SVD不用重头计算。具体的代码中详述。
比较不同的方法,也测试了不同大小的图像。
主要是一些超参数的值选择。还有RMSE定量指标。
γ ∈ [ 0.0025 , 0.025 ] \gamma \in [0.0025,0.025] γ∈[0.0025,0.025],网格控制在5050-100100之间。
明显比全局单应效果更好。