fix sfm depth bug; TODO: numba dependency
Browse files- handcrafted_solution.py +36 -8
handcrafted_solution.py
CHANGED
@@ -164,7 +164,20 @@ def get_smooth_uv_depth(vertices, depth, gest_seg_np, sfm_depth_np):
|
|
164 |
vertex_depth = np.array(vertex_depth)
|
165 |
return uv, vertex_depth
|
166 |
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
def get_SfM_depth(points3D, depth_np, gest_seg_np, K, R, t, dilate_r = 5):
|
169 |
'''Project 3D sfm pointcloud to the image plane '''
|
170 |
H, W = depth_np.shape[:2]
|
@@ -180,16 +193,31 @@ def get_SfM_depth(points3D, depth_np, gest_seg_np, K, R, t, dilate_r = 5):
|
|
180 |
world_to_cam = K @ Rt
|
181 |
xyz = world_to_cam @ XYZ1.transpose()
|
182 |
xyz = np.transpose(xyz)
|
183 |
-
|
|
|
|
|
184 |
us = us.astype(np.int32)
|
185 |
vs = vs.astype(np.int32)
|
|
|
|
|
186 |
for u,v,z,c in zip(us,vs,zs, rgb):
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
sfm_depth_np[j, i] = z
|
192 |
-
|
|
|
|
|
|
|
|
|
193 |
|
194 |
if DUMP_IMG:
|
195 |
filename_sfm_depth = 'sfm_depth.png'
|
@@ -546,7 +574,7 @@ def predict(entry, visualize=False, prune_dist_thr=600, depth_scale=2.5, ) -> Tu
|
|
546 |
elif i==2: # only visualize view 0,1
|
547 |
continue
|
548 |
'''
|
549 |
-
|
550 |
ade_seg = ade.resize(depth.size)
|
551 |
ade_seg_np = np.array(ade_seg).astype(np.uint8)
|
552 |
gest_seg = gest.resize(depth.size)
|
|
|
164 |
vertex_depth = np.array(vertex_depth)
|
165 |
return uv, vertex_depth
|
166 |
|
167 |
+
from numba import njit, prange
|
168 |
+
@njit(parallel=True)
|
169 |
+
def fill_range(u, v, z, dilate_r, c, sfm_depth_np, sfm_color_np, H, W):
|
170 |
+
for i in prange(max(0, u - dilate_r), min(W, u + dilate_r)):
|
171 |
+
for j in prange(max(0, v - dilate_r), min(H, v + dilate_r)) :
|
172 |
+
#checked+=1
|
173 |
+
existing_z = sfm_depth_np[j, i]
|
174 |
+
if z > 0:
|
175 |
+
if (existing_z!=0 and z < existing_z) or (existing_z==0):
|
176 |
+
sfm_depth_np[j, i] = z
|
177 |
+
if DUMP_IMG:
|
178 |
+
sfm_color_np[j, i] = c
|
179 |
+
return sfm_depth_np, sfm_color_np
|
180 |
+
|
181 |
def get_SfM_depth(points3D, depth_np, gest_seg_np, K, R, t, dilate_r = 5):
|
182 |
'''Project 3D sfm pointcloud to the image plane '''
|
183 |
H, W = depth_np.shape[:2]
|
|
|
193 |
world_to_cam = K @ Rt
|
194 |
xyz = world_to_cam @ XYZ1.transpose()
|
195 |
xyz = np.transpose(xyz)
|
196 |
+
#print('shape of xyz: ', xyz.shape)
|
197 |
+
us, vs, zs = xyz[:,0]/xyz[:,2], xyz[:,1]/xyz[:,2], xyz[:,2]
|
198 |
+
#print('dim of us uv zs rgb:', len(us), len(vs), len(zs), len(rgb))
|
199 |
us = us.astype(np.int32)
|
200 |
vs = vs.astype(np.int32)
|
201 |
+
#checked = 0
|
202 |
+
#print('dim of us uv zs rgb:', len(us), len(vs), len(zs), len(rgb))
|
203 |
for u,v,z,c in zip(us,vs,zs, rgb):
|
204 |
+
|
205 |
+
sfm_depth_np, sfm_color_np = fill_range(u, v, z, dilate_r, c, sfm_depth_np, sfm_color_np, H, W)
|
206 |
+
'''
|
207 |
+
i_range = range(max(0, u - dilate_r), min(W, u + dilate_r))
|
208 |
+
j_range = range(max(0, v - dilate_r), min(H, v + dilate_r))
|
209 |
+
for i in i_range:
|
210 |
+
for j in j_range:
|
211 |
+
#checked+=1
|
212 |
+
existing_z = sfm_depth_np[j, i]
|
213 |
+
if z > 0:
|
214 |
+
if (existing_z!=0 and z < existing_z) or (existing_z==0):
|
215 |
sfm_depth_np[j, i] = z
|
216 |
+
if DUMP_IMG:
|
217 |
+
sfm_color_np[j, i] = c
|
218 |
+
'''
|
219 |
+
|
220 |
+
#print(f'checked {checked} pts')
|
221 |
|
222 |
if DUMP_IMG:
|
223 |
filename_sfm_depth = 'sfm_depth.png'
|
|
|
574 |
elif i==2: # only visualize view 0,1
|
575 |
continue
|
576 |
'''
|
577 |
+
|
578 |
ade_seg = ade.resize(depth.size)
|
579 |
ade_seg_np = np.array(ade_seg).astype(np.uint8)
|
580 |
gest_seg = gest.resize(depth.size)
|