我使用了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,:));
现在我想计算这两个图像之间的变换矩阵
Pos1=d1';
Pos2=d2';
Pos1(:,3)=1; Pos2(:,3)=1;
M=Pos1'/Pos2';
然后应用具有函数affine_warp的转换来获得转换后的图像
Ia_warped=affine_warp(Ia,M,'bicubic');
如果有人可以帮我识别代码中的错误
答案 0 :(得分:1)
您需要确定单应性或变换矩阵,它将第一组中的点映射到另一组。这可以使用Direct Linear Transform算法来完成,该算法在书Multiple View Geometry中进行了解释。 Matlab也有一个tutorial。
RANSAC通常用于摆脱一组oulier,其中的演示可以在vlfeat site和Peter Kovesi网站上找到。