Exemplo n.º 1
0
def getWKSColors(context, mesh, K=3, WKS_E=6, WKS_CURRENT_E=0, wks_variance=0.0):
    K = min(len(mesh.data.vertices)-1, K);
    
    k_exists, cache_k = getMatrixCache(context, mesh, 'WKS_k');
    WKS_L_Exists, WKS_L = getMatrixCache(context, mesh, 'WKS_L');
    WKS_VORONOI_Exists, WKS_VORONOI = getMatrixCache(context, mesh, 'WKS_VORONOI');
    WKS_EVA_Exists, WKS_EVA = getMatrixCache(context, mesh, 'WKS_eva');
    WKS_EVE_Exists, WKS_EVE = getMatrixCache(context, mesh, 'WKS_eve');
    
    wks_e_exists, cache_wks_e = getMatrixCache(context, mesh, 'WKS_E');    
    wks_matrix_exists, WKS_MATRIX = getMatrixCache(context, mesh, 'WKS_MATRIX');
    wks_relative_sigma_exists, WKS_RELATIVE_SIGMA = getMatrixCache(context, mesh, 'WKS_RELATIVE_SIGMA');
    
    if(not k_exists):
        setMatrixCache(context, mesh, 'WKS_k', K);
    
    if(not WKS_L_Exists):        
        WKS_L = getWKSLaplacianMatrixCotangent(context, mesh);
        print('GETTING WKS LAPLACIANS :');
        setMatrixCache(context, mesh, 'WKS_L', WKS_L);
        
    if(not WKS_VORONOI_Exists):    
        print('GETTING WKS VORONOI :');    
        WKS_VORONOI, __ = getMeshVoronoiAreas(context, mesh);
        setMatrixCache(context, mesh, 'WKS_VORONOI', WKS_VORONOI);
    
    if(cache_k != K or not WKS_EVA_Exists or not WKS_EVE_Exists):
        print('GETTING WKS EIGENS : ', '%s = %s'%(cache_k, K), WKS_EVA_Exists, WKS_EVE_Exists);
        WKS_EVA, WKS_EVE = getWKSEigens(mesh, WKS_L, WKS_VORONOI, K);        
        setMatrixCache(context, mesh, 'WKS_k', K);
        setMatrixCache(context, mesh, 'WKS_eva', WKS_EVA);
        setMatrixCache(context, mesh, 'WKS_eve', WKS_EVE);
    
    if(cache_wks_e != WKS_E or not wks_e_exists or not wks_matrix_exists or wks_variance !=  WKS_RELATIVE_SIGMA):
        if(wks_variance > 0.0):
            WKS_MATRIX = get_wks(WKS_EVA, WKS_EVE, num_steps=WKS_E, relative_sigma=wks_variance);
        else:
            WKS_MATRIX = get_wks(WKS_EVA, WKS_EVE, num_steps=WKS_E);
            
        setMatrixCache(context, mesh, 'WKS_E', WKS_E);
        setMatrixCache(context, mesh, 'WKS_MATRIX', WKS_MATRIX);
        setMatrixCache(context, mesh, 'WKS_RELATIVE_SIGMA', wks_variance);
    
    print('GETTING WKS COLORS VALUES');
#     wks_matrix = getWKS(mesh, WKS_EVA, WKS_EVE, WKS_E, wks_variance );
#     wks_sum = np.sum(wks_matrix, 1);
#     wks = wks_sum/np.max(wks_sum);
    wks = WKS_MATRIX[:,min(int(WKS_E-1), WKS_CURRENT_E)];
    print('FINISHED AND RETURNING THE COMPUTED WKS VALUES :');
    return wks, K;
Exemplo n.º 2
0
def getHKSColors(context, mesh, K=5, HKS_T=20.0, HKS_CURRENT_T = 20):
    K = min(len(mesh.data.vertices)-1, K);
    k_exists, cache_k = getMatrixCache(context, mesh, 'WKS_k');
    
    WKS_L_Exists, WKS_L = getMatrixCache(context, mesh, 'WKS_L');
    WKS_VORONOI_Exists, WKS_VORONOI = getMatrixCache(context, mesh, 'WKS_VORONOI');
    
    WKS_EVA_Exists, WKS_EVA = getMatrixCache(context, mesh, 'WKS_eva');
    WKS_EVE_Exists, WKS_EVE = getMatrixCache(context, mesh, 'WKS_eve');
        
    hks_t_exists, cache_hks_t = getMatrixCache(context, mesh, 'HKS_T');    
    hks_matrix_exists, HKS_MATRIX = getMatrixCache(context, mesh, 'HKS_MATRIX');
           
    if(not k_exists):
        setMatrixCache(context, mesh, 'WKS_k', K);
    
    if(not WKS_L_Exists):
        print('GETTING HKS LAPLACIANS :');
