multi-GS: 更高效的RANSAC
RANSAC的思路可简单概括为随机抽取M个hypothesis(也即minimal sample set,包含p个点)分别用来建模,最后采用效果最好(能囊括最多内点)的hypothesis所建立的模型。
然而,抽取每一个hypothesis时都是完全随机的,hypothesis内所抽取到的点全是内点的概率很小,特别是当p比较大或者外点占比大的时候,这也导致了使得RANSAC算法收敛所需的M变得很大。
本文提出了一种方法,增大了单个hypothesis内的点属于同一个structure的概率,加快了RANSAC的收敛。
算法如下:
该算法能work的原因:
假设当前已经采样了m个hypothesis并求出了每个hypothesis所对应的模型,用这m个模型分别去计算它们同所有n个点的residual(即在该点上使用该模型所产生的误差),这样就得到了一个n*m的矩阵,矩阵的i行即为第i个点在所有m个模型上的residual vector,也就是每个点都对应了一个residual vector,这个residual vector也就是点的一个性质,residual-vector越相似,两个点就越可能属于同一个structure,multi-GS的理念即在于在同一个hypothesis内取 residual vector相似的点来提升hypothesis内的点属于同一个structure的概率。
以homography为例说明residual的计算方式:
function [dist, H] = homography_res(H, X)
H = reshape(H,3,3);
x1 = X(1:3,:); % Extract x1 and x2 from x
x2 = X(4:6,:);
n = size(x1,2);
% Calculate, in both directions, the transfered points
Hx1 = H*x1;
invHx2 = H\x2;
% Normalise so that the homogeneous scale parameter for all coordinates
% is 1.
x1 = hnormalise(x1);
x2 = hnormalise(x2);
Hx1 = hnormalise(Hx1);
invHx2 = hnormalise(invHx2);
dist = sum((x1-invHx2).^2) + sum((x2-Hx1).^2);
%size:1*n 使用当前hypothesis m 采样得到的4对matching points所构建的H,计算得到H在每一对matching
%points 上的误差
dist = reshape(dist,n,1);
H = H(:);
end