import matplotlib
# matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
# ['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg',
# 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']
import numpy as np
from scipy.signal import resample_poly
[docs]def plot_quiver_2d(flow, title='optical flow'):
u = flow[:, :, 0]
v = flow[:, :, 1]
num_rows = np.shape(flow)[0]
num_cols = np.shape(flow)[1]
x = np.arange(0, num_rows, 1)
y = np.arange(0, num_cols, 1)
y_pos, x_pos = np.meshgrid(y, x)
fig, ax = plt.subplots()
ax.quiver(y_pos, x_pos, v, u)
plt.gca().invert_yaxis()
plt.title(title)
plt.show()
[docs]def plot_quiver_3d(flow, downsample=2, title='3D optical flow', normalize=False):
u = flow[0, :, :, :]
v = flow[1, :, :, :]
w = flow[2, :, :, :]
num_x = np.shape(flow)[1]
num_y = np.shape(flow)[2]
num_z = np.shape(flow)[3]
factors = [(1, downsample), (1, downsample), (1, downsample)]
for k in range(3):
u = resample_poly(u, factors[k][0], factors[k][1], axis=k)
v = resample_poly(v, factors[k][0], factors[k][1], axis=k)
w = resample_poly(w, factors[k][0], factors[k][1], axis=k)
x = np.arange(0, int(num_x / downsample), 1)
y = np.arange(0, int(num_y / downsample), 1)
z = np.arange(0, int(num_z / downsample), 1)
x_pos, y_pos, z_pos = np.meshgrid(x, y, z)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.quiver3D(x_pos, y_pos, z_pos, u, v, w, length=0.1, normalize=normalize)
plt.title(title)
plt.show()