#         HKS_L = getLaplacianMatrixCotangent(context, mesh, []);
        WKS_L = getWKSLaplacianMatrixCotangent(context, mesh);
        setMatrixCache(context, mesh, 'WKS_L', WKS_L);
    
    if(not WKS_VORONOI_Exists):    
        print('GETTING WKS VORONOI :');    
        WKS_VORONOI, __ = getMeshVoronoiAreas(context, mesh);
        setMatrixCache(context, mesh, 'WKS_VORONOI', WKS_VORONOI);
    
    if(cache_k != K or not WKS_EVA_Exists or not WKS_EVE_Exists):
        print('GETTING HKS EIGENS : ', '%s = %s'%(cache_k, K), WKS_EVA_Exists, WKS_EVE_Exists);
#         HKS_EVA, HKS_EVE = getHKSEigens(mesh, HKS_L, K);
        WKS_EVA, WKS_EVE = getWKSEigens(mesh, WKS_L, WKS_VORONOI, K); 
        setMatrixCache(context, mesh, 'WKS_k', K);
        setMatrixCache(context, mesh, 'WKS_eva', WKS_EVA);
        setMatrixCache(context, mesh, 'WKS_eve', WKS_EVE);
    
    if(cache_hks_t != HKS_T or not hks_t_exists or not hks_matrix_exists):
        HKS_MATRIX = get_hks(WKS_EVA, WKS_EVE, WKS_VORONOI, num_times=HKS_T);
        setMatrixCache(context, mesh, 'HKS_T', HKS_T);
        setMatrixCache(context, mesh, 'HKS_MATRIX', HKS_MATRIX);
        
    
    print('GETTING HKS COLOR VALUES');    
    heat = HKS_MATRIX[:,min(int(HKS_T-1), HKS_CURRENT_T)];
    print('FINISHED AND RETURNING THE COMPUTED HKS VALUES :');
    return heat, K;
Exemplo n.º 3
0
def getGISIFColors(context,
                   mesh,
                   K=20,
                   threshold_ratio=0.1,
                   show_group_index=0,
                   linear_gisif_iterations=0):
    K = min(len(mesh.data.vertices) - 1, K)

    k_exists, cache_k = getMatrixCache(context, mesh, 'WKS_k')
    WKS_L_Exists, WKS_L = getMatrixCache(context, mesh, 'WKS_L')
    WKS_VORONOI_Exists, WKS_VORONOI = getMatrixCache(context, mesh,
                                                     'WKS_VORONOI')
    WKS_EVA_Exists, WKS_EVA = getMatrixCache(context, mesh, 'WKS_eva')
    WKS_EVE_Exists, WKS_EVE = getMatrixCache(context, mesh, 'WKS_eve')

    GISIF_THRESHOLD_Exists, GISIF_Threshold = getMatrixCache(
        context, mesh, 'GISIF_Threshold')
    GISIF_GROUPS_Exists, GISIF_Groups = getMatrixCache(context, mesh,
                                                       'GISIF_Groups')

    if (not k_exists):
        setMatrixCache(context, mesh, 'WKS_k', K)

    if (not WKS_L_Exists):
        WKS_L = getWKSLaplacianMatrixCotangent(context, mesh)
        print('GETTING GISIF LAPLACIANS :')
        setMatrixCache(context, mesh, 'WKS_L', WKS_L)

    if (not WKS_VORONOI_Exists):
        print('GETTING GISIF VORONOI :')
        WKS_VORONOI, __ = getMeshVoronoiAreas(context, mesh)
        setMatrixCache(context, mesh, 'WKS_VORONOI', WKS_VORONOI)

    if (cache_k != K or not WKS_EVA_Exists or not WKS_EVE_Exists):
        print('GETTING GISIF EIGENS : ', '%s = %s' % (cache_k, K),
              WKS_EVA_Exists, WKS_EVE_Exists)
        WKS_EVA, WKS_EVE = getWKSEigens(mesh, WKS_L, WKS_VORONOI, K)

        mesh.spectral_soft_update = True
        #Find the standard deviation between the eigenvalues and apply
        mesh.gisif_threshold = np.std(WKS_EVA)
        threshold_ratio = mesh.gisif_threshold
        mesh.spectral_soft_update = False

        setMatrixCache(context, mesh, 'WKS_k', K)
        setMatrixCache(context, mesh, 'WKS_eva', WKS_EVA)
        setMatrixCache(context, mesh, 'WKS_eve', WKS_EVE)

    if (GISIF_Threshold != threshold_ratio or not GISIF_THRESHOLD_Exists):
        print('GETTING GISIF GROUPS :')
        GISIF_Groups = getGISIFGroups(mesh, WKS_EVA, WKS_EVE, threshold_ratio)
        setMatrixCache(context, mesh, 'GISIF_Threshold', threshold_ratio)
        setMatrixCache(context, mesh, 'GISIF_Groups', GISIF_Groups)

    print('SELECTING GISIF GROUPS :', WKS_EVA)
    show_group_index = min(show_group_index,
                           len(GISIF_Groups) - 1)
    linear_gisifs = []
    if (linear_gisif_iterations > 0):
        linear_gisif_iterations = linear_gisif_iterations + 1
        max_linear_gisifs = min(show_group_index + linear_gisif_iterations,
                                len(GISIF_Groups))
        iterations_count = (max_linear_gisifs - show_group_index)
        linear_gisifs = np.zeros((GISIF_Groups[0][1].shape[0]))
        uselabel = None
        print('ITERATIONS COUNT ', show_group_index, iterations_count,
              len(GISIF_Groups))
        for i in range(iterations_count):
            label, evectors_group = GISIF_Groups[show_group_index + i]
            if (i == 0):
                uselabel = label
            eve = (evectors_group**2)
            gisifs = np.sum(eve, axis=1)
            linear_gisifs = gisifs - linear_gisifs

        return linear_gisifs, K, uselabel

    else:
        label, evectors_group = GISIF_Groups[show_group_index]
        eve = (evectors_group**2)
        gisifs = np.sum(eve, axis=1)

    print('DOING GISIF COMPUTATION :')

    print('FINISHED AND RETURNING THE COMPUTED GISIF VALUES :')
    #     gisifs = gisifs/np.max(gisifs);
    return gisifs, K, label
