在matlab

时间:2017-07-24 08:55:28

标签: matlab 3d line mesh

我有以下形式的两组坐标:

v= (x1 y1 z1 a1 b1 c1,
    x2 y2 z2 a2 b2 c2,
    ....,
    xn yn zn an bn cn)

这些是来自两个网格的顶点的坐标。我想绘制一条3D线,将mesh1中的顶点连接到mesh2中的相应顶点。我正在使用patch函数来显示两个网格。我尝试了plot3,似乎只在单个网格中的点之间连接线。

代码:

% vertex_coordinates contains vertices of matched keypoints obtained using index. Taking first 50 coordinates from the 2 meshes
v=[vertex_coordinates1(1:50,:), vertex_coordinates0(1:50,:)];
x=[v(:,1) v(:,4)];
y=[v(:,2) v(:,5)];
z=[v(:,3) v(:,6)];

figure
p0 = patch('Faces',faces0,'Vertices',vertex0,'FaceColor','blue','FaceAlpha',.5,'edgecolor', 'none');
p1 = patch('Faces',faces1,'Vertices',vertex1,'FaceColor','red','FaceAlpha',.2,'edgecolor', 'none');
axis equal off
hold on
plot3(x',y',z')

我得到的内容如下图所示。lines 我想要这样的东西。lines 2

这些坐标实际上是两个网格中匹配关键点的顶点。我使用匹配的索引来获取坐标并在它们之间画一条线。我的代码有问题吗?或者我应该考虑对我的比赛进行阈值处理?

1 个答案:

答案 0 :(得分:0)

仔细研究后,我发现我的比赛中有很多异常值。在匹配的关键点'上执行RANSAC后坐标我能得到一些好的输出。

帮助我绘制匹配的代码如下。

v=[best_match_query, best_match_test];
x=[v(:,1), v(:,4)];
y=[v(:,2), v(:,5)];
z=[v(:,3), v(:,6)];
figure
p0 = patch('Faces',faces0,'Vertices',vertex0,'FaceColor','blue','FaceAlpha',.5,'edgecolor', 'none');
p1 = patch('Faces',faces1,'Vertices',vertex1,'FaceColor','red','FaceAlpha',.2,'edgecolor', 'none');
legend('template', 'test')
axis equal off
hold on
plot3(x',y',z')
view(0,90)

matches