Spaces:
Running
on
Zero
Running
on
Zero
File size: 1,178 Bytes
709cfd2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import torch
import numpy as np
import cv2
from sklearn.linear_model import RANSACRegressor
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
degree = 1
poly_features = PolynomialFeatures(degree=degree, include_bias=False)
ransac = RANSACRegressor(max_trials=1000)
model = make_pipeline(poly_features, ransac)
def recover_metric_depth_ransac(pred, gt, mask):
pred = pred.astype(np.float32)
gt = gt.astype(np.float32)
mask_gt = gt[mask].astype(np.float32)
mask_pred = pred[mask].astype(np.float32)
## depth -> log depth
mask_gt = np.log(mask_gt + 1.)
try:
model.fit(mask_pred[:, None], mask_gt[:, None])
a, b = model.named_steps['ransacregressor'].estimator_.coef_, model.named_steps['ransacregressor'].estimator_.intercept_
a = a.item()
b = b.item()
except:
a, b = 1, 0
if a > 0:
pred_metric = a * pred + b
else:
pred_mean = np.mean(mask_pred)
gt_mean = np.mean(mask_gt)
pred_metric = pred * (gt_mean / pred_mean)
## log depth -> depth
pred_metric = np.exp(pred_metric) - 1.
return pred_metric |