0
我用安德烈Vedaldi的SIFT執行,計算出兩幅圖像的SIFT描述符以便對準他們,如何根據從vl_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獲得tranformed圖像
Ia_warped=affine_warp(Ia,M,'bicubic');
如果有人可以幫我找出其中的錯誤在我的代碼
非常感謝您的回覆,通常這是我想用'M = Pos1'/ Pos2'做的事; Ia_warped = affine_warp(Ia,M,'bicubic');'你有什麼想法我應該做什麼? 不幸的是我不能使用RANSAC,因爲我必須用我自己的算法刪除異常值。 –
'M = Pos1'/ Pos2'是錯誤的。請參閱DLT。 – Maurits
將您的提案應用於DLT M = DLT(Pos1',Pos2');',我得到相同的結果(白色而不是黑色!) –