Ejemplo n.º 1
0
def _compute_laplacian_equiangular(nodes, ratio, laplacian_type="normalized"):
    """ Computes laplacian of spherical graph sampled as a HEALpix grid 
    
    Parameters
    ----------
    nodes : int
        Number of nodes in the graph
    ratio : float
        width / height
    laplacian_type : string
        Type of laplacian. Options are {´normalized´, ´combinatorial´}
        
    Returns
    -------
    laplacian : torch.sparse_coo_tensor
        Graph laplacian
    """
    dim1, dim2 = equiangular_dimension_unpack(nodes, ratio)

    bw = [int(dim1 / 2), int(dim2 / 2)]

    G = pygsp.graphs.SphereEquiangular(bandwidth=bw, sampling="SOFT")
    G.compute_laplacian(laplacian_type)
    laplacian = layers.prepare_laplacian(G.L.astype(np.float32))

    return laplacian
Ejemplo n.º 2
0
def get_equiangular_laplacians(nodes, depth, ratio, laplacian_type):
    """Get the equiangular laplacian list for a certain depth.
    Args:
        nodes (int): initial number of nodes.
        depth (int): the depth of the UNet.
        laplacian_type ["combinatorial", "normalized"]: the type of the laplacian.

    Returns:
        laps (list): increasing list of laplacians
    """
    laps = []
    pixel_num = nodes
    for _ in range(depth):
        dim1, dim2 = equiangular_dimension_unpack(pixel_num, ratio)
        bw1 = equiangular_bandwidth(dim1)
        bw2 = equiangular_bandwidth(dim2)
        bw = [bw1, bw2]
        G = SphereEquiangular(bandwidth=bw, sampling="SOFT")
        G.compute_laplacian(laplacian_type)
        laplacian = prepare_laplacian(G.L)
        laps.append(laplacian)
    return laps[::-1]
Ejemplo n.º 3
0
def _equiangular_calculator(tensor, ratio):
    N, M, F = tensor.size()
    dim1, dim2 = equiangular_dimension_unpack(M, ratio)
    bw_dim1, bw_dim2 = dim1 / 2, dim2 / 2
    tensor = tensor.view(N, dim1, dim2, F)
    return tensor, [bw_dim1, bw_dim2]