diff options
Diffstat (limited to 'scripts/flow/flow-warp-recflow.py')
| -rw-r--r-- | scripts/flow/flow-warp-recflow.py | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/scripts/flow/flow-warp-recflow.py b/scripts/flow/flow-warp-recflow.py new file mode 100644 index 0000000..5e0d7ac --- /dev/null +++ b/scripts/flow/flow-warp-recflow.py @@ -0,0 +1,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) + |
