#!/bin/csh
#
#  Usage:  shape-of-motion
#
#  This script requires the programs "flow", "scalarize", and "lslp"
#   

# C-style format for file names in sequence
#  (assumes single integer argument)
set base = g53
set iname = $base.%04d.pgm

# set parameters for optical flow here
set smooth = 2.0 # width of smoothing/support filter for optical flow
set dog = 0.75   # width of difference of gaussian (dog) to whiten
                 #   images for optical flow
set range = 3    # +/- range of displacements for flow
                 # note that range is typically much larger than 3
                 # a value of 3 just makes the example run faster
set first = 1    # index of first image in sequence
set last  = 50   # index of last image in sequence


# compute optical flow for sequence
echo computint optical flow
flow -width $range -smooth $smooth -dog $dog \
	-start $first -stop $last \
	-input $iname \
	-x x.%04d.pgm -y y.%04d.pgm -mask m.%04d.pgm -v on


# parameters to manually track the person in the images
set xfirst = 281  # x-position of person in first image
set xlast  = 140  # x-position of person in last image

# compute scalar sequence from optical flow
#   output is a diagnostic image that should be deleted
echo computing scalars from optical flow
scalarize -start $first -stop $last \
	-x x.%04d.pgm -y y.%04d.pgm -mask m.%04d.pgm -v on \
	-out dummy.pgm \
	-xstart $xfirst -xstop $xlast > scalars.dat
rm dummy.pgm


# compute the fundamental frequency and phases of each signal
echo compute  the fundamental frequency and phases of each signal

# extract the signals from the scalar file
awk '{ printf "%s\n", $1  }' scalars.dat > signal01
awk '{ printf "%s\n", $2  }' scalars.dat > signal02
awk '{ printf "%s\n", $3  }' scalars.dat > signal03
awk '{ printf "%s\n", $4  }' scalars.dat > signal04
awk '{ printf "%s\n", $5  }' scalars.dat > signal05
awk '{ printf "%s\n", $6  }' scalars.dat > signal06
awk '{ printf "%s\n", $7  }' scalars.dat > signal07
awk '{ printf "%s\n", $8  }' scalars.dat > signal08
awk '{ printf "%s\n", $9  }' scalars.dat > signal09
awk '{ printf "%s\n", $10 }' scalars.dat > signal10
awk '{ printf "%s\n", $11 }' scalars.dat > signal11
awk '{ printf "%s\n", $12 }' scalars.dat > signal12
awk '{ printf "%s\n", $13 }' scalars.dat > signal13


# use least squarse linear prediction to compute max-ent spectrum
#   andfind the fundamental frequency
echo computing fundamental frequency
set freq=`lslp -m 20 -freq on signal02`
echo fundamental frequency: $freq

# compute the phase for each signal (lslp does this too)
echo computing phases
set phase01 = `lslp -l off -f $freq -phase on signal01`
set phase02 = `lslp -l off -f $freq -phase on signal02`
set phase03 = `lslp -l off -f $freq -phase on signal03`
set phase04 = `lslp -l off -f $freq -phase on signal04`
set phase05 = `lslp -l off -f $freq -phase on signal05`
set phase06 = `lslp -l off -f $freq -phase on signal06`
set phase07 = `lslp -l off -f $freq -phase on signal07`
set phase08 = `lslp -l off -f $freq -phase on signal08`
set phase09 = `lslp -l off -f $freq -phase on signal09`
set phase10 = `lslp -l off -f $freq -phase on signal10`
set phase11 = `lslp -l off -f $freq -phase on signal11`
set phase12 = `lslp -l off -f $freq -phase on signal12`
set phase13 = `lslp -l off -f $freq -phase on signal13`


# dereference the phases wrt phase02 (y_c)
#  use awk to handle floating point variables
echo subtracting reference and saving to featurevec.dat
echo $base $phase01 $phase02 $phase03 $phase04 $phase05 $phase06 \
	$phase07 $phase08 $phase09 $phase10 $phase11 $phase12 $phase13 | \
	subreference > featurevec.dat







