精读As-Projective-As-Possible Image Stitching with Moving DLT

文章标题As-Projective-As-Possible Image Stitching with Moving DLT,来自CVPR 2013,文章主页PDF

摘要

本文主要目的是做图像拼接,使用MovingDirect Linear Transformation (MDLT)算法,强调全局投影(Globallyprojective)特性,同时允许局部非投影(local non-projective)偏差,能够有效的避免两幅图像重合部分的重影现象,降低了对准的误差,再几何上看起来更加逼近真实,畸变更小。

投影变换(Projective warp),逼近仿射变换(As-affine-as-possible warp)与本文的逼近投影变换(As-projective-as-possible warp)进行对比,如下图。(此图未完全看懂,谁看懂了说一下)

主要算法

文章使用的是Moving DLT算法,那么首先就要搞清楚什么是DLT算法。在两幅图片和中有一对匹配的点对,原始图像(Source Image)中的点 与目标图片(Target Image)中的点 ,投影变换或者说单应矩阵(对极几何中的基础矩阵?本质矩阵?)要做的事就是得到一个映射关系

此公式中的表示的其次坐标,即 为单应矩阵。在非其次坐标中,有如下对应关系:

其中的代表单应矩阵中的第j行,并且此处映射为非线性映射。DLT算法就是计算单应矩阵 的一种基础算法。
此处文章直接给出来了一个公式,说根据公式1直接得到了,下面我稍微解释一下上面这个公式是怎么来的,from wiki
设有半正定矩阵,使得。由于,所以共有3*2/2=3个这样的

,则有:

由于的秩为2,所以的秩也为2,这样子我们设 上面矩阵的前两行,i代表第i个匹配点对。则矩阵H的目标函数:
,subject to 
重新排列后得到矩阵H。,将纵向排列得到。解为A奇异分解右侧的矩阵。如此,对其他像素根据单应矩阵做一次线性变换即可。由于是整幅图片使用一个单应矩阵,所以只适用于旋转角度不大的情况,本文对此做出改进,在计算时采用加权估值,使用

与图片中每个像素距离第i个匹配点之间的几何距离正相关。为了避免过于接近0导致误差,进行规格化操作。取

可以看出当趋近1的时候MovingDLT和DLT就是一样子了。由于像素的连续性,的变化也是连续的。未经过规格化结果如下图:

本文的基本操作

  1. SIFT提取匹配点对;
  2. RANSACwith DLT去除outliers
  3. 计算全局的单应矩阵,计算拼接之后整幅图size,使用全局单应矩阵将Source Image映射到Target Image中去
  4. 分块(cell)计算MDLT中的weight矩阵并映射。我们观察到大于40%的cell只有少数的weight值不同于。令,特征值分解:
    真正的weight矩阵区别在于那些很少的不为的地方,且均分布在对角线上。如此,就有

    其中为前面矩阵A的第i行,。用特征方程对角化上面公式中间的矩阵

    得到,由于是奇异值分解右侧的矩阵,这样就得到了h的估计。用此对每一个cell做单应矩阵的变换。这样子做法好处是每个cell的时间复杂度是

结果如下


  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
以下是一个用MATLAB实现SAR-SIFT进行SAR与可见光图像配准的示例代码: ```matlab % 读取SAR图像和可见光图像 sar_img = imread('sar_img.tif'); rgb_img = imread('rgb_img.jpg'); % 转换可见光图像为灰度图像 gray_img = rgb2gray(rgb_img); % 提取SIFT特征点 [f1, d1] = vl_sift(single(sar_img)); [f2, d2] = vl_sift(single(gray_img)); % 匹配特征点 [matches, scores] = vl_ubcmatch(d1, d2); % 筛选匹配点 numMatches = size(matches, 2); threshold = 20; if numMatches > 4 x1 = f1(1, matches(1, :)); y1 = f1(2, matches(1, :)); x2 = f2(1, matches(2, :)); y2 = f2(2, matches(2, :)); inliers = ransac([x1; y1; x2; y2], @homography, @homography_solve, @homography_evaluate, threshold); else inliers = []; end % 计算变换矩阵 matched_points1 = f1(1:2, matches(1, inliers)); matched_points2 = f2(1:2, matches(2, inliers)); transform_matrix = estimateGeometricTransform(matched_points1', matched_points2', 'projective'); % 显示配准结果 output_img = imwarp(sar_img, transform_matrix); imshowpair(output_img, gray_img, 'montage'); ``` 其中,`ransac`函数是一个RANSAC算法的实现,用于筛选匹配点中的正确匹配点;`homography`函数用于计算单应性矩阵;`homography_solve`函数用于求解单应性矩阵;`homography_evaluate`函数用于评估单应性矩阵。`estimateGeometricTransform`函数用于计算变换矩阵。最后,使用`imwarp`函数将SAR图像映射到可见光图像坐标系中,并使用`imshowpair`函数将配准结果显示在一起。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值