在使用RANSAC算法之前,我们如何消除不属于目标区域的特征?

时间:2019-03-04 16:41:00

标签: matlab feature-selection ransac

当匹配SIFT特征点时,将出现 会有很多不匹配的地方。 RANSAC算法可用于 通过找到变换矩阵来消除不匹配 这些特征点。但是当数据空间包含很多 失配,找到正确的变换矩阵将是 非常困难。而且,发现错误的可能性 型号很大。为了解决该问题,我想使用一种改进的RANSAC算法。使用之前 RANSAC算法,我要删除部分错误功能 通过消除特征来消除 属于目标区域。为此,我要计算包含特征点的区域中每个点的数量。当数量少 超过我们设定的阈值,我们认为该点不属于 到目标区域并将其删除。您可以在matlab中帮助我吗?您可以在下面查看我的代码。

I = single(rgb2gray(imread('sift_basic_1.jpg'))) ;

[f,d] = vl_sift(I);

I2 = single(rgb2gray(imread('sift_basic_2.jpg'))) ;
[f2,d2] = vl_sift(I2 );
%% SIFT matches
d = im2single(d);
d2 = im2single(d2);
kdtree = vl_kdtreebuild(d ) ;
[index, distance] = vl_kdtreequery(kdtree, d, d2) ;
numMatches = size(index,2)  ;
X1 = f(1:2,index) ; X1(3,:) = 1 ;
X2 =  f2(1:2,:); X2(3,:) = 1 ;
clear H score ok ;
for t = 1:5000
    % estimate homograpyh
    subset = vl_colsubset(1:numMatches, 4) ;
    A = [] ;
    for i = subset
        A = cat(1, A, kron(X1(:,i)', vl_hat(X2(:,i)))) ;

    end
    [U,S,V] = svd(A) ;
    H{t} = reshape(V(:,9),3,3) ;

    % score homography
    X2_ = H{t} * X1 ;
    du = X2_(1,:)./X2_(3,:) - X2(1,:)./X2(3,:) ;
    dv = X2_(2,:)./X2_(3,:) - X2(2,:)./X2(3,:) ;
    ok{t} = (du.*du + dv.*dv) < 6*6 ;
    score(t) = sum(ok{t}) ;
    end
[score, best] = max(score) ;
H = H{best} ;
ok = ok{best} ;

0 个答案:

没有答案