# -*- coding: utf-8 -*- # Max-Planck-Gesellschaft zur Förderung der Wissenschaften e.V. (MPG) is # holder of all proprietary rights on this computer program. # You can only use this computer program if you have closed # a license agreement with MPG or you get the right to use the computer # program from someone who is authorized to grant you that right. # Any use of the computer program without a valid license is prohibited and # liable to prosecution. # # Copyright©2020 Max-Planck-Gesellschaft zur Förderung # der Wissenschaften e.V. (MPG). acting on behalf of its Max Planck Institute # for Intelligent Systems. All rights reserved. # # Contact: ps-license@tuebingen.mpg.de import numpy as np # TODO: use a real subsampler.. def subsample(num_frames, last_framerate, new_framerate): step = int(last_framerate / new_framerate) assert step >= 1 frames = np.arange(0, num_frames, step) return frames # TODO: use a real upsampler.. def upsample(motion, last_framerate, new_framerate): step = int(new_framerate / last_framerate) assert step >= 1 # Alpha blending => interpolation alpha = np.linspace(0, 1, step+1) last = np.einsum("l,...->l...", 1-alpha, motion[:-1]) new = np.einsum("l,...->l...", alpha, motion[1:]) chuncks = (last + new)[:-1] output = np.concatenate(chuncks.swapaxes(1, 0)) # Don't forget the last one output = np.concatenate((output, motion[[-1]])) return output if __name__ == "__main__": motion = np.arange(105) submotion = motion[subsample(len(motion), 100.0, 12.5)] newmotion = upsample(submotion, 12.5, 100) print(newmotion)