xref: /aosp_15_r20/external/libvpx/tools/3D-Reconstruction/MotionEST/GroundTruth.py (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker##  Copyright (c) 2020 The WebM project authors. All Rights Reserved.
2*fb1b10abSAndroid Build Coastguard Worker##
3*fb1b10abSAndroid Build Coastguard Worker##  Use of this source code is governed by a BSD-style license
4*fb1b10abSAndroid Build Coastguard Worker##  that can be found in the LICENSE file in the root of the source
5*fb1b10abSAndroid Build Coastguard Worker##  tree. An additional intellectual property rights grant can be found
6*fb1b10abSAndroid Build Coastguard Worker##  in the file PATENTS.  All contributing project authors may
7*fb1b10abSAndroid Build Coastguard Worker##  be found in the AUTHORS file in the root of the source tree.
8*fb1b10abSAndroid Build Coastguard Worker##
9*fb1b10abSAndroid Build Coastguard Worker
10*fb1b10abSAndroid Build Coastguard Worker#coding : utf - 8
11*fb1b10abSAndroid Build Coastguard Workerimport numpy as np
12*fb1b10abSAndroid Build Coastguard Workerimport numpy.linalg as LA
13*fb1b10abSAndroid Build Coastguard Workerfrom MotionEST import MotionEST
14*fb1b10abSAndroid Build Coastguard Worker"""Ground Truth:
15*fb1b10abSAndroid Build Coastguard Worker
16*fb1b10abSAndroid Build Coastguard Worker  Load in ground truth motion field and mask
17*fb1b10abSAndroid Build Coastguard Worker"""
18*fb1b10abSAndroid Build Coastguard Worker
19*fb1b10abSAndroid Build Coastguard Worker
20*fb1b10abSAndroid Build Coastguard Workerclass GroundTruth(MotionEST):
21*fb1b10abSAndroid Build Coastguard Worker  """constructor:
22*fb1b10abSAndroid Build Coastguard Worker
23*fb1b10abSAndroid Build Coastguard Worker    cur_f:current
24*fb1b10abSAndroid Build Coastguard Worker    frame ref_f:reference
25*fb1b10abSAndroid Build Coastguard Worker    frame blk_sz:block size
26*fb1b10abSAndroid Build Coastguard Worker    gt_path:ground truth motion field file path
27*fb1b10abSAndroid Build Coastguard Worker    """
28*fb1b10abSAndroid Build Coastguard Worker
29*fb1b10abSAndroid Build Coastguard Worker  def __init__(self, cur_f, ref_f, blk_sz, gt_path, mf=None, mask=None):
30*fb1b10abSAndroid Build Coastguard Worker    self.name = 'ground truth'
31*fb1b10abSAndroid Build Coastguard Worker    super(GroundTruth, self).__init__(cur_f, ref_f, blk_sz)
32*fb1b10abSAndroid Build Coastguard Worker    self.mask = np.zeros((self.num_row, self.num_col), dtype=bool)
33*fb1b10abSAndroid Build Coastguard Worker    if gt_path:
34*fb1b10abSAndroid Build Coastguard Worker      with open(gt_path) as gt_file:
35*fb1b10abSAndroid Build Coastguard Worker        lines = gt_file.readlines()
36*fb1b10abSAndroid Build Coastguard Worker        for i in xrange(len(lines)):
37*fb1b10abSAndroid Build Coastguard Worker          info = lines[i].split(';')
38*fb1b10abSAndroid Build Coastguard Worker          for j in xrange(len(info)):
39*fb1b10abSAndroid Build Coastguard Worker            x, y = info[j].split(',')
40*fb1b10abSAndroid Build Coastguard Worker            #-, - stands for nothing
41*fb1b10abSAndroid Build Coastguard Worker            if x == '-' or y == '-':
42*fb1b10abSAndroid Build Coastguard Worker              self.mask[i, -j - 1] = True
43*fb1b10abSAndroid Build Coastguard Worker              continue
44*fb1b10abSAndroid Build Coastguard Worker            #the order of original file is flipped on the x axis
45*fb1b10abSAndroid Build Coastguard Worker            self.mf[i, -j - 1] = np.array([float(y), -float(x)], dtype=int)
46*fb1b10abSAndroid Build Coastguard Worker    else:
47*fb1b10abSAndroid Build Coastguard Worker      self.mf = mf
48*fb1b10abSAndroid Build Coastguard Worker      self.mask = mask
49