Реконструкция сцены после плотного SIFT

Я использую 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_dsift

Если вместо этого я использую 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">


person Controller    schedule 04.11.2016    source источник
comment
Кажется, что для трехмерных точек функция triangulation требует либо 2, либо 4 аргумента. Здесь вы передаете 3 аргумента, поэтому выполняется двумерная триангуляция. mathworks.com/help/matlab/ref/triangulation-class.html< /а>   -  person Eskapp    schedule 04.11.2016
comment
@Eskapp Я использую triangulate, а не triangulation   -  person Controller    schedule 04.11.2016
comment
ой, мой плохой, я слишком быстро прочитал ваш вопрос! Когда вы говорите, что это работает с использованием vl_sift, это единственная модификация, которую вы вносите в свой код? Было бы полезно увидеть как коды, так и вывод.   -  person Eskapp    schedule 04.11.2016
comment
@Eskapp Я обновил свой вопрос.   -  person Controller    schedule 04.11.2016
comment
Извините, что спрашиваю, но вы уверены, что это не странный эффект рендеринга от Matlab? Потому что я, честно говоря, не вижу причин, по которым изменение метода выборки может так резко изменить результаты... Возможно, я не смогу вам помочь, хотя я довольно привык работать с функциями SIFT, но не с этим API :(   -  person Eskapp    schedule 04.11.2016
comment
@Eskapp Я не знаю... Это действительно кажется странным :\   -  person Controller    schedule 04.11.2016


Ответы (1)


Вы когда-нибудь вычисляли расстояние между любыми парами dsift-объектов? Причина, по которой облако точек плоское, заключается в том, что несоответствие между соответствующими функциями одинаково.

person JunWangCas    schedule 25.12.2016