[工具]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:\MrJinShapeRetrieval\CM-BOF-source code1\Source_code\my_code\toolbox_graph\my_test\test_isomap.off',xy',face);
Isomap代码中 用到了compute_distance_graph,用于计算从全局的距离矩阵。在compute_distance_graph中,调用了preform_dijkstra计算最短路径。
PS:为使结果更加便于观察,可以使用reverse_orientation方法对面进行翻转,需要注意矩阵的转置。