de.unihalle.informatik.MiToBo.tracking.multitarget.algo
Class MultiObservationTrackerRBMCDAIMM

java.lang.Object
  extended by de.unihalle.informatik.Alida.operator.ALDOperator
      extended by de.unihalle.informatik.MiToBo.core.operator.MTBOperator
          extended by de.unihalle.informatik.MiToBo.tracking.multitarget.algo.MultiObservationTrackerRBMCDAIMM
All Implemented Interfaces:
de.unihalle.informatik.Alida.datatypes.ALDConfigurationValidator

@ALDAOperator(genericExecutionMode=NONE,
              level=STANDARD)
public class MultiObservationTrackerRBMCDAIMM
extends MTBOperator

Tracking of multiple targets using Rao-Blackwellized Monte Carlo Data Association (RBMCDA) for observation-to-target association and Interacting Multiple Models (IMM) filters for target state estimation.

Author:
Oliver Gress

Nested Class Summary
 
Nested classes/interfaces inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
de.unihalle.informatik.Alida.operator.ALDOperator.HidingMode
 
Field Summary
 double delta_t
           
 java.lang.String dotGraphFilename
           
 double essPercentage
           
protected  java.util.Vector<MultiState<MotionModelID>> groundtruthObservations
           
protected  java.util.Vector<MultiState<MotionModelID>> inputObservations
           
 double lambdaBirth
           
 double lambdaClutter
           
 double lambdaDeath
           
 double maxDistNeighbors
           
 int maxNumNeighbors
           
 Jama.Matrix modelTransition
           
 boolean noNeighborsOldAlgo
           
 int numSamples
           
protected  ObservationAdjacency obsAssocAdjacency
           
protected  java.util.Vector<MultiState<MotionModelID>> outputObservations
           
 double pDetect
           
 double qsize
           
 double qxy
           
 double qxy_
           
protected  java.util.Random rand
           
 long randomSeed
           
 double rsize
           
 double rxy
           
private  RBMCDASampleInfo<MotionModelID>[] sampleInfo
           
private  double[] sampleJointProb
           
 double sqrtSizeMax
           
 double sqrtSizeMin
           
 DynamicColorLUT trackcolors
           
 double xMax
           
 double xMin
           
 double yMax
           
 double yMin
           
 
Fields inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
completeDAG, name, portHashAccess, verbose, versionProvider
 
Constructor Summary
MultiObservationTrackerRBMCDAIMM()
           
 
Method Summary
 java.util.Vector<MultiState<MotionModelID>> getOutputObservations()
          Get a copy of the input observations with IDs set corresponding to the tracking results after GreedyGourmetPartitioning of the track graph constructed from the RBMCDA samples.
 double getSampleConditionalProb(int i, int t)
          Get the probability of the associations of i-th sample at the time t conditional on previous associations and all observations up to time t.
 RBMCDASampleInfo<MotionModelID> getSampleInfo(int i)
          Get the sample info object of the i-th sample.
 double getSampleJointProb(int i)
          Get the joint probability of all associations of the i-th sample conditional on all observations, normalized by all samples' probabilities.
 double[] getSampleJointProbs()
          Get the joint probability of all associations of all samples conditional on all observations, normalized by all samples' probabilities.
 java.util.Vector<MultiState<MotionModelID>> getSampleObservations(int i)
          Get a copy of the observations with IDs set corresponding to the i-th sample's tracking results.
protected  void operate()
           
 void setGroundtruthObservations(java.util.Vector<MultiState<MotionModelID>> groundtruthObservations)
           
 void setInputObservations(java.util.Vector<MultiState<MotionModelID>> inputObservations)
           
 
Methods inherited from class de.unihalle.informatik.MiToBo.core.operator.MTBOperator
readResolve
 
