utilities.boofcv_extensions
Class DescribePointSurfModNormalization<II extends boofcv.struct.image.ImageSingleBand>

java.lang.Object
  extended by utilities.boofcv_extensions.DescribePointSurfNormalization<II>
      extended by utilities.boofcv_extensions.DescribePointSurfModNormalization<II>

public class DescribePointSurfModNormalization<II extends boofcv.struct.image.ImageSingleBand>
extends DescribePointSurfNormalization<II>

Modified SURF descriptor which attempts to smooth out edge conditions. Based upon MU-SURF described in [1] it computes features in over lapping sub-regions and has a separate set of weights for the large grid and for sub-regions. Due to these improvements it will in general produce better results than DescribePointSurf at the cost of additional computations.

[1] M. Agrawal, K. Konolige, and M. Blas, "CenSurE: Center Surround Extremas for Realtime Feature Detection and Matching," Computer Vision – ECCV 2008

Author:
Peter Abeles

Field Summary
private  int overLap
           
private  double[] samplesX
           
private  double[] samplesY
           
(package private)  int sampleWidth
           
private  boofcv.struct.convolve.Kernel2D_F64 weightGrid
           
private  boofcv.struct.convolve.Kernel2D_F64 weightSub
           
 
Fields inherited from class utilities.boofcv_extensions.DescribePointSurfNormalization
featureDOF, gradient, ii, weight, widthLargeGrid, widthSample, widthSubRegion
 
Constructor Summary
DescribePointSurfModNormalization(java.lang.Class<II> imageType)
          Create a SURF-64 descriptor.
DescribePointSurfModNormalization(int widthLargeGrid, int widthSubRegion, int widthSample, int overLap, double sigmaLargeGrid, double sigmaSubRegion, boolean useHaar, java.lang.Class<II> imageType)
          Creates a SURF descriptor of arbitrary dimension by changing how the local region is sampled.
 
Method Summary
 void describe(double x, double y, double angle, double scale, boofcv.struct.feature.SurfFeature ret)
           Computes the SURF descriptor for the specified interest point.
 void features(double c_x, double c_y, double c, double s, double scale, boofcv.struct.sparse.SparseImageGradient gradient, double[] features)
           An improved SURF descriptor as presented in CenSurE paper.
 int getRadius()
           
 
Methods inherited from class utilities.boofcv_extensions.DescribePointSurfNormalization
computeLaplaceSign, createDescription, getDescriptionLength, setImage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

overLap

private int overLap

weightGrid

private boofcv.struct.convolve.Kernel2D_F64 weightGrid

weightSub

private boofcv.struct.convolve.Kernel2D_F64 weightSub

samplesX

private double[] samplesX

samplesY

private double[] samplesY

sampleWidth

int sampleWidth
Constructor Detail

DescribePointSurfModNormalization

public DescribePointSurfModNormalization(int widthLargeGrid,
                                         int widthSubRegion,
                                         int widthSample,
                                         int overLap,
                                         double sigmaLargeGrid,
                                         double sigmaSubRegion,
                                         boolean useHaar,
                                         java.lang.Class<II> imageType)
Creates a SURF descriptor of arbitrary dimension by changing how the local region is sampled.

Parameters:
widthLargeGrid - Number of sub-regions wide the large grid is. Typically 4.
widthSubRegion - Number of sample points wide a sub-region is. Typically 5.
widthSample - The size of a sample point. Typically 4.
overLap - Number of sample points sub-regions overlap, Typically 2.
sigmaLargeGrid - Sigma used to weight points in the large grid. Typically 2.5
sigmaSubRegion - Sigma used to weight points in the sub-region grid. Typically 2.5
useHaar - If true the Haar wavelet will be used (what was used in [1]), false means an image gradient approximation will be used. True is recommended.

DescribePointSurfModNormalization

public DescribePointSurfModNormalization(java.lang.Class<II> imageType)
Create a SURF-64 descriptor. See [1] for details.

Method Detail

describe

public void describe(double x,
                     double y,
                     double angle,
                     double scale,
                     boofcv.struct.feature.SurfFeature ret)

Computes the SURF descriptor for the specified interest point. If the feature goes outside of the image border (including convolution kernels) then null is returned.

Overrides:
describe in class DescribePointSurfNormalization<II extends boofcv.struct.image.ImageSingleBand>
Parameters:
x - Location of interest point.
y - Location of interest point.
angle - The angle the feature is pointing at in radians.
scale - Scale of the interest point. Null is returned if the feature goes outside the image border.
ret - storage for the feature. Must have 64 values. If null a new feature will be declared internally.

features

public void features(double c_x,
                     double c_y,
                     double c,
                     double s,
                     double scale,
                     boofcv.struct.sparse.SparseImageGradient gradient,
                     double[] features)

An improved SURF descriptor as presented in CenSurE paper. The sub-regions now overlap and more points are sampled in the sub-region to allow overlap.

Overrides:
features in class DescribePointSurfNormalization<II extends boofcv.struct.image.ImageSingleBand>
Parameters:
c_x - Center of the feature x-coordinate.
c_y - Center of the feature y-coordinate.
c - cosine of the orientation
s - sine of the orientation
scale - The scale of the wavelets.
features - Where the features are written to. Must be 4*(widthLargeGrid*widthSubRegion)^2 large.

getRadius

public int getRadius()
Overrides:
getRadius in class DescribePointSurfNormalization<II extends boofcv.struct.image.ImageSingleBand>