2016-11-04 5 views
2

J'utilise vl_dsift dans MATLAB pour calculer des entités SIFT denses dans une paire d'images stéréo. Les correspondances de caractéristiques semblent plus ou moins correctes, mais quand je triangule mon nuage 3D est plat, tous les points ont la même profondeur, ce qui n'est pas vrai pour ma scène et ne se produit pas non plus quand j'utilise vl_sift. Mon code est le suivant:Reconstruction de scène après SIFT dense

[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); 

Toute idée de ce qui pourrait aller mal?

feature matches

scene after vl_dsift

Si je vl_sift à la place et garde tout le monde la même

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

puis, je reçois la scène suivante, dont la forme que je sais est plus précis: scene after vl_sift

+0

Il semble que pour les points 3D, la fonction 'triangulation' nécessite 2 ou 4 arguments. Ici vous passez 3 arguments, donc une triangulation 2D est effectuée. https://www.mathworks.com/help/matlab/ref/triangulation-class.html – Eskapp

+0

@Eskapp J'utilise 'triangulate', pas' triangulation' – Controller

+0

ooops, mon mauvais je lis votre question trop vite! Quand vous dites que cela fonctionne en utilisant 'vl_sift', est-ce la seule modification que vous apportez à votre code? Il serait utile de voir les deux codes et la sortie. – Eskapp

Répondre

0

Avez-vous déjà calculé la distance entre pairer les fonctionnalités de dsift? La raison pour laquelle le nuage de points est plat est que la disparité entre les caractéristiques correspondantes est la même.