Methods inherited from class de.unihalle.informatik.Alida.operator.ALDOperator
deserializeFromXmlFile, fieldContained, getALDPortHashAccessKey, getConstructionMode, getInInoutNames, getInInoutNames, getInNames, getInOutNames, getMissingRequiredInputs, getName, getNumParameters, getOutInoutNames, getOutNames, getParameter, getParameterDescriptor, getParameterNames, getSupplementalNames, getVerbose, getVersion, isConfigured, parametersToXmlObject, print, print, print, printInterface, printInterface, readHistory, reinitializeParameterDescriptors, runOp, runOp, runOp, serializeToXmlFile, setConstructionMode, setName, setParameter, setParametersFromXml, setParametersFromXml, setVerbose, toStringVerbose, unconfiguredItems, validate, validateCustom, validateGeneric, writeHistory, writeHistory, writeHistory, writeParametersToXml
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

delta_t

@Parameter(label="delta_t",
           required=false,
           direction=IN,
           description="time interval between two frames")
public double delta_t

dotGraphFilename

@Parameter(label="dotGraphFilename",
           required=false,
           direction=IN,
           description="File to write the observation associations graph and computed subgraphs (tracks) to")
public java.lang.String dotGraphFilename

essPercentage

@Parameter(label="ESS percentage",
           required=true,
           direction=IN,
           description="The percentage (range [0,1]) of number of samples below ESS to trigger resampling.")
public double essPercentage

groundtruthObservations

@Parameter(label="groundtruthObservations",
           required=false,
           direction=IN,
           description="groundtruth observations")
protected java.util.Vector<MultiState<MotionModelID>> groundtruthObservations

inputObservations

@Parameter(label="inputObservations",
           required=true,
           direction=IN,
           description="Input observations")
protected java.util.Vector<MultiState<MotionModelID>> inputObservations

lambdaBirth

@Parameter(label="lambdaBirth",
           required=true,
           direction=IN,
           description="Mean/variance of the Poisson distribution of the number of newborn observed targets")
public double lambdaBirth

lambdaClutter

@Parameter(label="lambdaClutter",
           required=true,
           direction=IN,
           description="Mean/variance of the Poisson distribution of the number of clutter observations")
public double lambdaClutter

lambdaDeath

@Parameter(label="lambdaDeath",
           required=true,
           direction=IN,
           description="Parameter of the exponential distribution of the survival of nonassociated targets")
public double lambdaDeath

maxDistNeighbors

@Parameter(label="Max distance of neighbors",
           required=true,
           direction=IN,
           description="The maximum number of neighboring observations considered")
public double maxDistNeighbors

maxNumNeighbors

@Parameter(label="Max number of neighbors",
           required=true,
           direction=IN,
           description="The maximum number of neighboring observations considered")
public int maxNumNeighbors

modelTransition

@Parameter(label="modelTransition",
           required=true,
           direction=IN,
           description="A 2x2 markov matrix with probabilities of changing the dynamic models from time t-1 to t")
public Jama.Matrix modelTransition

noNeighborsOldAlgo

@Parameter(label="No neighbors (old algo)",
           required=true,
           direction=IN,
           description="Do not consider any neighbor observations and compute with old algo.")
public boolean noNeighborsOldAlgo

numSamples

@Parameter(label="numSamples",
           required=true,
           direction=IN,
           description="The number RBMCDA samples")
public int numSamples

obsAssocAdjacency

@Parameter(label="obsAssocAdjacency",
           required=false,
           direction=OUT,
           description="Adjacency matrix of observation associations from all samples")
protected ObservationAdjacency obsAssocAdjacency

outputObservations

@Parameter(label="outputObservations",
           required=false,
           direction=OUT,
           description="Output observations (MotionModelIDs set according to tracking results)")
protected java.util.Vector<MultiState<MotionModelID>> outputObservations

pDetect

@Parameter(label="pDetect",
           required=true,
           direction=IN,
           description="Probability of detecting a target")
public double pDetect

qsize

@Parameter(label="qsize",
           required=true,
           direction=IN,
           description="Variance of sqrt(size) in the process noise covariance matrix")
public double qsize

qxy

@Parameter(label="qxy",
           required=true,
           direction=IN,
           description="Variance of the current x-/y-position in the process noise covariance matrix")
public double qxy

qxy_

@Parameter(label="qxy_",
           required=true,
           direction=IN,
           description="Variance of the last x-/y-position in the process noise covariance matrix")
public double qxy_

rand

