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