working depth render
This commit is contained in:
+30
-9
@@ -1,15 +1,22 @@
|
||||
import os
|
||||
import sys
|
||||
import torch
|
||||
import numpy as np
|
||||
|
||||
|
||||
from deodr import Camera, Scene3D
|
||||
from deodr.triangulated_mesh import TriMesh
|
||||
from deodr.pytorch.triangulated_mesh_pytorch import ColoredTriMeshPytorch
|
||||
from deodr.pytorch.differentiable_renderer_pytorch import Scene3DPytorch, CameraPytorch
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
|
||||
from cloth3d.util import proj
|
||||
|
||||
|
||||
class RenderCore:
|
||||
def __init__(self, max_depth=0, depth_scale=1):
|
||||
self.mesh = None
|
||||
self.depthScale = depth_scale
|
||||
self.scene = Scene3D(0)
|
||||
self.scene = Scene3D()
|
||||
self.set_max_depth(max_depth)
|
||||
|
||||
def set_mesh(self, vertices, faces):
|
||||
@@ -141,6 +148,8 @@ from pytorch3d.renderer import (
|
||||
TexturesVertex
|
||||
)
|
||||
from pytorch3d.structures import Meshes
|
||||
from pytorch3d.utils import cameras_from_opencv_projection
|
||||
|
||||
|
||||
class DepthRenderer(nn.Module):
|
||||
def __init__(self) -> None:
|
||||
@@ -149,13 +158,21 @@ class DepthRenderer(nn.Module):
|
||||
|
||||
|
||||
def forward(self, verts, faces, cam):
|
||||
R, T = look_at_view_transform(2.7, 0, 0)
|
||||
# R, T = look_at_view_transform(2.7, 0, 0)
|
||||
# cameras = FoVPerspectiveCameras(device='cuda', R=R, T=T)
|
||||
ext = extrinsic(cam)
|
||||
cameras = PerspectiveCameras(device='cuda', R=ext[None, :, :3], T=ext[None, :, 3])
|
||||
|
||||
ext = torch.tensor(extrinsic(cam).astype(np.float32), device='cuda')
|
||||
# ext = proj(cam)
|
||||
fp = np.array([240 * (480 / 36), 320 * (640 / 36)], dtype=np.float32)
|
||||
img_size = np.array([480, 640], dtype=np.float32)
|
||||
# K = np.eye(4, dtype=np.float32)
|
||||
# K[:3,:3] = intrinsic()
|
||||
# cameras = PerspectiveCameras(device='cuda', R=ext[None, :, :3], T=ext[None, :, 3], focal_length=1,)# principal_point=fp[None, :], image_size=img_size[None, :])
|
||||
|
||||
cameras = cameras_from_opencv_projection(R=ext[None, :, :3], tvec=ext[None, :, 3], camera_matrix=torch.tensor(intrinsic()[None, :, :], device='cuda'), image_size=torch.tensor(img_size[None, :], device='cuda'))
|
||||
|
||||
raster_settings = RasterizationSettings(
|
||||
image_size=512,
|
||||
image_size=(480, 640),
|
||||
blur_radius=0.0,
|
||||
faces_per_pixel=1,
|
||||
bin_size=0
|
||||
@@ -166,14 +183,18 @@ class DepthRenderer(nn.Module):
|
||||
raster_settings=raster_settings
|
||||
)
|
||||
output = rasterizer(Meshes(verts[None,:,:], faces[None,:,:]))
|
||||
v2i = cameras.transform_points_screen(verts).cpu().numpy().astype(np.int32)[:,:2]
|
||||
depth = output.zbuf[0,:,:,0]
|
||||
|
||||
mask = depth != -1
|
||||
# dmin = depth.min()
|
||||
dmean = depth[mask].mean()
|
||||
# dmax = depth[mask].max()
|
||||
depth[mask] = depth[mask] - dmean
|
||||
depth[~mask] = 0.0
|
||||
# depth[mask] = depth[mask] - dmean
|
||||
# depth[~mask] = 0.0
|
||||
# mask = mask.astype(np.float32)
|
||||
|
||||
return depth
|
||||
# import plotly.express as ex
|
||||
# ex.imshow(depth.cpu().numpy()).show()
|
||||
|
||||
return depth, v2i
|
||||
|
||||
Reference in New Issue
Block a user