密集SIFT后的场景重建

时间:2016-11-04 14:27:34

标签: matlab computer-vision sift 3d-reconstruction

我在MATLAB中使用vl_dsift来计算一对立体图像中的密集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);

知道可能出现什么问题吗?

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

1 个答案:

答案 0 :(得分:0)

你有没有计算任何一对dsift功能之间的距离?点云平坦的原因是因为相应特征之间的差异是相同的。