[工具]toolbox_graph_isomap

Isomap:Isomap是一种非线性降维的方法。同MDS一样,Isomap的主要方法为,先计算顶点间的测地距离(如果是1-ring最近邻,则为欧式距离),然后根据测地距离的邻接矩阵变换到欧式距离上,得到的输出结果即为canonical forms。关于算法的介绍及算法流程可参考wiki:http://en.wikipedia.org/wiki/Isomap

另附Stanford大学的Isomap主页:http://isomap.stanford.edu/

下面主要分析toolbox_graph中isomap的使用及原理

function xy = Isomap(X,ndims,options); 

或  xy = isomap(D,ndims,options); 

  输入参数:X——D*N的矩阵,D为维度,N为顶点数目

    D——距离矩阵,记录两顶点间的距离。可以是局部距离矩阵,当无连接是值为Inf;也可以是全局距离矩阵,也就是两顶点间的测地距离矩阵。

    ndims——维度

    options——ndims:输出的维度

        distance_mode:局部距离矩阵对应‘local’;全局距离矩阵对应‘global’

        nn_epsilon:通过阈值计算最近邻时使用

        nn_nbr:设定固定的最近邻数目

   输出:xy——N*D的矩阵,得到的isomap之后的顶点数据。可以write_off方法写进文件在meshlab中查看。

相关测试代码:

[vertex,face] = read_off('test.off');

A = triangulation2adjacency(face,vertex);

W = build_euclidean_weight_matrix(A,vertex);

options.distance_mode = 'local';
xy = isomap(W,3,options);

write_off('F:MrJinShapeRetrievalCM-BOF-source code1Source_codemy_code oolbox_graphmy_test est_isomap.off',xy',face);

Isomap代码中 用到了compute_distance_graph,用于计算从全局的距离矩阵。在compute_distance_graph中,调用了preform_dijkstra计算最短路径。

PS:为使结果更加便于观察,可以使用reverse_orientation方法对面进行翻转,需要注意矩阵的转置。

原文地址:https://www.cnblogs.com/sipin/p/4361967.html