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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
import os
import sys
from shutil import move, copyfile
from PIL import Image, ImageOps
from shutil import copyfile, rmtree
import numpy as np
import cv2
from_dir = "IMG_1734/"
to_dir = "IMG_1738/"
render_dir = "flowwarp_transfer_cross/"
if os.path.exists(render_dir):
rmtree(render_dir)
os.makedirs(render_dir)
os.makedirs(render_dir + 'out_fwd_from/')
os.makedirs(render_dir + 'out_rvr_from/')
os.makedirs(render_dir + 'out_fwd_from_rec/')
os.makedirs(render_dir + 'out_rvr_from_rec/')
os.makedirs(render_dir + 'out_fwd_to/')
os.makedirs(render_dir + 'out_rvr_to/')
os.makedirs(render_dir + 'out_fwd_to_rec/')
os.makedirs(render_dir + 'out_rvr_to_rec/')
def warp_flow(img, flow):
h, w = flow.shape[:2]
flow = -flow
flow[:,:,0] += np.arange(w)
flow[:,:,1] += np.arange(h)[:,np.newaxis]
res = cv2.remap(img, flow, None, cv2.INTER_LINEAR)
return res
def load(path):
pil_image = Image.open(path).convert('RGB')
im = np.array(pil_image)
im = im[:, :, ::-1].copy()
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
return im, gray
def get_files(d):
return sorted([i.name for i in os.scandir(d) if os.path.isfile(d + i.name) and not i.name.startswith('.') and i.name.endswith('png')])
hsv = []
prev = None
prev_bgr = None
gray = None
prev_gray = None
prev_from = None
prev_fwd_from = None
prev_rvr_from = None
prev_from_gray = None
prev_to = None
prev_fwd_to = None
prev_rvr_to = None
prev_to_gray = None
from_files = get_files(from_dir)
to_files = get_files(to_dir)
for i,from_fn in enumerate(from_files):
print(from_fn)
to_fn = to_files[i]
# load image and convert to grayscale
from_im, from_gray = load(from_dir + from_fn)
to_im, to_gray = load(to_dir + to_fn)
# store first frame
if prev_from_gray is None:
prev_fwd_from = from_im
prev_rvr_from = from_im
prev_from_gray = from_gray
prev_fwd_to = to_im
prev_rvr_to = to_im
prev_to_gray = to_gray
#hsv = np.zeros((256,512,3))
#hsv[...,1] = 255
continue
# compute optical flow
from_fwd_flow = cv2.calcOpticalFlowFarneback(prev_from_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#from_rvr_flow = cv2.calcOpticalFlowFarneback(from_gray, prev_from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#to_fwd_flow = cv2.calcOpticalFlowFarneback(prev_to_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#to_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, prev_to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#cross_fwd_flow = cv2.calcOpticalFlowFarneback(from_gray, to_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#cross_rvr_flow = cv2.calcOpticalFlowFarneback(to_gray, from_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
#mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
#hsv[...,0] = ang * 180 / np.pi / 2
#hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2)
#bgr = cv2.cvtColor(hsv.astype('uint8'), cv2.COLOR_HSV2BGR)
#if prev_bgr is None:
# prev_bgr = np.copy(bgr)
# continue
#if (i % 10) == 3:
# wd = "test/"
#elif (i % 10) == 6:
# wd = "val/"
#else:
# wd = "train/"
fwd_flow = from_fwd_flow
#rvr_flow = from_rvr_flow
out_fwd_from = warp_flow(from_im, fwd_flow)
out_fwd_from_rec = warp_flow(prev_fwd_from, fwd_flow)
out_fwd_to = warp_flow(to_im, fwd_flow)
out_fwd_to_rec = warp_flow(prev_fwd_to, fwd_flow)
#out_rvr_from = warp_flow(from_im, rvr_flow)
#out_rvr_from_rec = warp_flow(prev_rvr_from, rvr_flow)
#out_rvr_to = warp_flow(to_im, rvr_flow)
#out_rvr_to_rec = warp_flow(prev_rvr_to, rvr_flow)
ren = "frame_{:05d}.png".format(i)
#cv2.imwrite(render_dir + "A/" + wd + ren, prev_bgr)
#cv2.imwrite(render_dir + "B/" + wd + ren, bgr)
cv2.imwrite(render_dir + "out_fwd_from/" + ren, out_fwd_from)
cv2.imwrite(render_dir + "out_fwd_from_rec/" + ren, out_fwd_from_rec)
cv2.imwrite(render_dir + "out_fwd_to/" + ren, out_fwd_to)
cv2.imwrite(render_dir + "out_fwd_to_rec/" + ren, out_fwd_to_rec)
#cv2.imwrite(render_dir + "out_rvr_from/" + ren, out_rvr_from)
#cv2.imwrite(render_dir + "out_rvr_from_rec/" + ren, out_rvr_from_rec)
#cv2.imwrite(render_dir + "out_rvr_to/" + ren, out_rvr_to)
#cv2.imwrite(render_dir + "out_rvr_to_rec/" + ren, out_rvr_to_rec)
#cv2.imwrite(render_dir + "next/" + ren, out_next)
# copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
prev_from_gray = from_gray
prev_to_gray = to_gray
if i > 3:
prev_from_gray = cv2.cvtColor(out_fwd_from_rec, cv2.COLOR_BGR2GRAY)
prev_fwd_from = out_fwd_from_rec
prev_fwd_to = out_fwd_to_rec
#prev_rvr_from = out_rvr_from_rec
#prev_rvr_to = out_rvr_to_rec
#prev_bgr = np.copy(bgr)
|