jAER project on SourceForge

net.sf.jaer.stereopsis
Class DisparityFilter

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

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

The filter calculates x-coordinate disparities for every single event, by averaging over disparities of previous events in the local neighborhood. Therefore the disparites of single events should be spatially and temporally smooth. First, the algorithm calculates a weighted average of previous disparity values in the neighborhood (= oldMeanDisp). The weight depends on the time difference between the actual and the previous events, s.t. recent events will have more weight. Depending on the mean time difference from the previous events, the search range for the actual stereomatching will be restricted around oldMeanDisp. The disparity of the actual event is then calculated by a linear interpolation between the best match in the restricted search range and oldMeanDisp. Because looking at all points in a certain radius is too expansive for neighborhood computation, only a sparse set of surrounding points will be evaluated. These points are stored in the file 'neighbors.dat'. New sets of points can be generated easyly by using the matlab 'function neighborhoodCreator.m'.

Author:
Peter Hess

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
DisparityFilter(AEChip chip)
          Creates a new instance of GlobalXDisparityFilter3
 
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.
 int getDisparity()
           
 float getDistFactor()
           
 java.lang.Object getFilterState()
          should return the filter state in some useful form
 int getMaxDisp()
           
 float getRangeFactor()
           
 float getSmoothFactor()
           
 void initFilter()
          this should allocate and initialize memory: it may be called when the chip e.g.
 boolean isGeneratingFilter()
           
 void resetFilter()
          should reset the filter to initial state
 void setDistFactor(float distFactor)
          Set the scaling factor for the event correlation depending on time difference.
 void setMaxDisp(int maxDisp)
          Maximal disparity which is considered for event matching.
 void setRangeFactor(float rf)
           
 void setSmoothFactor(float smoothFactor)
          This factor weights the influence of disparities from neigbouring events.
 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

DisparityFilter

public DisparityFilter(AEChip chip)
Creates a new instance of GlobalXDisparityFilter3

Method Detail

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

isGeneratingFilter

public boolean isGeneratingFilter()

update

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

setDistFactor

public void setDistFactor(float distFactor)
Set the scaling factor for the event correlation depending on time difference.


getDistFactor

public float getDistFactor()

setRangeFactor

public void setRangeFactor(float rf)

getRangeFactor

public float getRangeFactor()

setSmoothFactor

public void setSmoothFactor(float smoothFactor)
This factor weights the influence of disparities from neigbouring events. A higher value will result in more smoothing, but reaction to changing object distance will also be slower.


getSmoothFactor

public float getSmoothFactor()

setMaxDisp

public void setMaxDisp(int maxDisp)
Maximal disparity which is considered for event matching.


getMaxDisp

public int getMaxDisp()

getDisparity

public int getDisparity()

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

jAER project on SourceForge