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