Esempio n. 1
0
def generate_transform_matrices(mesh, factors):
    factors = map(lambda x: 1.0 / x, factors)
    M, A, D, U, E = [], [], [], [], []
    A.append(get_vert_connectivity(mesh))
    M.append(mesh)
    E.append(get_vertices_per_edge(mesh))

    for factor in factors:
        ds_f, ds_D = qslim_decimator_transformer(M[-1], factor=factor)
        D.append(ds_D)
        new_mesh_v = ds_D.dot(M[-1].v)
        new_mesh = Mesh(v=new_mesh_v, f=ds_f)
        M.append(new_mesh)
        A.append(get_vert_connectivity(new_mesh))
        U.append(setup_deformation_transfer(M[-1], M[-2]))
        E.append(get_vertices_per_edge(new_mesh))

    return M, A, D, U, E
Esempio n. 2
0
    def test_connectivity_smoke_test(self):

        from psbody.mesh import Mesh
        from psbody.mesh.topology.connectivity import get_vert_connectivity, get_faces_per_edge
        m = Mesh(
            filename=os.path.join(test_data_folder, 'female_template.ply'))
        vconn = get_vert_connectivity(m)
        fpe = get_faces_per_edge(m)

        self.assertIsNotNone(vconn)
        self.assertIsNotNone(fpe)
Esempio n. 3
0
def laplacian(part_mesh):
    """ Compute laplacian operator on part_mesh. This can be cached.
    """
    import scipy.sparse as sp
    from sklearn.preprocessing import normalize
    from psbody.mesh.topology.connectivity import get_vert_connectivity
    import numpy as np
    connectivity = get_vert_connectivity(part_mesh)
    # connectivity is a sparse matrix, and np.clip can not applied directly on
    # a sparse matrix.
    connectivity.data = np.clip(connectivity.data, 0, 1)
    lap = normalize(connectivity, norm='l1', axis=1)
    lap = sp.eye(connectivity.shape[0]) - lap
    return lap
Esempio n. 4
0
def numpy_laplacian_uniform(v, f):
    """Computes uniform laplacian operator on mesh."""
    import scipy.sparse as sp
    from sklearn.preprocessing import normalize
    from psbody.mesh.topology.connectivity import get_vert_connectivity

    connectivity = get_vert_connectivity(Mesh(v=v, f=f))
    # connectivity is a sparse matrix, and np.clip can not applied directly on
    # a sparse matrix.
    connectivity.data = np.clip(connectivity.data, 0, 1)
    lap = normalize(connectivity, norm='l1', axis=1)
    lap = lap - sp.eye(connectivity.shape[0])

    return lap
    def calc_laplacian(mesh):
        """
        メッシュに対して Laplacian deformation での Laplacian を計算する
        """
        # pytorch3d -> psbody.mesh への変換
        mesh = Mesh(mesh.verts_packed().detach().cpu().numpy(),
                    mesh.faces_packed().detach().cpu().numpy())

        # メッシュを頂点連結関係を取得?
        connectivity = get_vert_connectivity(mesh)

        # connectivity is a sparse matrix, and np.clip can not applied directly on a sparse matrix.
        connectivity.data = np.clip(connectivity.data, 0, 1)
        laplacian = normalize(connectivity, norm='l1', axis=1)
        laplacian = sp.eye(connectivity.shape[0]) - laplacian
        return laplacian