MV3DR / core /postprocessing.py
sharifIslam's picture
Add core functionality and project structure for MV3DR application
ed72314
Raw History Blame Contribute Delete
1.56 kB
import os
import numpy as np
import trimesh
from typing import List, Tuple
from dust3r.utils.device import to_numpy
from dust3r.viz import pts3d_to_trimesh, cat_meshes
from config import DEFAULT_CONF_THRESHOLD
def filter_background_points(scene, conf_threshold: float = DEFAULT_CONF_THRESHOLD):
masks = scene.get_masks()
confs = [c for c in scene.im_conf]
for i, (mask, conf) in enumerate(zip(masks, confs)):
conf_mask = conf > conf_threshold
masks[i] = mask & conf_mask
return scene
def create_3d_output(outdir: str, imgs: List, pts3d: List, mask: List,
focals: List, cams2world: List, as_pointcloud: bool = False) -> str:
pts3d, imgs, focals, cams2world = map(to_numpy, [pts3d, imgs, focals, cams2world])
scene = trimesh.Scene()
if as_pointcloud:
pts = np.concatenate([p[m] for p, m in zip(pts3d, mask)])
col = np.concatenate([imgs[i][mask[i]] for i in range(len(imgs))])
geometry = trimesh.PointCloud(pts.reshape(-1, 3), colors=col.reshape(-1, 3))
else:
meshes = [pts3d_to_trimesh(imgs[i], pts3d[i], mask[i]) for i in range(len(imgs))]
geometry = trimesh.Trimesh(**cat_meshes(meshes))
centroid = geometry.centroid
geometry.apply_translation(-centroid)
scene.add_geometry(geometry)
flip_correction = np.eye(4)
flip_correction[1, 1] = -1
flip_correction[2, 2] = -1
scene.apply_transform(flip_correction)
outfile = os.path.join(outdir, 'object.glb')
scene.export(outfile)
return outfile