图像到图像的映射(二)创建全景图

本文介绍了如何利用RANSAC算法进行图像拼接,特别是在创建全景图时去除不可靠匹配点。通过实例分析了不同场景下的拼接效果,包括室外近景、室外、室内等,展示了RANSAC在处理全局拼接时的优势,以及与APAP算法的对比。同时,文章还探讨了最大流和最小割的概念及其在图像处理中的应用。

找到两幅图像的匹配点以后采用将第二张图像叠加到第一张图像的坐标系中的方法(映射见《图像到图像的映射(一)》)
多张图的映射就是全景图。

随机采样一致性(RANSAC)算法结合去除不可靠的匹配对。

RANSAC算法流程

RANSAC 是“RANdom SAmple Consensus”(随机一致性采样)的缩写。该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC 基本的思想是,数据中包含正确的点和噪声点,合理的模型应该能够在描述正确数据点的同时摒弃噪声点。
在计算单应性变换矩阵时,只需要4对匹配点,就可以求得两幅图像之间的变换矩阵,然而,在特征点提取时,会产生大量的匹配特征点,这样对变换矩阵H的精度就会有很大的影响,由于在特征检测时特征检测算子对图像特征的误检测,一般的参数估计方法都无法将其排除,所以本文采用RANSAC算法来完成对匹配点的求精。RANSAC算法经常被应用于计算机视觉领域中,是最有效的鲁棒变换估计算法之一,其应用在计算投影变换矩阵的主要步骤为:

  1. 从两幅图像匹配点集合中随机抽取最少的匹配点集,构成待定投影变换矩阵H的初始模型参数;
  2. 将所有的集合数据依次代入(1)中所求得的模型中,计算代入点与初始点之间的距离,若小于某一阈值t,则将该点称为内点(inliers),否则称为外点(outliers),将获得的内点进行记录;
  3. 通过计算获取原始匹配集合中的所有内点(inliers),针对最大inliers集合,用它们重新计算模型参数,即可得到投影变换矩阵H的最终结果。

RANSAC 算法的优点能鲁棒的估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。
缺点是它计算参数的迭代次数没有上限,如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。
RANSAC只有一定的概率得到的可信的模型,概率与迭代次数成正比。另一个缺点是它要求设置跟问题相关的阈值,
RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。(这一部分在homography.py文件中)

class RansacModel(object):
    """ 单应性矩阵由
    http://www.scipy.org/Cookbook/RANSAC的 ransac.py计算
     """
    
    def __init__(self,debug=False):
        self.debug = debug
        
    def fit(self, data):
        """ Fit homography to four selected correspondences. """
        
        # transpose to fit H_from_points()
        data = data.T
        
        # 映射起始点
        fp = data[:3,:4]
        # 映射的目标点
        tp = data[3:,:4]
        
        # 计算单应性矩阵
        return H_from_points(fp,tp)
    
    def get_error( self, data, H):
        """ 将单应性矩阵的每个转换点的返回错误。 """
        
        data = data.T
        
        # from points
        fp = data[:3]
        # target points
        tp = data[3:]
        
        # transform fp
        fp_transformed = dot(H,fp)
        
        # normalize hom. coordinates
        fp_transformed = normalize(fp_transformed)
                
        # return error per point
        return sqrt( sum((tp-fp_transformed)**2,axis=0) )

get_error()方法对每个对应点使用该单应性矩阵的、,然后返回平方距离之和,因此RANSAC能够判定哪些点是Udine的,哪些点是错的。

当拍摄的图像是多平面的时候,更大概率出现错误匹配对。图像配准的过程中就会出现鬼影现象。

全局拼接(RANSAC)

传统的全局拼接方法首先在相邻的图像之间进行两两配准,计算局部变换矩阵,然后把这些局部变换矩阵进行递推组合,计算全局变换矩阵,然而由于测量噪声、光照条件等不确定性,相邻图像之间的两两配准存在误差,并且随着递推过程向后传播,造成图像配准结果不一致,出现拼接裂缝,且拼接处色差落差大。

场景一(室外近景 场景层次简单 光线充足)

在这里插入图片描述

场景二(室外 场景层次简单 景深落差较小)<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值