Как мы можем исключить функции, не принадлежащие целевой области, прежде чем использовать алгоритм RANSAC? - PullRequest
0 голосов
/ 04 марта 2019

При сопоставлении характерных точек 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} ;
...