ref: 4c89f06b3cc20affaa95e89e16d8db6637f1c86b
parent: c7093c18b067e8690bde47558cefe32284c84db3
author: Dan Zhu <zxdan@google.com>
date: Tue Jul 23 06:03:15 EDT 2019
Change the child classes methods names to align with parent's Add comments to explain the coordinate system Change-Id: Ib87ae479e08b4e3c3e7d9a3d1b4ab30718b42cfd
--- a/tools/3D-Reconstruction/MotionEST/Exhaust.py
+++ b/tools/3D-Reconstruction/MotionEST/Exhaust.py
@@ -30,7 +30,7 @@
"""
def search(self, cur_r, cur_c):
- min_loss = self.dist(cur_r, cur_c, [0, 0], self.metric)
+ min_loss = self.block_dist(cur_r, cur_c, [0, 0], self.metric)
cur_x = cur_c * self.blk_sz
cur_y = cur_r * self.blk_sz
ref_x = cur_x
@@ -39,7 +39,8 @@
for y in xrange(cur_y - self.wnd_sz, cur_y + self.wnd_sz):
for x in xrange(cur_x - self.wnd_sz, cur_x + self.wnd_sz):
if 0 <= x < self.width - self.blk_sz and 0 <= y < self.height - self.blk_sz:
- loss = self.dist(cur_r, cur_c, [y - cur_y, x - cur_x], self.metric)
+ loss = self.block_dist(cur_r, cur_c, [y - cur_y, x - cur_x],
+ self.metric)
if loss < min_loss:
min_loss = loss
ref_x = x
@@ -46,7 +47,7 @@
ref_y = y
return ref_x, ref_y
- def est(self):
+ def motion_field_estimation(self):
for i in xrange(self.num_row):
for j in xrange(self.num_col):
ref_x, ref_y = self.search(i, j)
@@ -101,7 +102,7 @@
"""
def search(self, cur_r, cur_c):
- dist_loss = self.dist(cur_r, cur_c, [0, 0], self.metric)
+ dist_loss = self.block_dist(cur_r, cur_c, [0, 0], self.metric)
nb_loss = self.neighborLoss(cur_r, cur_c, np.array([0, 0]))
min_loss = dist_loss + self.beta * nb_loss
cur_x = cur_c * self.blk_sz
@@ -113,8 +114,8 @@
for y in xrange(cur_y - self.wnd_sz, cur_y + self.wnd_sz):
for x in xrange(cur_x - self.wnd_sz, cur_x + self.wnd_sz):
if 0 <= x < self.width - self.blk_sz and 0 <= y < self.height - self.blk_sz:
- dist_loss = self.dist(cur_r, cur_c, [y - cur_y, x - cur_x],
- self.metric)
+ dist_loss = self.block_dist(cur_r, cur_c, [y - cur_y, x - cur_x],
+ self.metric)
nb_loss = self.neighborLoss(cur_r, cur_c, [y - cur_y, x - cur_x])
loss = dist_loss + self.beta * nb_loss
if loss < min_loss:
@@ -123,7 +124,7 @@
ref_y = y
return ref_x, ref_y
- def est(self):
+ def motion_field_estimation(self):
for i in xrange(self.num_row):
for j in xrange(self.num_col):
ref_x, ref_y = self.search(i, j)
--- a/tools/3D-Reconstruction/MotionEST/HornSchunck.py
+++ b/tools/3D-Reconstruction/MotionEST/HornSchunck.py
@@ -120,7 +120,7 @@
avg[i, j] += self.mf[i + r, j + c] / 12.0
return avg
- def est(self):
+ def motion_field_estimation(self):
count = 0
"""
u_{n+1} = ~u_n - Ix(Ix.~u_n+Iy.~v+It)/(IxIx+IyIy+alpha^2)
@@ -136,7 +136,7 @@
count += 1
self.mf *= self.blk_sz
- def est_mat(self):
+ def motion_field_estimation_mat(self):
row_idx = []
col_idx = []
data = []
@@ -145,8 +145,7 @@
b = np.zeros((N, 1))
for i in xrange(self.num_row):
for j in xrange(self.num_col):
- """(IxIx+alpha^2)u+IxIy.v-alpha^2~u IxIy.u+(IyIy+alpha^2)v-alpha^2~v
- """
+ """(IxIx+alpha^2)u+IxIy.v-alpha^2~u IxIy.u+(IyIy+alpha^2)v-alpha^2~v"""
u_idx = i * 2 * self.num_col + 2 * j
v_idx = u_idx + 1
b[u_idx, 0] = -self.Ix[i, j] * self.It[i, j]
--- a/tools/3D-Reconstruction/MotionEST/Util.py
+++ b/tools/3D-Reconstruction/MotionEST/Util.py
@@ -32,6 +32,8 @@
for i in xrange(num_row):
for j in xrange(num_col):
center = (j * blk_sz + 0.5 * blk_sz, i * blk_sz + 0.5 * blk_sz)
+ """mf[i,j][0] is the row shift and mf[i,j][1] is the column shift In PIL coordinates, head[0] is x (column shift) and head[1] is y (row shift).
+ """
head = (center[0] + mf[i, j][1], center[1] + mf[i, j][0])
draw.line([center, head], fill=(255, 0, 0, 255))
return Image.alpha_composite(img_rgba, mf_layer)