Exemplo n.º 4
0
def getHKSColors(context,
                 mesh,
                 K=5,
                 HKS_T=20.0,
                 HKS_CURRENT_T=20,
                 HKS_LOG_START=0.1,
                 HKS_LOG_END=10.0):
    K = min(len(mesh.data.vertices) - 1, K)
    k_exists, cache_k = getMatrixCache(context, mesh, 'WKS_k')

    WKS_L_Exists, WKS_L = getMatrixCache(context, mesh, 'WKS_L')
    WKS_VORONOI_Exists, WKS_VORONOI = getMatrixCache(context, mesh,
                                                     'WKS_VORONOI')

    WKS_EVA_Exists, WKS_EVA = getMatrixCache(context, mesh, 'WKS_eva')
    WKS_EVE_Exists, WKS_EVE = getMatrixCache(context, mesh, 'WKS_eve')

    hks_t_exists, cache_hks_t = getMatrixCache(context, mesh, 'HKS_T')
    hks_log_start_exists, cache_hks_log_start = getMatrixCache(
        context, mesh, 'HKS_LOG_START')
    hks_log_end_exists, cache_hks_log_end = getMatrixCache(
        context, mesh, 'HKS_LOG_END')
    hks_matrix_exists, HKS_MATRIX = getMatrixCache(context, mesh, 'HKS_MATRIX')

    if (not k_exists):
        setMatrixCache(context, mesh, 'WKS_k', K)

    if (not WKS_L_Exists):
        print('GETTING HKS LAPLACIANS :')
        #         HKS_L = getLaplacianMatrixCotangent(context, mesh, []);
        WKS_L = getWKSLaplacianMatrixCotangent(context, mesh)
        setMatrixCache(context, mesh, 'WKS_L', WKS_L)

    if (not WKS_VORONOI_Exists):
        print('GETTING WKS VORONOI :')
        WKS_VORONOI, __ = getMeshVoronoiAreas(context, mesh)
        setMatrixCache(context, mesh, 'WKS_VORONOI', WKS_VORONOI)

    if (cache_k != K or not WKS_EVA_Exists or not WKS_EVE_Exists):
        print('GETTING HKS EIGENS : ', '%s = %s' % (cache_k, K),
              WKS_EVA_Exists, WKS_EVE_Exists)
        #         HKS_EVA, HKS_EVE = getHKSEigens(mesh, HKS_L, K);
        WKS_EVA, WKS_EVE = getWKSEigens(mesh, WKS_L, WKS_VORONOI, K)
        setMatrixCache(context, mesh, 'WKS_k', K)
        setMatrixCache(context, mesh, 'WKS_eva', WKS_EVA)
        setMatrixCache(context, mesh, 'WKS_eve', WKS_EVE)

    if (cache_hks_t != HKS_T or cache_hks_log_start != HKS_LOG_START
            or cache_hks_log_end != HKS_LOG_END or not hks_t_exists
            or not hks_matrix_exists or not hks_log_start_exists
            or not hks_log_end_exists):
        HKS_MATRIX = get_hks(WKS_EVA,
                             WKS_EVE,
                             WKS_VORONOI,
                             num_times=HKS_T,
                             log_start_value=HKS_LOG_START,
                             log_end_value=HKS_LOG_END)
        setMatrixCache(context, mesh, 'HKS_T', HKS_T)
        setMatrixCache(context, mesh, 'HKS_MATRIX', HKS_MATRIX)

    print('GETTING HKS COLOR VALUES')
    heat = HKS_MATRIX[:, min(int(HKS_T - 1), HKS_CURRENT_T)]
    print('FINISHED AND RETURNING THE COMPUTED HKS VALUES :')
    return heat, K
