zoukankan      html  css  js  c++  java
  • 理解图像配准中的LMeds、M-estimators与RANSAC算法

               图像配准对于运动平台(无人机,移动机器人)上的视觉处理有着极其重要的作用。配准算法的第一步通常是找到两幅图像中一一对应的匹配点对(特征点提取、描述、点对匹配),然后通过匹配点对求取变换矩阵。在图像特征点匹配之KD-Tree一文中讲了配准中第一步中的点对匹配方法,本文将集中讨论配准第二步。在获得匹配点对后,我们需要从中选取一定的匹配正确的点对计算变换矩阵,对于透射变换,需要选取4组点对,对于仿射变换,需要选取3组。但现在的问题是,我们获得的匹配点对中不能保证所有的匹配都是正确的,如何从中选取正确的匹配点对来计算变换矩阵,这就需要利用下面要讲到的匹配对提纯的问题。匹配对提纯算法可分为两类:比值提纯法与一致提纯法。比值提纯法就是在图像特征点匹配之KD-Tree一文中进行最近邻查询的时候,也对次近邻的距离进行查询,最后保留最近邻>=次近邻*THR(一般取THR=0.49)的匹配点对来进行提纯,不予细述。。下面将对一致提纯法进行详述,主要介绍常用的最小中值法(LMedS)、M估计(M-estimators)与随机采样一致算法(RANSAC)。

    最小中值法(LMedS)


    LMedS的做法很简单,就是从样本中随机抽出N个样本子集,使用最大似然(通常是最小二乘)对每个子集计算模型参数和该模型的偏差,记录该模型参数及子集中所有样本中偏差居中的那个样本的偏差(即Med偏差),最后选取N个样本子集中Med偏差最小的所对应的模型参数作为我们要估计的模型参数。

    最小中值法可用数学表达简练的表达为:

    θ=argθminmediNri(xi,θ)θ=argθminmedi∈Nri(xi,θ)

    θθ为拟合模型参数,ri(xi,θ)ri(xi,θ)是模型第i个点的残留误差,N是我们随机抽出的样本子集,medmed为中值操作。

    M估计(M-estimators)


    对于含有外点的数据,如果对所有样本点使用一样的权重,在拟合模型时外点对模型会有较大的干扰,由此为出发点想到,如果降低外点的权重,则可以降低外点对模型的影响,这也就是M估计的一个思想。但问题是我们怎么知道哪些是外点呢,M估计中将与所估计模型偏差大的点视为外点,降低与模型偏差越大的点的权重。

    一个M估计通过最小化下面的表达式来估计参数:

    θ=argθiρ(ri(xi,θ);σ)θ=argθ∑iρ(ri(xi,θ);σ)

    一般的为了降低偏差大的点的影响,ρ(μ,σ)ρ(μ,σ)函数随着μμ的增加变平。常用的选择是:

    ρ(μ,σ)=μ2σ2+μ2ρ(μ,σ)=μ2σ2+μ2

    σσ参数是控制函数变平点的变量,下图是当σ2=0.1,1,10σ2=0.1,1,10时画的rho(x,σ)=x2σ2+x2rho(x,σ)=x2σ2+x2

    通过引入ρρ,M估计可以保证外点作用被衰减的程度要比它们产生平方误差的程度要高。

    从M估计的数学表达可以看出,问题是非线性的,必须迭代求解,下面是具体求解算法:

    算法1 用M估计拟合概率模型参数

    对于ss从1到kk

      均匀随机抽取rr个不同点组成样本子集

      用最大似然(通常是最小二乘)对抽取的点集进行拟合获得θ0sθs0

      用θn1sθsn−1估计σn1sσsn−1,一个流行的估计式是:σn1=1.4826mediani|rn1i;θn1|σn−1=1.4826mediani|rin−1;θn−1|

      直到收敛(|θnsθn1s||θsn−θsn−1|非常小)

        用最小化方法通过θn1s,σn1sθsn−1,σsn−1得到θnsθsn

        计算σnsσsn

      End

    End

    使用残差的中值作为准则获得这个集合的最好拟合,用最好拟合的参数作为模型的参数

    随机采样一致算法(RANSAC)


    M估计计算复杂性较高。另外一种最常用的方法是随机采样一致算法(RANSAC,Random Sample Consensus)。它的基本思路是随机选择一个小的数据点子集,然后对其进行拟合,查看有多少其他点匹配到拟合的模型上,迭代这个过程直至有较大的概率找到我们想要拟合的模型。

    我们先看下RANSAC的算法流程,然后对其中的步骤进行详细阐述。

    算法2 用随机采样一致(RANSAC)拟合概率模型参数

    确定:

      nn——所需要的最少点数

      kk——需要的迭代次数

      dd——判断一个点是否拟合的很好的阈值,也称内外点距离阈值

      tt——判断一个模型是否拟合的很好所需要的邻近点数目,也称一致性集合大小阈值

    直到kk次迭代完成

      从数据中均匀的采样nn个点

      对这nn个点进行模型拟合

      对于采样外的每个点

        用dd比较点到拟合模型的距离,如果距离小于dd,则认为点是靠近的

      End

      如果有tt个或者更多的点靠近模型,则认为该拟合是个好的拟合,重新用这些点和靠近的点拟合模型。

    End

    使用拟合误差最小的所对应的参数作为该模型的估计参数。

    RANSAC的难点是n,k,d,tn,k,d,t这几个参数的确定,下面就怎么确定参数做简单的讨论。

    一、最少点数nn的确定

    相对比较容易,根据要拟合的模型确定。例,如果拟合一天直线,最少需要两个点;对于图片配准,拟合透射变换矩阵最少需要4组点对,拟合仿射变换,最少需要3组点对。

    二、迭代次数kk的确定

    ww为数据是真实数学模型内点的概率,则一次估计中所有nn个点(确定模型参数的最小点数)都为内点的概率为wnwn。我们需要保证kk次迭代中至少一次估计中所有数据点都是内点的概率pp较大,则kk需要满足:

    1p=(1wn)kk=log(1p)log(1wn)1−p=(1−wn)k⇒k=log(1−p)log(1−wn)

    其中pp取一个较大的值。

    三、内外点距离阈值dd的确定

    这个阈值用来判断数据点是内点或是外点,没有一个统一的方法,只能通过实验得到。

    四、一致性集合大小阈值tt的确定

    令数据点集中外点的概率为yy,我们需要选择tt个点使得ytyt很小(比如小于0.05)。yy通常是无法精确的估计,如果真实模型中内点占优势,经过随机采样后yy一般比(1w)(1−w)要小,即可由y(1w)y≤(1−w)。

    确定这些参数后就可以用RANSAC算法估计模型参数了。

  • 相关阅读:
    等级,
    JS高阶---回调函数
    JS高阶---函数
    JS高阶---对象
    JS高阶---数据、变量、内存
    JS高阶---简介+数据类型
    JS里==和===区别
    vue中assets和static的区别
    vue2.0 实现导航守卫(路由守卫)---登录验证
    exports与module.exports,export与export default 之间的关系和区别
  • 原文地址:https://www.cnblogs.com/wl-v/p/6209780.html
Copyright © 2011-2022 走看看