MCPcopy Create free account
hub / github.com/drinkingcoder/FlowFormer-Official / pca_image

Method pca_image

core/utils/flow_transforms.py:326–398  ·  view source on GitHub ↗
(self, rgb)

Source from the content-addressed store, hash-verified

324 return inputs,target
325
326 def pca_image(self, rgb):
327 eig = np.dot(rgb, self.eigvec)
328 max_rgb = np.clip(rgb,0,np.inf).max((0,1))
329 min_rgb = rgb.min((0,1))
330 mean_rgb = rgb.mean((0,1))
331 max_abs_eig = np.abs(eig).max((0,1))
332 max_l = np.sqrt(np.sum(max_abs_eig*max_abs_eig))
333 mean_eig = np.dot(mean_rgb, self.eigvec)
334
335 # no-mean stuff
336 eig -= mean_eig[np.newaxis, np.newaxis]
337
338 for c in range(3):
339 if max_abs_eig[c] > 1e-2:
340 mean_eig[c] /= max_abs_eig[c]
341 eig[:,:,c] = eig[:,:,c] / max_abs_eig[c];
342 eig[:,:,c] = np.power(np.abs(eig[:,:,c]),self.pow_nomean[c]) *\
343 ((eig[:,:,c] > 0) -0.5)*2
344 eig[:,:,c] = eig[:,:,c] + self.add_nomean[c]
345 eig[:,:,c] = eig[:,:,c] * self.mult_nomean[c]
346 eig += mean_eig[np.newaxis,np.newaxis]
347
348 # withmean stuff
349 if max_abs_eig[0] > 1e-2:
350 eig[:,:,0] = np.power(np.abs(eig[:,:,0]),self.pow_withmean[0]) * \
351 ((eig[:,:,0]>0)-0.5)*2;
352 eig[:,:,0] = eig[:,:,0] + self.add_withmean[0];
353 eig[:,:,0] = eig[:,:,0] * self.mult_withmean[0];
354
355 s = np.sqrt(eig[:,:,1]*eig[:,:,1] + eig[:,:,2] * eig[:,:,2])
356 smask = s > 1e-2
357 s1 = np.power(s, self.pow_withmean[1]);
358 s1 = np.clip(s1 + self.add_withmean[1], 0,np.inf)
359 s1 = s1 * self.mult_withmean[1]
360 s1 = s1 * smask + s*(1-smask)
361
362 # color angle
363 if self.col_angle!=0:
364 temp1 = np.cos(self.col_angle) * eig[:,:,1] - np.sin(self.col_angle) * eig[:,:,2]
365 temp2 = np.sin(self.col_angle) * eig[:,:,1] + np.cos(self.col_angle) * eig[:,:,2]
366 eig[:,:,1] = temp1
367 eig[:,:,2] = temp2
368
369 # to origin magnitude
370 for c in range(3):
371 if max_abs_eig[c] > 1e-2:
372 eig[:,:,c] = eig[:,:,c] * max_abs_eig[c]
373
374 if max_l > 1e-2:
375 l1 = np.sqrt(eig[:,:,0]*eig[:,:,0] + eig[:,:,1]*eig[:,:,1] + eig[:,:,2]*eig[:,:,2])
376 l1 = l1 / max_l
377
378 eig[:,:,1][smask] = (eig[:,:,1] / s * s1)[smask]
379 eig[:,:,2][smask] = (eig[:,:,2] / s * s1)[smask]
380 #eig[:,:,1] = (eig[:,:,1] / s * s1) * smask + eig[:,:,1] * (1-smask)
381 #eig[:,:,2] = (eig[:,:,2] / s * s1) * smask + eig[:,:,2] * (1-smask)
382
383 if max_l > 1e-2:

Callers 1

__call__Method · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected