zoukankan      html  css  js  c++  java
  • [工具]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方法对面进行翻转,需要注意矩阵的转置。

  • 相关阅读:
    String、Stringbuilder、StringBuffer之间的练习与区别
    JAVA——重点非阻塞模型:NIO模型及IO操作步骤
    JAVA——IO模型分类
    SpringBoot(六) SpringBoot使用汇总(持续更新)
    Java高级(一) Future机制
    SpringBoot(二) 事务
    Java8(七) 新的DateTime API
    Java8(六) Optional
    Java8(五) 接口默认方法
    Java8(四) StreamAPI
  • 原文地址:https://www.cnblogs.com/sipin/p/4361967.html
Copyright © 2011-2022 走看看