`
javasogo
  • 浏览: 1815828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

RANSAC算法及其消除错配应用

阅读更多

RANSAC算法及其消除错配应用

一、RANSAC算法介绍
模型参数估计方法,如经典的最小二乘法,可以根据某种给定的目标方程估计并优化模型参数以使其最大程度适应于所有给定的数据集。这些方法都没有包含检测并排除异常数据的方法,他们都基于平滑假设:忽略给定的数据集的大小,总有足够多的准确数据值来消除异常数据的影响。但是在很多实际情况下,平滑假设无法成立,数据中可能包含无法得到补偿的严重错误数据,这时候此类模型参数估计方法将无法使用。
例如如下情况:给定7个点(如图1所示),如何拟出一条最合适的直线段,使得所有的正确点到直线的距离不超过0.8。此时显然无法使用最小二乘法等方法进行拟合。

ransac0
图1

RANSAC为RANdom SAmple Consensus的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由Fischler和Bolles最先提出[1]。
RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(Outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。
RANSAC基本思想描述如下:
①考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>n,从P中随机抽取包含n个样本的P的子集S初始化模型M;
②余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。S*认为是内点集,它们构成S的一致集(Consensus Set);
③若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。
④在完成一定的抽样次数后,若为找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。
由上可知存在两个可能的算法优化策略。①如果在选取子集S时可以根据某些已知的样本特性等采用特定的选取方案或有约束的随机选取来代替原来的完全随机选取;②当通过一致集S*计算出模型M*后,可以将P中所有与模型M*的误差小于t的样本加入S*,然后重新计算M*。
RANSAC算法包括了3个输入的参数:①判断样本是否满足模型的误差容忍度t。t可以看作为对内点噪声均方差的假设,对于不同的输入数据需要采用人工干预的方式预设合适的门限,且该参数对RANSAC性能有很大的影响;②随机抽取样本集S的次数。该参数直接影响SC中样本参与模型参数的检验次数,从而影响算法的效率,因为大部分随机抽样都受到外点的影响;③表征得到正确模型时,一致集S*的大小N。为了确保得到表征数据集P的正确模型,一般要求一致集足够大;另外,足够多的一致样本使得重新估计的模型参数更精确。
RANSAC算法经常用于计算机视觉中。例如,在立体视觉领域中同时解决一对相机的匹配点问题及基本矩阵的计算。

二、RANSAC在消除错配中的应用
在特征点配对中,模型即为从一个平面上的特征点到另外一平面上的特征点的射影关系,反应为射影矩阵H。H是一个包含8个自由度的3×3矩阵,它最少可以由两平面中的4对匹配点计算出,但同一平面上的3个点必须不共面。
图2、图3为RANSAC消除错配实验结果,两幅图像中的匹配点是由人工选取加Harris角点定位选取而来,匹配点对选取完毕后人工修改点集中的数据以产生外点。两图中绿色点为RANSAC认为正确匹配的点对,红色的点为错误匹配点对。

ransac1
图2
ransac2
图3

参考文献:
[1] Fischler, M.A. and Bolles, R.C. Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography. Communications of the ACM , 24(6): 381–395, 1981.
[2] Richard Hartley and Andrew Zisserman. Multiple View Geometry in Computer Vision (2nd ed). Cambridge University Press .
[3] 程焱,周焰,林洪涛,潘恒辉. 基于SIFT特征遥感影像自动配准与拼接,遥感技术与应用,23(6):721–728,2008年12月

—————————————————————————————————————-

RANSAC消除错配matlab代码(match_ransac.m):

function correctPoints = match_ransac(P1,P2, it, N, t)
% MATCH_RANSAC:RANSAC outliner detector for matched point-pairs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Input:
%       P1        - coordinates of points in the 1st image, [pointnum x 2]
%       P2        - coordinates of points in the 2nd image, [pointnum x 2]
%       it        - iterations (the number of subset to try)
%       N         - number of points in a consensus set to determine a correct model has been found
%       t         - error tolerance to determine whether a point is compatible for the model
% 
% Output:
%       correctPoints - indexes of point-pairs corrected matched determined by RANSAC
% 
% Author: 
% Jiaolong Yang
% Beijing Laboratory of Intelligent Information Technology,
% School of Computer Science,
% Beijing Institute of Technology
% jiaolong@bit.edu.cn
% 
% Reference:
% Fishler M A, Bolles R C. Random sample concensus:A paradigm for model fitting
% with applications to image analysis and automated cartography[J]. Communications
% of ACM, 1981, 24(6):381—395.
% 
% $Revision: 1.0 $  $Date: 2010.03.17 21:44:20 $ Original version
% $Revision: 1.1 $  $Date: 2010.03.19 16:04:50
% $Revision: 2.0 $  $Date: 2010.03.23 13:17:39
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    switch nargin
        case 2
            it = size(P1,1);
            N = fix(0.4*size(P1,1));
            t = 3;
        case 3
            N = fix(0.4*size(P1,1));
            t = 3;
        case 4
            t = 3;
    end

    correctPoints = [];
    pointNum = size(P1, 1);
    history = [];

    for i = 1:it
        %initialize consensus set with 4 points randomly selected 
        S = randperm(pointNum);
        S = S(1:4);
        %check whether every 3 points are noncollinear
        if check_collineation(P1(S, :))
            it = it+1;
            continue;
        end

        %check whether the selected group haven't been used before
        historyNum = size(history,1);
        exist = 0;
        for j = 1:historyNum
            equal = 1;
            for k = 1:4
                if history(j,k) ~= S(k)
                    equal = 0;
                    break;
                end
            end
            if equal
                exist = 1;
                break;
            end
        end
        if exist
            %reject used group
            it = it+1;
            continue;
        else
            history(end+1, :) = S;
        end

        %compute projective transformation matrix
        H = projectivematrix(P2(S,:)', P1(S,:)');
        %get full consensus set
        S =  get_consensus_set(P1, P2, S, H, t); 
        %check if the model(namely the matrix) is correct or better than that we've found
        if size(S,2) > N 
            N = size(S,2);
            correctPoints = S;
        end
    end

    %update projective transformation matrix
    H = projectivematrix(P2(correctPoints,:)',P1(correctPoints,:)');
    %get all points compatible with the best model
    correctPoints =  get_consensus_set(P1, P2, correctPoints, H, t);
end

function S = get_consensus_set(P1, P2, S, H, t)

    dataNum = size(P1,1);
    %traverse all the points
    for i = 1:dataNum
        if size(find(S == i), 2) ~= 0
            continue;
        end

        %project p1 to p1_h using the given transformation matrix
        p1 = P1(i,:);
        tmp = H*[p1,1]';
        p1_h = tmp(1:2)' / tmp(3);

        p2 = P2(i,:);

        %compute the error(euclidian distance betwween p1_h and p2)
        dis = sqrt((p1_h(1)-p2(1))*(p1_h(1)-p2(1)) + (p1_h(2)-p2(2))*(p1_h(2)-p2(2)));

        %check error tolerance
        if dis < t
            S(end+1) = i;
        end
    end
end

function re = check_collineation(P)

    num = size(P,1);
    if num > 2
        for i = 1:num-2
            for j = i+1:num-1
                for k =j+1:num
                    a = [P(i,:)-P(j,:), 0];
                    b = [P(i,:)-P(k,:), 0];
                    %determine collineation of 3 points by "corss(p1p2,p1p3)==0"
                    if cross(a,b) == 0
                        re = 1;
                        return;
                    end
                end
            end
        end
    end

    re = 0;
end

文章来源于:http://www.jellon.cn/index.php/archives/291

分享到:
评论

相关推荐

    RANSAC算法及其消除错配应用共5页.pdf.zip

    在“RANSAC算法及其消除错配应用”中,错配是指在图像匹配或其他数据匹配过程中出现的错误对应。RANSAC通过剔除这些错配点,提高模型的准确性。在实际应用中,比如图像拼接,RANSAC可以用来找到共同的特征点,消除...

    SIFT算法详解及应用(课件)

    4. **消除错配点**:通过一些策略如RANSAC算法剔除错误匹配的点对,以提高匹配的准确性。 ### SIFT算法的应用领域 SIFT算法的应用领域非常广泛,主要包括: - **图像配准**:将不同时间、不同视角、不同成像条件...

    SIFT算法实现原理步骤.pdf

    "SIFT算法实现原理步骤" SIFT(Scale-Invariant Feature Transform)...这个步骤可以使用Ratio Test或RANSAC算法来实现。 SIFT算法是一种强大的计算机视觉技术,广泛应用于图像处理、计算机视觉和机器人视觉等领域。

    一种基于RANSAC的柱面图像配准算法 (2010年)

    首先采用 NCC算法对检测 出来的 Harris角点进行粗匹配,然后采用两次改进的RANSAC算法删除误配,提高正确匹 配角点的数量,最后对仿射变换模型参数进行 Levenberg-Marquardt非线性优化以进一步 降低图像的配准误差 。...

    结合SURF算法和ORB算法的改进算法的MATLAB实现

    在图像处理领域,特征检测与匹配是至关重要的环节,它为图像识别、物体定位和3D重建等应用提供了基础。本话题将详细探讨如何在MATLAB环境中,结合两种经典的特征描述算子——Speeded Up Robust Features (SURF) 和 ...

    SIFT算法详解及应用

    - **消除错配点**:为了提高匹配的准确性,通常会使用诸如RANSAC(随机样本一致)等方法来剔除错误匹配的点,以增强匹配的稳定性。 3. **SIFT算法的应用领域** SIFT算法广泛应用于: - **图像配准**:通过匹配...

    基于SIFT的低空遥感图像拼接.pdf

    而RANSAC算法可以用于减少特征点错配并估计出图像序列的投影矩阵。最后,渐入渐出加权平均法可以用于处理图像融合,提高图像拼接的质量。 通过Matlab实验结果证明,基于SIFT算法的低空遥感图像拼接技术具有较好的...

    sift算法详解及应用

    - **错配点消除**:为了提高匹配的准确性,通常会使用如RANSAC(随机抽样一致)等方法去除错误匹配的点,以提高匹配的可靠性。 **3. SIFT算法的应用领域** SIFT算法在以下领域有着广泛的应用: - **图像匹配**:...

    SIFT算法的使用详解

    - **消除错配点**:为了提高匹配的准确性,可以采用随机样本一致性(RANSAC)等方法去除异常匹配,确保匹配的稳健性。 3. **SIFT算法的应用领域** - **图像配准**:SIFT可用于同一物体在不同条件下的图像对齐,如...

    基于 SIFT 特征匹配的监控图像自动拼接

    本文研究的是一种基于SIFT特征匹配的监控图像自动拼接方法,该方法通过高速提取SIFT特征描述符并进行稳定精确匹配,利用改进RANSAC算法去除错配,从而确定待拼接图像之间的变换参数,在图像融合方面,有效消除了颜色...

    SIFT算法实现原理步骤.docx

    5. **消除错配点**: - 使用诸如RANSAC(随机样本一致)等方法去除错误匹配,提高匹配的准确性。 总结来说,SIFT算法从构建多尺度空间、检测关键点、精确定位、描述关键点到匹配和剔除误匹配,形成了一套完整的...

    sift讲义

    - **匹配与验证**:利用特征向量之间的距离度量进行匹配,并通过RANSAC算法等手段消除误匹配。 **SIFT特征**具有以下特性: - **不变性**:对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声保持...

    harris角点

    通过运行这些代码,我们可以观察到Harris角点检测如何找到图像中的关键特征,NCC如何找到匹配点,以及RANSAC如何消除错误匹配,提升匹配的准确性。理解并掌握这些算法和技术,对于进行高级的计算机视觉应用,如目标...

    结合PCM 和MIE 的多模态图像配准方法 (2010年)

    利用RANSAC算法去除错配,进而确定待配准图像间的变换参数,实验表明:该方法达到了像素级配准精度、求解稳定,对多模态引起的非线性灰度变化、光照变化、噪声等都具有较强的鲁棒性;计算精度较基于同类特征的配准...

Global site tag (gtag.js) - Google Analytics