jAER project on SourceForge

net.sf.jaer.eventprocessing.filter
Class SubSamplingBandpassFilter

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

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

Does an event-based spatio-temporal highpass filter, so that only small isolated objects pass through. Uses a subsampled surround for very high efficiency. Incoming events are subsampled and their times are stored in a subsample event time map. Each entry in this map keeps track of the latest event time for this subsampled location, thus it represents activity in this region of input space. This map is used to determine if an event has been preceeded by surrouding activity. The use of prior subsampling means that only a small number of memory locations need to be checked to see if the event has sufficiently small surround activity.

Author:
tobi

Field Summary
 
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
SubSamplingBandpassFilter(AEChip c)
          Creates a new instance of SubSamplingBandpassFilter
 
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 getDtSurround()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 float getRateMixingFactor()
           
 int getSurroundRadius()
           
 float getsurroundRateThresholdHz()
           
 int getSurroundScale()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isShowAnnotationEnabled()
           
 boolean isWarnNonMonotonicTimestamp()
           
 void resetFilter()
          should reset the filter to initial state
 void setDtSurround(int dtSurround)
          sets the time in timestamp ticks (1us at present) that a spike in surround will inhibit a spike from center passing through.
 void setFilterEnabled(boolean yes)
          Resets the filter
 void setRateMixingFactor(float rateMixingFactor)
           
 void setShowAnnotationEnabled(boolean showAnnotationEnabled)
           
 void setSurroundRadius(int surroundRadius)
          sets the surround radius.
 void setsurroundRateThresholdHz(float surroundRateThresholdHz)
          If the surround spike rate exceeds this value in Hz then the spike is filtered out (it is inhibited)
 void setSurroundScale(int surroundScale)
          Set the scale of the surround map subsampling in bits.
 void setWarnNonMonotonicTimestamp(boolean warnNonMonotonicTimestamp)
           
 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
 

Constructor Detail

SubSamplingBandpassFilter

public SubSamplingBandpassFilter(AEChip c)
Creates a new instance of SubSamplingBandpassFilter

Method Detail

getDescription

public static java.lang.String getDescription()

setFilterEnabled

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

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

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

update

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

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

getDtSurround

public int getDtSurround()

setDtSurround

public void setDtSurround(int dtSurround)
sets the time in timestamp ticks (1us at present) that a spike in surround will inhibit a spike from center passing through.

Parameters:
dtSurround - the time in us

getSurroundScale

public int getSurroundScale()

setSurroundScale

public void setSurroundScale(int surroundScale)
Set the scale of the surround map subsampling in bits. Clipped to minimum value 0 (no subsampling) up to a maximum value of log_2(chip.getMaxSize()).

Parameters:
surroundScale - the number of bits of subsampling, e.g. 1 means subsample every 2x2 area to a single address.

getSurroundRadius

public int getSurroundRadius()

setSurroundRadius

public void setSurroundRadius(int surroundRadius)
sets the surround radius. This value is clipped to be at least 1 and at most the maximum possible search distance given the surroundScale. This value sets the radius in 'pixels' of the surround that is searched for prior events. The search occurs over the subsampled map whose scale is set by surroundScale.

Parameters:
surroundRadius - the radius in pixels for a square area. 1 is 8 pixels (3x3 minus center), etc.
See Also:
setSurroundScale(int)

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

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

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

isShowAnnotationEnabled

public boolean isShowAnnotationEnabled()

setShowAnnotationEnabled

public void setShowAnnotationEnabled(boolean showAnnotationEnabled)

isWarnNonMonotonicTimestamp

public boolean isWarnNonMonotonicTimestamp()

setWarnNonMonotonicTimestamp

public void setWarnNonMonotonicTimestamp(boolean warnNonMonotonicTimestamp)

getsurroundRateThresholdHz

public float getsurroundRateThresholdHz()

setsurroundRateThresholdHz

public void setsurroundRateThresholdHz(float surroundRateThresholdHz)
If the surround spike rate exceeds this value in Hz then the spike is filtered out (it is inhibited)


getRateMixingFactor

public float getRateMixingFactor()

setRateMixingFactor

public void setRateMixingFactor(float rateMixingFactor)

jAER project on SourceForge