2016-11-04 10 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つの引数を渡しているので、2Dの三角測量が実行されます。 https://www.mathworks.com/help/matlab/ref/triangulation-class.html – Eskapp

+0

@Eskapp私は '三角測量'ではなく '三角測量'を使用しています – Controller

+0

私の悪い私はあなたの質問をあまりにも速く読んでいます!あなたが 'vl_sift'を使って動作すると言えば、それはあなたのコードにもたらす唯一の変更ですか? コードと出力の両方を確認すると便利です。 – Eskapp

答えて

0

これまでに、ペアのdsift機能?ポイントクラウドがフラットな理由は、対応するフィーチャ間の視差が同じであるためです。

関連する問題