kcml commited on
Commit
a049df6
·
1 Parent(s): 120649d

fix sfm depth bug; TODO: numba dependency

Browse files
Files changed (1) hide show
  1. 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
- # TODO: timeit
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- us, vs, zs = xyz[0]/xyz[2], xyz[1]/xyz[2], xyz[2]
 
 
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
- for i in range(max(0, u - dilate_r), min(W, u + dilate_r)):
188
- for j in range(max(0, v - dilate_r), min(H, v + dilate_r)):
189
- if z > 0:
190
- if (sfm_depth_np[j, i]!=0 and z < sfm_depth_np[j, i]) or (sfm_depth_np[j, i]==0):
 
 
 
 
 
 
 
191
  sfm_depth_np[j, i] = z
192
- sfm_color_np[j, i] = c
 
 
 
 
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)