def average(input_file, output_file, m=10): bvh_file = bvh.read_file(input_file) for i in range(0, 3): v = bvh_file["POSITIONS"][:, i] bvh_file["POSITIONS"][:, i] = spacefilter.apply_average(v, m) bvh.write_file(output_file, bvh_file)
def butterworth(input_file, output_file, border=100, u0=60, order=2): bvh_file = bvh.read_file(input_file) for i in range(0, 3): v = bvh_file["POSITIONS"][:, i] f = freqfilter.fft(v, border) fil = freqfilter.butter_worth_filter(len(f), u0, order) ff = freqfilter.apply_filter(f, fil) iff = freqfilter.ifft(ff, border) bvh_file["POSITIONS"][:, i] = np.real(iff) bvh.write_file(output_file, bvh_file)
def gaussian(input_file, output_file, border=100, sigma=10): bvh_file = bvh.read_file(input_file) for i in range(0, 3): v = bvh_file["POSITIONS"][:, i] f = freqfilter.fft(v, border) fil = freqfilter.gaussian_filter(len(f), sigma) ff = freqfilter.apply_filter(f, fil) iff = freqfilter.ifft(ff, border) bvh_file["POSITIONS"][:, i] = np.real(iff) bvh.write_file(output_file, bvh_file)
def average(input_file, output_file, m=10): bvh_file = bvh.read_file(input_file) for j in range(len(bvh_file["ROTATIONS"][0, :, 0])): for i in range(3): v = angle.floats_to_degrees(bvh_file["ROTATIONS"][:, j, i]) p = angle.degrees_to_polars(v) f_filtered = spacefilter.apply_average(p, m) p = angle.complexes_to_polars(f_filtered) nv = angle.polars_to_degrees(p) bvh_file["ROTATIONS"][:, j, i] = nv bvh.write_file(output_file, bvh_file)
def butterworth(input_file, output_file, border=100, u0=60, order=2): bvh_file = bvh.read_file(input_file) for j in range(len(bvh_file["ROTATIONS"][0, :, 0])): for i in range(3): v = angle.floats_to_degrees(bvh_file["ROTATIONS"][:, j, i]) p = angle.degrees_to_polars(v) f = freqfilter.fft(p, border) fil = freqfilter.butter_worth_filter(len(f), u0, order) f_filtered = freqfilter.apply_filter(f, fil) f_filtered = freqfilter.ifft(f_filtered, border) p = angle.complexes_to_polars(f_filtered) nv = angle.polars_to_degrees(p) bvh_file["ROTATIONS"][:, j, i] = nv bvh.write_file(output_file, bvh_file)
import sys from bvh_smooth import bvh def dp(a, b): return abs(a - b) def dr(a, b): if abs(a - b) > 180: return 360 - abs(a - b) return abs(a - b) INPUT = sys.argv[1] bvh_file = bvh.read_file(INPUT) p = bvh_file["POSITIONS"] r = bvh_file["ROTATIONS"] nf = len(p[:, 0]) pav = 0 for c in range(3): for f in range(nf - 1): pav += dp(p[f, c], p[f + 1, c]) pav = pav / (3 * (nf)) rav = 0 for j in range(21): for c in range(3): for f in range(nf - 1): rav += dr(r[f, j, c], r[f + 1, j, c])