如何根据从 vl_sift 获得的数据计算转换矩阵?
how to calculate a transformation matrix based on data obtained from vl_sift?
我使用了 Andrea Vedaldi 的 SIFT 实现来计算两个图像的筛选描述符以便对齐它们,
Ia = imread('roofs1.jpg')) ;
Ib = imread('roofs2.jpg')) ;
%calculate descriptors
[fa,da] = vl_sift(im2single(rgb2gray(Ia))) ;
[fb,db] = vl_sift(im2single(rgb2gray(Ib))) ;
%matching
[matches, scores] = vl_ubcmatch(da,db) ;
[drop, perm] = sort(scores) ;
matches = matches(:, perm(1:50)) ;
scores = scores(perm(1:50))
在我得到关键点之后
d1=fa(1:2,matches(1,:));
d2=fb(1:2,matches(2,:));
现在我想计算这两张图片之间的变换矩阵M
Pos1=d1';
Pos2=d2';
Pos1(:,3)=1; Pos2(:,3)=1;
M=Pos1'/Pos2';
然后使用函数 affine_warp 应用变换以获得变换后的图像
Ia_warped=affine_warp(Ia,M,'bicubic');
但实际上我得到了这个结果
如果有人能帮我找出代码中的错误
您需要确定将点从第一组映射到另一组的单应矩阵或变换矩阵。这可以通过 Direct Linear Transform algorithm which is explained in the book Multiple View Geometry. Matlab also has a tutorial.
来完成
RANSAC 通常用于去除 ouliers 集,其演示可以在 vlfeat site and the site of Peter Kovesi 上找到。
我使用了 Andrea Vedaldi 的 SIFT 实现来计算两个图像的筛选描述符以便对齐它们,
Ia = imread('roofs1.jpg')) ;
Ib = imread('roofs2.jpg')) ;
%calculate descriptors
[fa,da] = vl_sift(im2single(rgb2gray(Ia))) ;
[fb,db] = vl_sift(im2single(rgb2gray(Ib))) ;
%matching
[matches, scores] = vl_ubcmatch(da,db) ;
[drop, perm] = sort(scores) ;
matches = matches(:, perm(1:50)) ;
scores = scores(perm(1:50))
在我得到关键点之后
d1=fa(1:2,matches(1,:));
d2=fb(1:2,matches(2,:));
现在我想计算这两张图片之间的变换矩阵M
Pos1=d1';
Pos2=d2';
Pos1(:,3)=1; Pos2(:,3)=1;
M=Pos1'/Pos2';
然后使用函数 affine_warp 应用变换以获得变换后的图像
Ia_warped=affine_warp(Ia,M,'bicubic');
但实际上我得到了这个结果
如果有人能帮我找出代码中的错误
您需要确定将点从第一组映射到另一组的单应矩阵或变换矩阵。这可以通过 Direct Linear Transform algorithm which is explained in the book Multiple View Geometry. Matlab also has a tutorial.
来完成RANSAC 通常用于去除 ouliers 集,其演示可以在 vlfeat site and the site of Peter Kovesi 上找到。