summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE1
-rw-r--r--canny-cv.py26
-rwxr-xr-xdataset.sh5
-rw-r--r--options/base_options.py1
-rw-r--r--options/dataset_options.py164
-rw-r--r--scripts/builders/flow-dir.py2
-rwxr-xr-xscripts/builders/mogrify-dir.py119
-rw-r--r--scripts/flow/diff.py39
-rw-r--r--scripts/flow/flow-diff.py82
-rw-r--r--scripts/flow/flow-dir.py81
-rw-r--r--scripts/flow/flow-warp-recflow-recursive-fwd.py138
-rw-r--r--scripts/flow/flow-warp-recflow.py139
-rw-r--r--scripts/flow/flow-warp-recursive.py82
-rw-r--r--scripts/flow/flow-warp.py82
-rw-r--r--test.py4
15 files changed, 947 insertions, 18 deletions
diff --git a/LICENSE b/LICENSE
index d75f0ee..49ca5b8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,4 @@
+--------------------------- LICENSE FOR pytorch-pix2pix ------------------------
Copyright (c) 2017, Jun-Yan Zhu and Taesung Park
All rights reserved.
diff --git a/canny-cv.py b/canny-cv.py
index f8b5dc3..c9ece6b 100644
--- a/canny-cv.py
+++ b/canny-cv.py
@@ -69,6 +69,10 @@ if __name__ == '__main__':
edges_path = render_dir + "frame_{:05d}.png".format(i+1)
render_path = render_dir + "ren_{:05d}.png".format(i+1)
+ image_pil = Image.fromarray(im, mode='RGB')
+ image_pil.save(tmp_path)
+ os.rename(tmp_path, render_path)
+
if dataset.name() == 'RecursiveDatasetDataLoader':
# print(visuals.keys())
# s = 256
@@ -90,19 +94,15 @@ if __name__ == '__main__':
tmp_im = im.copy().astype('uint8')
#print(im.shape, im.dtype)
- image_pil = Image.fromarray(tmp_im, mode='RGB')
- image_pil.save(tmp_path)
- os.rename(tmp_path, render_path)
-
- image_pil = Image.fromarray(im, mode='RGB')
- image_pil = crop_image(image_pil, (0.50, 0.50), 0.5)
- im = np.asarray(image_pil).astype('uint8')
- #print(im.shape, im.dtype)
- opencv_image = im[:, :, ::-1].copy()
- opencv_image = cv2.GaussianBlur(opencv_image, (blur,blur), sigma)
- opencv_image = cv2.Canny(opencv_image, canny_lo, canny_hi)
- cv2.imwrite(tmp_path, opencv_image)
- os.rename(tmp_path, edges_path)
+ image_pil = Image.fromarray(im, mode='RGB')
+ image_pil = crop_image(image_pil, (0.50, 0.50), 0.5)
+ im = np.asarray(image_pil).astype('uint8')
+ #print(im.shape, im.dtype)
+ opencv_image = im[:, :, ::-1].copy()
+ opencv_image = cv2.GaussianBlur(opencv_image, (blur,blur), sigma)
+ opencv_image = cv2.Canny(opencv_image, canny_lo, canny_hi)
+ cv2.imwrite(tmp_path, opencv_image)
+ os.rename(tmp_path, edges_path)
webpage.save()
diff --git a/dataset.sh b/dataset.sh
index f331566..2ac4977 100755
--- a/dataset.sh
+++ b/dataset.sh
@@ -1,2 +1,5 @@
-python datasets/combine_A_and_B.py --fold_A /home/lens/Desktop/thumbs/woodscaled_4/A --fold_B /home/lens/Desktop/thumbs/woodscaled_4/B --fold_AB datasets/woodscaled_4/
+python datasets/combine_A_and_B.py \
+ --fold_A /home/lens/Desktop/thumbs/woodscaled_4/A \
+ --fold_B /home/lens/Desktop/thumbs/woodscaled_4/B \
+ --fold_AB datasets/woodscaled_4/
diff --git a/options/base_options.py b/options/base_options.py
index 5bdd85e..150174b 100644
--- a/options/base_options.py
+++ b/options/base_options.py
@@ -49,6 +49,7 @@ class BaseOptions():
self.initialize()
self.opt = self.parser.parse_args()
self.opt.isTrain = self.isTrain # train or test
+ return self.opt
str_ids = self.opt.gpu_ids.split(',')
self.opt.gpu_ids = []
diff --git a/options/dataset_options.py b/options/dataset_options.py
new file mode 100644
index 0000000..2547d11
--- /dev/null
+++ b/options/dataset_options.py
@@ -0,0 +1,164 @@
+from .base_options import BaseOptions
+
+class DatasetOptions(BaseOptions):
+ def initialize(self):
+ # BaseOptions.initialize(self)
+ # type = int, float, str OR action='store_true'
+
+ # self.parser.add_argument(
+ # '--',
+ # type=int,
+ # default=0,
+ # help=''
+ # )
+
+ self.parser.add_argument(
+ '--in_dir',
+ type=str,
+ required=True,
+ help='input directory'
+ )
+
+ self.parser.add_argument(
+ '--out_dir',
+ type=str,
+ required=True,
+ help='output directory'
+ )
+
+ self.parser.add_argument(
+ '--split',
+ action='store_true',
+ help='construct train/test/split for this output, as A'
+ )
+
+ self.parser.add_argument(
+ '--ab',
+ action='store_true',
+ help='construct test split into directory A and B, where B = in_dir'
+ )
+
+ self.parser.add_argument(
+ '--mov',
+ action='store_true',
+ help='generate video from output directory'
+ )
+
+ self.parser.add_argument(
+ '--scp',
+ action='store_true',
+ help='scp this file somewhere'
+ )
+
+ self.parser.add_argument(
+ '--scp-to',
+ type=str,
+ default="jules@asdf.us:asdf/neural/",
+ help='scp destination'
+ )
+
+ ## IMAGE FILTERS
+
+ ### GRAYSCALE
+
+ self.parser.add_argument(
+ '--grayscale',
+ action='store_true',
+ help='convert image to grayscale first'
+ )
+
+ ### CLAHE
+
+ self.parser.add_argument(
+ '--clahe',
+ action='store_true',
+ help='apply clahe contrast correction'
+ )
+
+ self.parser.add_argument(
+ '--clip-limit',
+ default=2.0,
+ type=float,
+ help='clip limit for clahe algorithm (1.0 is subtle, 4.0 is aggressive)'
+ )
+
+ ### POSTERIZE
+
+ self.parser.add_argument(
+ '--posterize',
+ action='store_true',
+ help='posterize image'
+ )
+
+ self.parser.add_argument(
+ '--spatial-window',
+ default=16,
+ type=int,
+ help='spatial window for quantize'
+ )
+
+ self.parser.add_argument(
+ '--color-window',
+ default=64,
+ type=int,
+ help='color window for quantize'
+ )
+
+ ### BRIGHTNESS GRADIENT
+
+ self.parser.add_argument(
+ '--brightness-gradient',
+ action='store_true',
+ help='gradiate from first frame to last (done in Lab colorspace)'
+ )
+
+ self.parser.add_argument(
+ '--brightness-sigma',
+ default=64,
+ type=int,
+ help='width of brightness gradient along L axis'
+ )
+
+ ### BLUR
+
+ self.parser.add_argument(
+ '--blur',
+ default=0,
+ type=int,
+ help='blur image by N'
+ )
+
+ self.parser.add_argument(
+ '--blur-sigma',
+ default=0.0,
+ type=float,
+ help='blur sigma'
+ )
+
+ ### CANNY EDGE DETECTION
+
+ self.parser.add_argument(
+ '--canny',
+ action='store_true',
+ help='do canny edge detection on image'
+ )
+
+ self.parser.add_argument(
+ '--canny_lo',
+ default=100,
+ type=int,
+ help='canny low threshold'
+ )
+
+ self.parser.add_argument(
+ '--canny_high',
+ default=200,
+ type=int,
+ help='canny high threshold'
+ )
+
+ def parse(self):
+ if not self.initialized:
+ self.initialize()
+ self.opt = self.parser.parse_args()
+ return self.opt \ No newline at end of file
diff --git a/scripts/builders/flow-dir.py b/scripts/builders/flow-dir.py
index 620ba32..b59a0ac 100644
--- a/scripts/builders/flow-dir.py
+++ b/scripts/builders/flow-dir.py
@@ -62,7 +62,6 @@ for i,fn in enumerate(sorted(os.listdir(work_dir))):
wd = "train/"
if i == 1:
- prev_hsv = np.copy(hsv)
prev_bgr = np.copy(bgr)
continue
@@ -70,6 +69,5 @@ for i,fn in enumerate(sorted(os.listdir(work_dir))):
cv2.imwrite(render_dir + "B/" + wd + ren, bgr)
# copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
prev = im
- prev_hsv = np.copy(hsv)
prev_bgr = np.copy(bgr)
diff --git a/scripts/builders/mogrify-dir.py b/scripts/builders/mogrify-dir.py
new file mode 100755
index 0000000..b7370f5
--- /dev/null
+++ b/scripts/builders/mogrify-dir.py
@@ -0,0 +1,119 @@
+#!/Users/user/anaconda/envs/cv/bin/python
+
+import os
+
+import sys
+sys.path.insert(0, '/Users/user/neural/pix2pix')
+from options.dataset_options import DatasetOptions
+
+from shutil import move, copyfile
+from PIL import Image, ImageOps
+from shutil import copyfile, rmtree
+import glob
+import numpy as np
+import subprocess
+import cv2
+
+opt = DatasetOptions().parse()
+
+in_dir = opt.in_dir
+out_dir = opt.out_dir
+out_base = os.path.basename(out_dir)
+
+if os.path.exists(out_dir):
+ rmtree(out_dir)
+
+os.makedirs(out_dir)
+if opt.split is True:
+ os.makedirs(out_dir + "A/")
+ os.makedirs(out_dir + "A/train/")
+ os.makedirs(out_dir + "A/test/")
+ os.makedirs(out_dir + "A/val/")
+ if opt.ab is True:
+ os.makedirs(out_dir + "B/")
+ os.makedirs(out_dir + "B/train/")
+ os.makedirs(out_dir + "B/test/")
+ os.makedirs(out_dir + "B/val/")
+
+file = open(os.path.join(out_dir, "opt.txt"), "w")
+for arg in vars(opt):
+ file.write("{}: {}\n".format(arg, getattr(opt, arg)))
+file.close()
+
+images = sorted(glob.glob(os.path.join(in_dir, '*.*g')))
+image_count = len(images)
+print("{}, {} images => {}".format(in_dir, image_count, out_base))
+for i, fn in enumerate(images):
+ pil_image = Image.open(fn).convert('RGB')
+ img = np.array(pil_image)
+ img = img[:, :, ::-1].copy()
+
+ out_file = "frame_{:05d}.png".format(i)
+
+ if i > 0 and (i % 100) == 0:
+ print("{}...".format(i))
+
+ lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
+ l, a, b = cv2.split(lab)
+
+ if opt.clahe is True:
+ clahe = cv2.createCLAHE(clipLimit=opt.clip_limit, tileGridSize=(8,8))
+ l = clahe.apply(l)
+
+ if opt.brightness_gradient is True:
+ l = np.add(l.astype('float64'), ((i / image_count) - 0.5) * opt.brightness_sigma)
+ np.clip(l, 0, 255, out=l)
+ l = l.astype('uint8')
+
+ if opt.brightness_gradient is True or opt.clahe is True:
+ limg = cv2.merge((l,a,b))
+ img = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
+
+ if opt.posterize is True:
+ img = cv2.pyrMeanShiftFiltering(img, opt.spatial_window, opt.color_window)
+ if opt.grayscale is True:
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
+ if opt.blur != 0:
+ img = cv2.GaussianBlur(img, (opt.blur, opt.blur), opt.blur_sigma)
+ if opt.canny is True:
+ img = cv2.Canny(img, opt.canny_lo, opt.canny_hi)
+
+ if opt.split is True:
+ if (i % 10) == 3:
+ wd = "test/"
+ elif (i % 10) == 6:
+ wd = "val/"
+ else:
+ wd = "train/"
+
+ cv2.imwrite(out_dir + "A/" + wd + out_file, img)
+ if opt.ab is True:
+ copyfile(fn, out_dir + "B/" + wd + out_file)
+
+ else:
+ cv2.imwrite(os.path.join(out_dir, out_file), img)
+
+print("{}...".format(image_count))
+
+if opt.mov:
+ print("ffmpeg...")
+ mov_file = "{}.mp4".format(out_base)
+ cmd = ("ffmpeg",
+ "-loglevel", "quiet",
+ "-i", os.path.join(out_dir, "frame_%05d.png"),
+ "-y", "-c:v", "libx264", "-vf", "fps=30", "-pix_fmt", "yuv420p",
+ mov_file)
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output, error = process.communicate()
+
+ if opt.scp:
+ print("scp...")
+ cmd = ("scp", mov_file, opt.scp)
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output, error = process.communicate()
+
+ print("https://asdf.us/neural/" + mov_file)
+
+ # cmd = ("mplayer", mov_file)
+ # process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ # output, error = process.communicate()
diff --git a/scripts/flow/diff.py b/scripts/flow/diff.py
new file mode 100644
index 0000000..555f2f7
--- /dev/null
+++ b/scripts/flow/diff.py
@@ -0,0 +1,39 @@
+#!python3
+
+from PIL import Image
+import numpy as np
+import os
+import cv2
+
+dir = 'IMG_1734/'
+diff_dir = dir + 'diff/'
+
+if not os.path.exists(diff_dir):
+ os.mkdir(diff_dir)
+
+files = sorted([i.name for i in os.scandir(dir) if os.path.isfile(dir + i.name) and not i.name.startswith('.')])
+
+last_im = None
+k = 0
+for i, fn in enumerate(files):
+ pil_image = Image.open(dir + fn).convert('RGB')
+ im = np.array(pil_image)
+
+ tmp_im = im.copy().astype('float64')
+ print("{} {}".format(i, fn))
+ if last_im is not None:
+ im = (last_im - tmp_im)
+ im = cv2.normalize(im, None, 0, 255, cv2.NORM_MINMAX)
+ image_pil = Image.fromarray(im.astype('uint8'), mode='RGB')
+ image_pil.save(diff_dir + "frame_{:05}.png".format(i))
+
+ last_im = tmp_im.astype('float64')
+
+def fade_images(a, b, n):
+ for j in range(60):
+ r = j / 60
+ im = a * (r) + b * (1-r)
+ image_pil = Image.fromarray(im.astype('uint8'), mode='RGB')
+ image_pil.save(diff_dir + "frame_{:05}.png".format(j+k))
+ k += 60
+
diff --git a/scripts/flow/flow-diff.py b/scripts/flow/flow-diff.py
new file mode 100644
index 0000000..4bd4465
--- /dev/null
+++ b/scripts/flow/flow-diff.py
@@ -0,0 +1,82 @@
+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
+
+work_dir = "IMG_1734/"
+render_dir = "IMG_1734/flowdiff/"
+
+if os.path.exists(render_dir):
+ rmtree(render_dir)
+
+os.makedirs(render_dir)
+os.makedirs(render_dir + 'prev/')
+os.makedirs(render_dir + 'next/')
+
+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
+
+hsv = []
+prev = None
+prev_bgr = None
+gray = None
+prev_gray = None
+
+for i,fn in enumerate(sorted(os.listdir(work_dir))):
+ if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn):
+ continue
+
+ # load image and convert to grayscale
+ pil_image = Image.open(work_dir + fn).convert('RGB')
+ im = np.array(pil_image)
+ im = im[:, :, ::-1].copy()
+ gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
+
+ # store first frame
+ if prev_gray is None:
+ prev = im
+ prev_gray = gray
+ #hsv = np.zeros((256,512,3))
+ #hsv[...,1] = 255
+ continue
+
+ # compute optical flow
+ flow = cv2.calcOpticalFlowFarneback(prev_gray, 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/"
+
+ out_prev = warp_flow(prev, flow)
+ out_next = warp_flow(im, 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 + "prev/" + ren, out_prev)
+ cv2.imwrite(render_dir + "next/" + ren, out_next)
+ # copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
+ prev = im
+ prev_gray = gray
+ #prev_bgr = np.copy(bgr)
+
diff --git a/scripts/flow/flow-dir.py b/scripts/flow/flow-dir.py
new file mode 100644
index 0000000..60c1dd9
--- /dev/null
+++ b/scripts/flow/flow-dir.py
@@ -0,0 +1,81 @@
+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
+
+work_dir = "IMG_1734/"
+render_dir = "IMG_1734/diff/"
+
+if os.path.exists(render_dir):
+ rmtree(render_dir)
+
+os.makedirs(render_dir)
+os.makedirs(render_dir + "A/")
+os.makedirs(render_dir + "A/train/")
+os.makedirs(render_dir + "A/test/")
+os.makedirs(render_dir + "A/val/")
+os.makedirs(render_dir + "B/")
+os.makedirs(render_dir + "B/train/")
+os.makedirs(render_dir + "B/test/")
+os.makedirs(render_dir + "B/val/")
+os.makedirs(render_dir + "out/")
+
+hsv = []
+prev = None
+prev_bgr = None
+
+for i,fn in enumerate(sorted(os.listdir(work_dir))):
+ if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn):
+ continue
+
+ # load image and convert to grayscale
+ pil_image = Image.open(work_dir + fn).convert('RGB')
+ im = np.array(pil_image)
+ im = im[:, :, ::-1].copy()
+ im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
+
+ # store first frame
+ if prev is None:
+ prev = im
+ hsv = np.zeros((256,512,3))
+ hsv[...,1] = 255
+ continue
+
+ # compute optical flow
+ flow = cv2.calcOpticalFlowFarneback(prev, im, None, 0.5, 3, 15, 3, 5, 1.2, 0)
+
+ # turn into magnitude/angle
+ mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
+
+ # store angle as hue
+ hsv[...,0] = ang * 180 / np.pi / 2
+
+ # store magnitude as lum
+ hsv[...,2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_L2)
+
+ # convert this HSL to BGR
+ 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/"
+
+ 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/" + ren, bgr)
+ # copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
+ prev = im
+ prev_bgr = np.copy(bgr)
+
diff --git a/scripts/flow/flow-warp-recflow-recursive-fwd.py b/scripts/flow/flow-warp-recflow-recursive-fwd.py
new file mode 100644
index 0000000..4d15cc2
--- /dev/null
+++ b/scripts/flow/flow-warp-recflow-recursive-fwd.py
@@ -0,0 +1,138 @@
+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_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)
+
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)
+
diff --git a/scripts/flow/flow-warp-recursive.py b/scripts/flow/flow-warp-recursive.py
new file mode 100644
index 0000000..7b08941
--- /dev/null
+++ b/scripts/flow/flow-warp-recursive.py
@@ -0,0 +1,82 @@
+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
+
+work_dir = "IMG_1734/"
+render_dir = "IMG_1734/flowwarprecursive/"
+
+if os.path.exists(render_dir):
+ rmtree(render_dir)
+
+os.makedirs(render_dir)
+os.makedirs(render_dir + 'prev/')
+os.makedirs(render_dir + 'next/')
+
+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
+
+hsv = []
+prev = None
+prev_bgr = None
+gray = None
+prev_gray = None
+
+for i,fn in enumerate(sorted(os.listdir(work_dir))):
+ if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn):
+ continue
+
+ # load image and convert to grayscale
+ pil_image = Image.open(work_dir + fn).convert('RGB')
+ im = np.array(pil_image)
+ im = im[:, :, ::-1].copy()
+ gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
+
+ # store first frame
+ if prev_gray is None:
+ prev = im
+ prev_gray = gray
+ #hsv = np.zeros((256,512,3))
+ #hsv[...,1] = 255
+ continue
+
+ # compute optical flow
+ flow = cv2.calcOpticalFlowFarneback(prev_gray, 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/"
+
+ out_prev = warp_flow(prev, flow)
+ #out_next = warp_flow(im, 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 + "prev/" + ren, out_prev)
+ #cv2.imwrite(render_dir + "next/" + ren, out_next)
+ # copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
+ prev = out_prev
+ #prev_gray = gray
+ #prev_bgr = np.copy(bgr)
+
diff --git a/scripts/flow/flow-warp.py b/scripts/flow/flow-warp.py
new file mode 100644
index 0000000..3c7735a
--- /dev/null
+++ b/scripts/flow/flow-warp.py
@@ -0,0 +1,82 @@
+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
+
+work_dir = "IMG_1734/"
+render_dir = "IMG_1734/flowwarp/"
+
+if os.path.exists(render_dir):
+ rmtree(render_dir)
+
+os.makedirs(render_dir)
+os.makedirs(render_dir + 'prev/')
+os.makedirs(render_dir + 'next/')
+
+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
+
+hsv = []
+prev = None
+prev_bgr = None
+gray = None
+prev_gray = None
+
+for i,fn in enumerate(sorted(os.listdir(work_dir))):
+ if os.path.basename(fn).startswith('.') or not os.path.isfile(work_dir + fn):
+ continue
+
+ # load image and convert to grayscale
+ pil_image = Image.open(work_dir + fn).convert('RGB')
+ im = np.array(pil_image)
+ im = im[:, :, ::-1].copy()
+ gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
+
+ # store first frame
+ if prev_gray is None:
+ prev = im
+ prev_gray = gray
+ #hsv = np.zeros((256,512,3))
+ #hsv[...,1] = 255
+ continue
+
+ # compute optical flow
+ flow = cv2.calcOpticalFlowFarneback(prev_gray, 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/"
+
+ out_prev = warp_flow(prev, flow)
+ #out_next = warp_flow(im, 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 + "prev/" + ren, out_prev)
+ #cv2.imwrite(render_dir + "next/" + ren, out_next)
+ # copyfile(work_dir + fn, render_dir + "B/" + wd + ren)
+ #prev = im
+ #prev_gray = gray
+ #prev_bgr = np.copy(bgr)
+
diff --git a/test.py b/test.py
index 1f82875..f66edc8 100644
--- a/test.py
+++ b/test.py
@@ -62,8 +62,8 @@ if __name__ == '__main__':
# image_pil.save(save_path)
# copyfile(save_path, final_path)
if last_im is not None:
- frac_a = 999/1000
- frac_b = 1/1000
+ frac_a = 0.5
+ frac_b = 1.0 - frac_a
tmp_im = im.copy()
array_a = np.multiply(im, frac_a)
array_b = np.multiply(last_im, frac_b)