jAER project on SourceForge

ch.unizh.ini.jaer.projects.rccar
Class OrientationCluster

java.lang.Object
  extended by net.sf.jaer.eventprocessing.EventFilter
      extended by net.sf.jaer.eventprocessing.EventFilter2D
          extended by ch.unizh.ini.jaer.projects.rccar.OrientationCluster
All Implemented Interfaces:
java.util.Observer, FrameAnnotater

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

Author:
braendch This Filter creates for each event an orientation vector and calculates the common orientation of its neighbors. To pass the filter, the difference of these two orientations has to be smaller than a certain 'tolerance' (in degrees), and the orientation must be within a certain range around vertical (ori) and the neighborhoodvector has to be big enough (neighborThr) to ensure that it doesn't have the right orientation just because of random. To create the orientation vector for each event the receptive (width*height) field is investigated and the normalized orientation vectors to each past event in the receptive field that satisfies a certain actuality (dt) is divided by the time past between the two events. If two events are of different polarity (data index 3) the orientation is roatated by 90° - this is because the contrast gradient is perpendicular to an edge. To simplify calculation all vectors have an positive y-component. The orientation History takes account of the past orientaions of the events and of the neighbors.

Field Summary
 float[][] attention
           
 
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
OrientationCluster(AEChip chip)
           
 
Method Summary
 void annotate(float[][][] frame)
          not used
 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)
          not used
 EventPacket filterPacket(EventPacket in)
          Subclasses implement this method to define custom processing.
 float getAttentionFactor()
           
 float getDt()
           
 float getFactor()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 int getHeight()
           
 float getHistoryFactor()
           
 float getNeighborThr()
           
 float getOri()
           
 float getThrGradient()
           
 float getTolerance()
           
 int getWidth()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isGeneratingFilter()
           
 boolean isOriHistoryEnabled()
           
 boolean isShowAll()
           
 boolean isShowOriEnabled()
           
 boolean isUseAttention()
           
 boolean isUseOppositePolarity()
           
 void resetFilter()
          should reset the filter to initial state
 void setAttentionFactor(float attentionFactor)
           
 void setDt(float dt)
           
 void setFactor(float factor)
           
 void setFilterEnabled(boolean yes)
          Resets the filter
 void setHeight(int height)
           
 void setHistoryFactor(float historyFactor)
           
 void setNeighborThr(float neighborThr)
           
 void setOri(float ori)
           
 void setOriHistoryEnabled(boolean oriHistoryEnabled)
           
 void setShowAll(boolean showAll)
           
 void setShowOriEnabled(boolean showOriEnabled)
           
 void setThrGradient(float thrGradient)
           
 void setTolerance(float tolerance)
           
 void setUseAttention(boolean useAttention)
           
 void setUseOppositePolarity(boolean useOppositePolarity)
           
 void setWidth(int width)
           
 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, 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
 

Field Detail

attention

public float[][] attention
Constructor Detail

OrientationCluster

public OrientationCluster(AEChip chip)
Method Detail

isGeneratingFilter

public boolean isGeneratingFilter()

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()

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

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

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

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)
not used

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)
not used

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

isOriHistoryEnabled

public boolean isOriHistoryEnabled()

setOriHistoryEnabled

public void setOriHistoryEnabled(boolean oriHistoryEnabled)

isUseOppositePolarity

public boolean isUseOppositePolarity()

setUseOppositePolarity

public void setUseOppositePolarity(boolean useOppositePolarity)

isUseAttention

public boolean isUseAttention()

setUseAttention

public void setUseAttention(boolean useAttention)

isShowOriEnabled

public boolean isShowOriEnabled()

setShowOriEnabled

public void setShowOriEnabled(boolean showOriEnabled)

isShowAll

public boolean isShowAll()

setShowAll

public void setShowAll(boolean showAll)

getTolerance

public float getTolerance()

setTolerance

public void setTolerance(float tolerance)

getNeighborThr

public float getNeighborThr()

setNeighborThr

public void setNeighborThr(float neighborThr)

getOri

public float getOri()

setOri

public void setOri(float ori)

getThrGradient

public float getThrGradient()

setThrGradient

public void setThrGradient(float thrGradient)

getDt

public float getDt()

setDt

public void setDt(float dt)

getFactor

public float getFactor()

setFactor

public void setFactor(float factor)

getHistoryFactor

public float getHistoryFactor()

setHistoryFactor

public void setHistoryFactor(float historyFactor)

getAttentionFactor

public float getAttentionFactor()

setAttentionFactor

public void setAttentionFactor(float attentionFactor)

getHeight

public int getHeight()

setHeight

public void setHeight(int height)

getWidth

public int getWidth()

setWidth

public void setWidth(int width)

jAER project on SourceForge