protected java.util.Random rand

randomSeed

@Parameter(label="randomSeed",
           required=true,
           direction=IN,
           description="A seed for the random number generator")
public long randomSeed

rsize

@Parameter(label="rsize",
           required=true,
           direction=IN,
           description="Variance of sqrt(size) in the measurement noise covariance matrix")
public double rsize

rxy

@Parameter(label="rxy",
           required=true,
           direction=IN,
           description="Variance of the current x-/y-position in the measurement noise covariance matrix")
public double rxy

sampleInfo

@Parameter(label="sampleInfo",
           required=false,
           direction=OUT,
           description="Info objects about the RBMCDA samples")
private RBMCDASampleInfo<MotionModelID>[] sampleInfo

sampleJointProb

private double[] sampleJointProb

sqrtSizeMax

@Parameter(label="sqrtSizeMax",
           required=true,
           direction=IN,
           description="Maximum sqrt(size) (third component of observation vector)")
public double sqrtSizeMax

sqrtSizeMin

@Parameter(label="sqrtSizeMin",
           required=true,
           direction=IN,
           description="Minimum sqrt(size) (third component of observation vector)")
public double sqrtSizeMin

trackcolors

public DynamicColorLUT trackcolors

xMax

@Parameter(label="xMax",
           required=true,
           direction=IN,
           description="x-max of the rectangular region where the observations reside in (e.g. for image creation)")
public double xMax

xMin

@Parameter(label="xMin",
           required=true,
           direction=IN,
           description="x-min of the rectangular region where the observations reside in (e.g. for image creation)")
public double xMin

yMax

@Parameter(label="yMax",
           required=true,
           direction=IN,
           description="y-max of the rectangular region where the observations reside in (e.g. for image creation)")
public double yMax

yMin

@Parameter(label="yMin",
           required=true,
           direction=IN,
           description="y-min of the rectangular region where the observations reside in (e.g. for image creation)")
public double yMin
Constructor Detail

MultiObservationTrackerRBMCDAIMM

public MultiObservationTrackerRBMCDAIMM()
                                 throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
Method Detail

getOutputObservations

public java.util.Vector<MultiState<MotionModelID>> getOutputObservations()
Get a copy of the input observations with IDs set corresponding to the tracking results after GreedyGourmetPartitioning of the track graph constructed from the RBMCDA samples. Be aware that observations of a track with only a single observation are interpreted as clutter.


getSampleConditionalProb

public double getSampleConditionalProb(int i,
                                       int t)
Get the probability of the associations of i-th sample at the time t conditional on previous associations and all observations up to time t.


getSampleInfo

public RBMCDASampleInfo<MotionModelID> getSampleInfo(int i)
Get the sample info object of the i-th sample. Here tracks with single observations are available in contrast to sample observations returned by getSampleObservations.


getSampleJointProb

public double getSampleJointProb(int i)
Get the joint probability of all associations of the i-th sample conditional on all observations, normalized by all samples' probabilities.


getSampleJointProbs

public double[] getSampleJointProbs()
Get the joint probability of all associations of all samples conditional on all observations, normalized by all samples' probabilities.


getSampleObservations

public java.util.Vector<MultiState<MotionModelID>> getSampleObservations(int i)
Get a copy of the observations with IDs set corresponding to the i-th sample's tracking results. Be aware that observations of a track with only a single observation are interpreted as clutter in contrast to the sample info objects returned by getSampleInfo.


operate

protected void operate()
                throws de.unihalle.informatik.Alida.exceptions.ALDOperatorException,
                       de.unihalle.informatik.Alida.exceptions.ALDProcessingDAGException
Specified by:
operate in class de.unihalle.informatik.Alida.operator.ALDOperator
Throws:
de.unihalle.informatik.Alida.exceptions.ALDOperatorException
de.unihalle.informatik.Alida.exceptions.ALDProcessingDAGException

setGroundtruthObservations

public void setGroundtruthObservations(java.util.Vector<MultiState<MotionModelID>> groundtruthObservations)

setInputObservations

public void setInputObservations(java.util.Vector<MultiState<MotionModelID>> inputObservations)