Я использую vl_dsift
в MATLAB для вычисления плотных функций SIFT в паре стереоизображений. Соответствия признаков кажутся более или менее правильными, но когда я триангулирую, мое 3D-облако плоское, то есть все точки имеют одинаковую глубину, что неверно для моей сцены, а также не происходит, когда я использую vl_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);
Есть идеи, что может пойти не так?
Если вместо этого я использую vl_sift, а все остальное оставлю прежним
[fL, dL] = vl_sift(frameLeftGray,'levels',10) ;
[fR, dR] = vl_sift(frameRightGray,'levels',10) ;
затем я получаю следующую сцену, форма которой, как мне известно, является более точной: ://i.stack.imgur.com/lYABi.jpg" alt="сцена после vl_sift">
triangulation
требует либо 2, либо 4 аргумента. Здесь вы передаете 3 аргумента, поэтому выполняется двумерная триангуляция. mathworks.com/help/matlab/ref/triangulation-class.html< /а> - person Eskapp   schedule 04.11.2016triangulate
, а неtriangulation
- person Controller   schedule 04.11.2016vl_sift
, это единственная модификация, которую вы вносите в свой код? Было бы полезно увидеть как коды, так и вывод. - person Eskapp   schedule 04.11.2016