|
jAER project on SourceForge | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.sf.jaer.eventprocessing.EventFilter
net.sf.jaer.eventprocessing.EventFilter2D
ch.unizh.ini.jaer.projects.wingtracker.WingTracker
public class WingTracker
Tracks a fruit fly wing beat in two different ways, after a initialization phase. Begin with the method track, there the events are classified to the right edge and depending on the state the evaluation goes on. So there are different states in this "filter": initialization: data are recorded(a hardcoded number of events in the method track() with state = Init) and then an analysis is done for this data. First there is a 2-means algorithm(method kmeans) to localize the 2 wings. afterwards basic geometry is used to calculate the bodyposition and the heading of the fly. This is done in the method findFly(). Tracking: every event changes the actual position of the correspoinding wingedge with a lowpassfilter. This is done in the method track() with the state = TRACKING. Kalman: the second way to track is with a extended Kalman Filter. Every event is taken as an measurement for the filter. First in the method track the events is classified in left/right wing and leading/trailing edge. There are 4 instances of the inner class EKF which supports data for each wingedge. The prediction and update are methods of this inner class.
Nested Class Summary | |
---|---|
class |
WingTracker.EKF
This class serves as datastructure for the Kalman Filter for all the wing-edges. |
class |
WingTracker.EKFParameterWindow
|
Field Summary |
---|
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 | |
---|---|
WingTracker(AEChip chip)
|
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. |
EventPacket |
filterPacket(EventPacket in)
Subclasses implement this method to define custom processing. |
boolean |
getdoBodyUpdate()
|
boolean |
getdoHeadingUpdate()
|
boolean |
getDoLog()
|
java.lang.Object |
getFilterState()
should return the filter state in some useful form |
boolean |
getFlipHeading()
|
float |
getHysteresis()
|
float |
getMixingFactor()
|
int |
getNbEventsToCollectPerEdge()
|
float |
getSearchRangeOffset()
|
boolean |
getShowEKFParameterWindow()
|
boolean |
getUseKalmanFiltering()
|
void |
initFilter()
Does nothing. |
boolean |
isGeneratingFilter()
|
void |
resetFilter()
should reset the filter to initial state |
void |
setdoBodyUpdate(boolean doBodyUpdate)
|
void |
setdoHeadingUpdate(boolean doHeadingUpdate)
|
void |
setDoLog(boolean doLog)
|
void |
setFlipHeading(boolean flipHeading)
|
void |
setHysteresis(float hysteresis)
|
void |
setMixingFactor(float mixingFactor)
|
void |
setNbEventsToCollectPerEdge(int nbEventsToCollectPerEdge)
|
void |
setSearchRangeOffset(float searchRangeOffset)
|
void |
setShowEKFParameterWindow(boolean showEKFParameterWindow)
|
void |
setUseKalmanFiltering(boolean useKalmanFiltering)
|
void |
update(java.util.Observable o,
java.lang.Object arg)
|
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter2D |
---|
checkOutputPacketEventType, checkOutputPacketEventType, getEnclosedFilter, resetOut, setEnclosedFilter, setFilterEnabled |
Methods inherited from class net.sf.jaer.eventprocessing.EventFilter |
---|
getChip, getDescription, 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 |
Constructor Detail |
---|
public WingTracker(AEChip chip)
Method Detail |
---|
public void initFilter()
initFilter
in class EventFilter
public java.lang.Object getFilterState()
EventFilter
getFilterState
in class EventFilter
public boolean isGeneratingFilter()
public void resetFilter()
EventFilter
resetFilter
in class EventFilter
public EventPacket filterPacket(EventPacket in)
EventFilter2D
filterPacket
in class EventFilter2D
in
- the input packet
public void update(java.util.Observable o, java.lang.Object arg)
update
in interface java.util.Observer
public void annotate(java.awt.Graphics2D g)
FrameAnnotater
annotate
in interface FrameAnnotater
g
- the Graphics2D contextpublic void annotate(javax.media.opengl.GLAutoDrawable drawable)
FrameAnnotater
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();
annotate
in interface FrameAnnotater
drawable
- the OpenGL drawable components, e.g., GLCanvaspublic void annotate(float[][][] frame)
annotate
in interface FrameAnnotater
frame
- the RGB pixel information. First dimension is Y, second is X, third is RGBpublic void setDoLog(boolean doLog)
public boolean getDoLog()
public float getMixingFactor()
public void setMixingFactor(float mixingFactor)
public float getHysteresis()
public void setHysteresis(float hysteresis)
public float getSearchRangeOffset()
public void setSearchRangeOffset(float searchRangeOffset)
public void setdoBodyUpdate(boolean doBodyUpdate)
public boolean getdoBodyUpdate()
public void setdoHeadingUpdate(boolean doHeadingUpdate)
public boolean getdoHeadingUpdate()
public void setUseKalmanFiltering(boolean useKalmanFiltering)
public boolean getUseKalmanFiltering()
public int getNbEventsToCollectPerEdge()
public void setNbEventsToCollectPerEdge(int nbEventsToCollectPerEdge)
public void setFlipHeading(boolean flipHeading)
public boolean getFlipHeading()
public void setShowEKFParameterWindow(boolean showEKFParameterWindow)
public boolean getShowEKFParameterWindow()
|
jAER project on SourceForge | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |