jAER project on SourceForge

net.sf.jaer.eventprocessing.label
Class DirectionSelectiveFilter

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

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

Computes motion based nearest event (in past time) in neighboring pixels.

Output cells type has values 0-7, 0 being upward motion, increasing by 45 deg CCW to 7 being motion up and to right.

Author:
tobi

Nested Class Summary
 class DirectionSelectiveFilter.Expansion
           
 class DirectionSelectiveFilter.MotionVectors
          represents the global motion metrics from statistics of dir selective and simple cell events.
 class DirectionSelectiveFilter.Rotation
          rotation around center, positive is CCW, radians per second
 class DirectionSelectiveFilter.Translation
          global translatory motion, pixels per second
 
Field Summary
static int MAX_SEARCH_DISTANCE
           
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter2D
enclosedFilter, out
 
Fields inherited from class net.sf.jaer.eventprocessing.EventFilter
annotationEnabled, chip, enclosedFilterChain, filterEnabled, log, perf, propertyTooltipMap, support
 
Constructor Summary
DirectionSelectiveFilter(AEChip chip)
          Creates a new instance of DirectionSelectiveFilter
 
Method Summary
 void annotate(float[][][] frame)
          annotate the RGB frame somehow by color pixels in the rendered pixel frame data.
 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.
static java.lang.String getDescription()
           
 int getExcessSpeedRejectFactor()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 int getMaxDtThreshold()
           
 int getMinDtThreshold()
           
 DirectionSelectiveFilter.MotionVectors getMotionVectors()
          The motion vectors are the global motion components
 float getPpsScale()
           
 float getRotationRadPerSec()
           
 int getSearchDistance()
           
 float getSpeedMixingFactor()
           
 int getSubSampleShift()
           
 int getTauLow()
           
 java.awt.geom.Point2D.Float getTranslationVector()
          Returns the 2-vector of global translational average motion
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isGeneratingFilter()
           
 boolean isShowGlobalEnabled()
           
 boolean isShowRawInputEnabled()
           
 boolean isShowVectorsEnabled()
           
 boolean isSpeedControlEnabled()
           
 boolean isUseAvgDtEnabled()
           
 void resetFilter()
          should reset the filter to initial state
 void setExcessSpeedRejectFactor(int excessSpeedRejectFactor)
           
 void setFilterEnabled(boolean yes)
          overrides super to ensure that preceeding DirectionSelectiveFilter is also enabled
 void setMaxDtThreshold(int maxDtThreshold)
           
 void setMinDtThreshold(int minDtThreshold)
           
 void setPpsScale(float ppsScale)
          scale for drawn motion vectors, pixels per second per pixel
 void setSearchDistance(int searchDistance)
           
 void setShowGlobalEnabled(boolean showGlobalEnabled)
           
 void setShowRawInputEnabled(boolean showRawInputEnabled)
           
 void setShowVectorsEnabled(boolean showVectorsEnabled)
           
 void setSpeedControlEnabled(boolean speedControlEnabled)
           
 void setSpeedMixingFactor(float speedMixingFactor)
           
 void setSubSampleShift(int subSampleShift)
          Sets the number of spatial bits to subsample events times by.
 void setTauLow(int tauLow)
           
 void setUseAvgDtEnabled(boolean useAvgDtEnabled)
           
 void update(java.util.Observable o, java.lang.Object arg)
           
 
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

MAX_SEARCH_DISTANCE

public static final int MAX_SEARCH_DISTANCE
See Also:
Constant Field Values
Constructor Detail

DirectionSelectiveFilter

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

Method Detail

getDescription

public static java.lang.String getDescription()

isGeneratingFilter

public boolean isGeneratingFilter()

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

resetFilter

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

Specified by:
resetFilter in class EventFilter

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

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)
Description copied from interface: FrameAnnotater
annotate the RGB frame somehow by color pixels in the rendered pixel frame data.

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

setFilterEnabled

public void setFilterEnabled(boolean yes)
overrides super to ensure that preceeding DirectionSelectiveFilter is also enabled

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

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

getMaxDtThreshold

public int getMaxDtThreshold()

setMaxDtThreshold

public void setMaxDtThreshold(int maxDtThreshold)

getMinDtThreshold

public int getMinDtThreshold()

setMinDtThreshold

public void setMinDtThreshold(int minDtThreshold)

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

update

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

getSearchDistance

public int getSearchDistance()

getTranslationVector

public java.awt.geom.Point2D.Float getTranslationVector()
Returns the 2-vector of global translational average motion

Returns:
translational motion in pixels per second, as computed and filtered by Translation

getRotationRadPerSec

public float getRotationRadPerSec()
Returns:
rotational motion of image around center of chip in rad/sec as computed from the global motion vector integration

setSearchDistance

public void setSearchDistance(int searchDistance)

getMotionVectors

public DirectionSelectiveFilter.MotionVectors getMotionVectors()
The motion vectors are the global motion components


isSpeedControlEnabled

public boolean isSpeedControlEnabled()

setSpeedControlEnabled

public void setSpeedControlEnabled(boolean speedControlEnabled)

isShowGlobalEnabled

public boolean isShowGlobalEnabled()

setShowGlobalEnabled

public void setShowGlobalEnabled(boolean showGlobalEnabled)

isShowVectorsEnabled

public boolean isShowVectorsEnabled()

setShowVectorsEnabled

public void setShowVectorsEnabled(boolean showVectorsEnabled)

getPpsScale

public float getPpsScale()

setPpsScale

public void setPpsScale(float ppsScale)
scale for drawn motion vectors, pixels per second per pixel


getSpeedMixingFactor

public float getSpeedMixingFactor()

setSpeedMixingFactor

public void setSpeedMixingFactor(float speedMixingFactor)

getExcessSpeedRejectFactor

public int getExcessSpeedRejectFactor()

setExcessSpeedRejectFactor

public void setExcessSpeedRejectFactor(int excessSpeedRejectFactor)

getTauLow

public int getTauLow()

setTauLow

public void setTauLow(int tauLow)

isShowRawInputEnabled

public boolean isShowRawInputEnabled()

setShowRawInputEnabled

public void setShowRawInputEnabled(boolean showRawInputEnabled)

isUseAvgDtEnabled

public boolean isUseAvgDtEnabled()

setUseAvgDtEnabled

public void setUseAvgDtEnabled(boolean useAvgDtEnabled)

getSubSampleShift

public int getSubSampleShift()

setSubSampleShift

public void setSubSampleShift(int subSampleShift)
Sets the number of spatial bits to subsample events times by. Setting this equal to 1, for example, subsamples into an event time map with halved spatial resolution, aggreating over more space at coarser resolution but increasing the search range by a factor of two at no additional cost

Parameters:
subSampleShift - the number of bits, 0 means no subsampling

jAER project on SourceForge