L = sp.csr_matrix((W, (I, J)), shape=(n, n)) L = L - sp.spdiags(L * np.ones(n), 0, n, n) return L if __name__ == "__main__": # from psbody.mesh import Mesh # m0 = Mesh(filename='assets/sphube.obj') # m1 = Mesh(filename='assets/sphube.obj') # m1.v *= np.array([0.5, 1., 2.]) from utils.smpl_paths import SmplPaths smp = SmplPaths() m0 = smp.get_mesh(smp.get_smpl()) L0 = cpu_laplacian(m0.v.astype(np.float32), m0.f) lap0 = L0.dot(m0.v.astype(np.float32)) tf_v0 = tf.expand_dims(m0.v.astype(np.float32), 0) tf_v = tf.tile(tf_v0, (5, 1, 1)) tf_L = batch_laplacian(tf_v, m0.f.astype(np.int32)) tf_L0 = batch_laplacian(tf_v0, m0.f.astype(np.int32)) tf_lap = sparse_dense_matmul_batch(tf_L, tf_v) # tf_diff = tf.reduce_max(tf.abs(f_L[0] - tf_L[-1])) with tf.Session(): tf_L_e = tf.sparse_tensor_to_dense(tf_L).eval()
else: verts = self.smooth_cotlap(verts, smoothness) return verts if __name__ == "__main__": IS_SMPL = True fpath = "/BS/cpatel/work/data/learn_anim/mixture_exp31/000_0/smooth_TShirtNoCoat/0990/pred_0.ply" if not IS_SMPL: ms = Mesh(filename=fpath) else: from utils.smpl_paths import SmplPaths dp = SmplPaths(gender='female') smpl = dp.get_smpl() ms = Mesh(v=smpl.r, f=smpl.f) smoothing = DiffusionSmoothing(ms.v, ms.f) verts_smooth = ms.v.copy() for i in range(20): verts_smooth = smoothing.smooth(verts_smooth, smoothness=0.05) ms_smooth = Mesh(v=verts_smooth, f=ms.f) # from psbody.mesh import MeshViewers # mvs = MeshViewers((1,3)) # mvs[0][0].set_static_meshes([ms]) # mvs[0][1].set_static_meshes([ms_smooth]) # mvs[0][2].set_static_meshes([ms_smooth2]) # import ipdb