2016-11-04 36 views
2

我在MATLAB中使用vl_dsift來計算一對立體圖像中的密集SIFT特徵。特徵對應關係似乎是或多或少都是正確的,但是當我對三維雲進行三角測量時是平坦的,也就是說所有點都具有相同的深度,這對於我的場景來說並非如此,當我使用vl_sift時也不會發生這種情況。 我的代碼如下:密集SIFT後的場景重建

[fL, dL] = vl_dsift(frameLeftGray,'step',10,'size',20,'fast') ; 
[fR, dR] = vl_dsift(frameRightGray,'step',10,'size',20,'fast') ; 

[matches, scores] = vl_ubcmatch(dL, dR, 1.5) ; 

matchedPoints1 = fL(1:2,matches(1,:))'; 
matchedPoints2 = fR(1:2,matches(2,:))'; 

points3D = triangulate(matchedPoints1, matchedPoints2,stereoParams); 

points3D = points3D ./ 1000; 


numPixels = size(frameLeftRect, 1) * size(frameLeftRect, 2); 
allColors = reshape(frameLeftRect, [numPixels, 3]); 
colorIdx = sub2ind([size(frameLeftRect, 1), size(frameLeftRect, 2)],round(matchedPoints1(:,2)), round(matchedPoints1(:, 1))); 
color = allColors(colorIdx, :); 

ptCloud1 = pointCloud(points3D, 'Color', color); 

player3D = pcplayer([-0.02, 0.02], [-0.05, 0.05], [0.02, 0.12], 'VerticalAxis', 'y', 'VerticalAxisDir', 'up'); 

view(player3D, ptCloud1); 

任何想法可能會出錯?

feature matches

scene after vl_dsift

如果我使用vl_sift代替,並保持一切相同

[fL, dL] = vl_sift(frameLeftGray,'levels',10) ; 
[fR, dR] = vl_sift(frameRightGray,'levels',10) ; 

然後,我得到了以下的場景,其形狀我所知道的是更準確: scene after vl_sift

+0

似乎對於3D點,「三角測量」函數需要2或4個參數。在這裏你傳遞3個參數,所以執行二維三角測量。 https://www.mathworks.com/help/matlab/ref/triangulation-class.html – Eskapp

+0

@Eskapp我正在使用'triangulate',而不是'triangulation' – Controller

+0

ooops,我不好,我太快讀了你的問題!當你說它使用'vl_sift'的時候,它是你帶給你的代碼的唯一修改嗎? 看到代碼和輸出會很有用。 – Eskapp

回答

0

你有沒有計算任何距離一對dsift功能?點雲平坦的原因是因爲相應特徵之間的差異是相同的。