Exemplo n.º 5
0
def funcmap_correspondences(context,
                            source,
                            target,
                            n_eigen=30,
                            spectral_steps=100,
                            coeffsmode='wks'):
    #     verS, verT, triS, triT = getMeshVPos(source), getMeshVPos(target), getMeshFaces(source), getMeshFaces(target);

    n_eigen = min(
        len(source.data.vertices) - 1,
        len(target.data.vertices) - 1, n_eigen)

    #%% 1. LapBel Operator & Basis (eigenfunc)
    __, matMS = getMatrixCache(context, source, 'WKS_VORONOI')
    __, matCS = getMatrixCache(context, source, 'WKS_L')
    __, matMT = getMatrixCache(context, target, 'WKS_VORONOI')
    __, matCT = getMatrixCache(context, target, 'WKS_L')

    s_k_exists, s_cache_k = getMatrixCache(context, source, 'WKS_k')
    WKS_EVA_Exists, WKS_EVA = getMatrixCache(context, source, 'WKS_eva')
    WKS_EVE_Exists, WKS_EVE = getMatrixCache(context, source, 'WKS_eve')

    if (not s_k_exists):
        setMatrixCache(context, source, 'WKS_k', n_eigen)

    if (s_cache_k != n_eigen or not WKS_EVA_Exists or not WKS_EVE_Exists):
        eivalS, eivecS = getWKSEigens(source, matMS, matCS, n_eigen)
        eivalT, eivecT = getWKSEigens(target, matMT, matCT, n_eigen)

        setMatrixCache(context, source, 'WKS_k', n_eigen)
        setMatrixCache(context, target, 'WKS_k', n_eigen)

        setMatrixCache(context, source, 'WKS_eva', eivalS)
        setMatrixCache(context, target, 'WKS_eva', eivalT)

        setMatrixCache(context, source, 'WKS_eve', eivecS)
        setMatrixCache(context, target, 'WKS_eve', eivecT)
    else:
        __, eivalS = getMatrixCache(context, source, 'WKS_eva')
        __, eivalT = getMatrixCache(context, target, 'WKS_eva')
        __, eivecS = getMatrixCache(context, source, 'WKS_eve')
        __, eivecT = getMatrixCache(context, target, 'WKS_eve')

#     eivalS = eivalS[:-1]
#     eivecS = eivecS[:,:-1]
#     eivalT = eivalT[:-1]
#     eivecT = eivecT[:,:-1]

#%% 2. Function Representation (HKS & WKS) & its Coefficient
    if (coeffsmode == 'hks'):
        basisS = get_hks(eivalS, eivecS, matMS, spectral_steps)
        basisT = get_hks(eivalT, eivecT, matMT, spectral_steps)
        coefS = get_coef(eivecS, matMS, basisS)
        coefT = get_coef(eivecT, matMT, basisT)
    elif (coeffsmode == 'wks'):
        basisS = get_wks(eivalS, eivecS, num_steps=spectral_steps)
        basisT = get_wks(eivalT, eivecT, num_steps=spectral_steps)
        coefS = get_coef(eivecS, matMS, basisS)
        coefT = get_coef(eivecT, matMT, basisT)
    elif (coeffsmode == 'p2p'):
        assert len(source.data.vertices) == len(target.data.vertices)
        basisS = identity(len(source.data.vertices), dtype=np.float)
        basisT = identity(len(target.data.vertices), dtype=np.float)
        coefS = get_coef(eivecS, matMS, basisS)
        coefT = get_coef(eivecT, matMT, basisT)
    else:
        raise NotImplementedError(
            'The mode %s not known and has not been implemented')

    funcMap = get_funcMap(coefS, coefT, eivalS, eivalT)
    eivecS_mapped = (funcMap.dot(eivecS.T)).T

    return FunctionalMapResult(eivecS, eivecT, eivecS_mapped, funcMap,
                               coeffsmode, coefS, coefT, basisS, basisT)