jAER project on SourceForge

net.sf.jaer.eventprocessing.tracking
Class ParticleTracker

java.lang.Object
  extended by net.sf.jaer.eventprocessing.EventFilter
      extended by net.sf.jaer.eventprocessing.EventFilter2D
          extended by net.sf.jaer.eventprocessing.tracking.ParticleTracker
All Implemented Interfaces:
java.util.Observer, FrameAnnotater

public class ParticleTracker
extends EventFilter2D
implements FrameAnnotater, java.util.Observer

Author:
Philipp

Nested Class Summary
 class ParticleTracker.Cluster
           
 class ParticleTracker.DiffusedCluster
           
 
Field Summary
protected  AEChip chip
           
protected  java.util.Random random
           
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter2D
enclosedFilter, out
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter
annotationEnabled, enclosedFilterChain, filterEnabled, log, perf, propertyTooltipMap, support
 
Constructor Summary
ParticleTracker(AEChip chip)
          Creates a new instance of ParticleTracker
 
Method Summary
 void annotate(float[][][] frame)
          annotate the rendered retina frame to show locations of clusters
 void annotate(javax.media.opengl.GLAutoDrawable drawable)
          Each annotator enters annotate with graphics context current, in coordinates with pixel 0,0 in LL corner (note opposite from Java2D) and pixel spacing 1 unit after the scaling transform (which is already active).
 void annotate(java.awt.Graphics2D g)
          each annotator is called by the relevant class (e.g.
 ParticleTracker.DiffusedCluster diffuseCluster(int x, int y, int id, int time_limit, int lowest_id, ParticleTracker.DiffusedCluster c)
           
protected  void drawBox(javax.media.opengl.GL gl, int x, int y, int sx, int sy)
           
 EventPacket filterPacket(EventPacket in)
          Subclasses implement this method to define custom processing.
 float getClusterMinMass4Display()
           
 java.util.List<ParticleTracker.Cluster> getClusters()
           
 int getClusterUnsupportedLifetime()
           
static java.lang.String getDescription()
           
 float getDisplayVelocityScaling()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 int getLogFrameLength()
           
 boolean getOnPolarityOnly()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 int mergeClusters(ParticleTracker.Cluster thisCluster, int[] cluster_ids, int n_ids, int now)
           
 void resetFilter()
          should reset the filter to initial state
 void setClusterMinMass4Display(float x)
           
 void setClusterUnsupportedLifetime(int x)
           
 void setDisplayVelocityScaling(float x)
           
 void setFilterEnabled(boolean enabled)
          Resets the filter
 void setLogFrameLength(int x)
           
 void setOnPolarityOnly(boolean b)
           
 int splitClusters()
           
 void update(java.util.Observable o, java.lang.Object arg)
           
 float weighEvent(float t_ev, float now)
           
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter2D
checkOutputPacketEventType, checkOutputPacketEventType, getEnclosedFilter, resetOut, setEnclosedFilter
 
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter
getChip, getEnclosedFilterChain, getEnclosingFilter, getPrefs, getPropertyChangeSupport, getPropertyTooltip, isAnnotationEnabled, isEnclosed, isFilterEnabled, prefsEnabledKey, setAnnotationEnabled, setChip, setEnclosed, setEnclosedFilter, setEnclosedFilterChain, setEnclosingFilter, setPreferredEnabledState, setPrefs, setPropertyTooltip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sf.jaer.graphics.FrameAnnotater
isAnnotationEnabled, setAnnotationEnabled
 

Field Detail

chip

protected AEChip chip

random

protected java.util.Random random
Constructor Detail

ParticleTracker

public ParticleTracker(AEChip chip)
Creates a new instance of ParticleTracker

Method Detail

getDescription

public static java.lang.String getDescription()

setDisplayVelocityScaling

public void setDisplayVelocityScaling(float x)

getDisplayVelocityScaling

public final float getDisplayVelocityScaling()

setLogFrameLength

public void setLogFrameLength(int x)

getLogFrameLength

public final int getLogFrameLength()

setClusterUnsupportedLifetime

public void setClusterUnsupportedLifetime(int x)

getClusterUnsupportedLifetime

public final int getClusterUnsupportedLifetime()

setOnPolarityOnly

public void setOnPolarityOnly(boolean b)

getOnPolarityOnly

public final boolean getOnPolarityOnly()

setClusterMinMass4Display

public void setClusterMinMass4Display(float x)

getClusterMinMass4Display

public final float getClusterMinMass4Display()

setFilterEnabled

public void setFilterEnabled(boolean enabled)
Description copied from class: EventFilter2D
Resets the filter

Overrides:
setFilterEnabled in class EventFilter2D
Parameters:
enabled - true to reset
See Also:
EventFilter.setPreferredEnabledState()

weighEvent

public float weighEvent(float t_ev,
                        float now)

mergeClusters

public int mergeClusters(ParticleTracker.Cluster thisCluster,
                         int[] cluster_ids,
                         int n_ids,
                         int now)

diffuseCluster

public ParticleTracker.DiffusedCluster diffuseCluster(int x,
                                                      int y,
                                                      int id,
                                                      int time_limit,
                                                      int lowest_id,
                                                      ParticleTracker.DiffusedCluster c)

splitClusters

public int splitClusters()

getClusters

public java.util.List<ParticleTracker.Cluster> getClusters()

initFilter

public void initFilter()
Description copied from class: EventFilter
this should allocate and initialize memory: it may be called when the chip e.g. size parameters are changed after creation of the filter

Specified by:
initFilter in class EventFilter

resetFilter

public void resetFilter()
Description copied from class: EventFilter
should reset the filter to initial state

Specified by:
resetFilter in class EventFilter

getFilterState

public java.lang.Object getFilterState()
Description copied from class: EventFilter
should return the filter state in some useful form

Specified by:
getFilterState in class EventFilter

filterPacket

public EventPacket filterPacket(EventPacket in)
Description copied from class: EventFilter2D
Subclasses implement this method to define custom processing.

Specified by:
filterPacket in class EventFilter2D
Parameters:
in - the input packet
Returns:
the output packet

update

public void update(java.util.Observable o,
                   java.lang.Object arg)
Specified by:
update in interface java.util.Observer

annotate

public void annotate(java.awt.Graphics2D g)
Description copied from interface: FrameAnnotater
each annotator is called by the relevant class (e.g. EyeTracker) and enters annotate with graphics context current, in coordinates with pixel 0,0 in UL corner and pixel spacing 1 unit before scaling transform (which is already active).

Specified by:
annotate in interface FrameAnnotater
Parameters:
g - the Graphics2D context

drawBox

protected void drawBox(javax.media.opengl.GL gl,
                       int x,
                       int y,
                       int sx,
                       int sy)

annotate

public void annotate(javax.media.opengl.GLAutoDrawable drawable)
Description copied from interface: FrameAnnotater
Each annotator enters annotate with graphics context current, in coordinates with pixel 0,0 in LL corner (note opposite from Java2D) and pixel spacing 1 unit after the scaling transform (which is already active). The FrameAnnotater then can use JOGL calls to render to the screen by getting the GL context, e.g. the following code, used in the context of an AEChip object, draws a golden lines from LL to UR of the pixel array.
        GL gl = drawable.getGL();
        gl.glBegin(GL.GL_LINES);
        gl.glColor3f(.5f, .5f, 0);
        gl.glVertex2f(0, 0);
        gl.glVertex2f(getSizeX() - 1, getSizeY() - 1);
        gl.glEnd();
 

Specified by:
annotate in interface FrameAnnotater
Parameters:
drawable - the OpenGL drawable components, e.g., GLCanvas

annotate

public void annotate(float[][][] frame)
annotate the rendered retina frame to show locations of clusters

Specified by:
annotate in interface FrameAnnotater
Parameters:
frame - the RGB pixel information. First dimension is Y, second is X, third is RGB

jAER project on SourceForge