Documentation of 'boofcv.alg.feature.describe.DescribePointSift' Java class
DescribePointSift
boofcv.alg.feature.describe

Class DescribePointSift<Deriv extends ImageGray>



  • public class DescribePointSift<Deriv extends ImageGray>
    extends DescribeSiftCommon

    A faithful implementation of the SIFT descriptor.

    The descriptor is computed inside of a square grid which is scaled and rotated. Each grid cell is composed of a square sub-region. If the sub-region is 4x4 and the outer grid is 5x5 then a total area of size 20x20 is sampled. For each sub-region a histogram with N bins of orientations is computed. Orientation from each sample point comes from the image's spacial derivative. If the outer grid is 4x4 and the histogram N=8, then the total descriptor will be 128 elements.

    When a point is sample, its orientation (-pi to pi) and magnitude sqrt(dx**2 + dy**2) are both computed. A contribution from this sample point is added to the entire descriptor and weighted using trilinear interpolation (outer grid x-y coordinate, and orientation bin), Gaussian distribution centered at key point location, and the magnitude.

    There are no intentional differences from the paper. However the paper is ambiguous in some places.

    • Interpolation method for sampling image pixels isn't specified. Nearest-neighbor is assumed and that's what VLFeat uses too.
    • Size of sample region. Oddly enough, I can't find this very important parameter specified anywhere. The suggested value comes from empirical testing.

    [1] Lowe, D. "Distinctive image features from scale-invariant keypoints". International Journal of Computer Vision, 60, 2 (2004), pp.91--110.

    • Constructor Summary

      Constructors 
      Constructor and Description
      DescribePointSift(int widthSubregion, int widthGrid, int numHistogramBins, double sigmaToPixels, double weightingSigmaFraction, double maxDescriptorElementValue, java.lang.Class<Deriv> derivType)
      Configures the descriptor.
    • Constructor Detail

      • DescribePointSift

        public DescribePointSift(int widthSubregion,
                                 int widthGrid,
                                 int numHistogramBins,
                                 double sigmaToPixels,
                                 double weightingSigmaFraction,
                                 double maxDescriptorElementValue,
                                 java.lang.Class<Deriv> derivType)
        Configures the descriptor.
        Parameters:
        widthSubregion - Width of sub-region in samples. Try 4
        widthGrid - Width of grid in subregions. Try 4.
        numHistogramBins - Number of bins in histogram. Try 8
        sigmaToPixels - Conversion of sigma to pixels. Used to scale the descriptor region. Try 1.5 ??????
        weightingSigmaFraction - Sigma for Gaussian weighting function is set to this value * region width. Try 0.5
        maxDescriptorElementValue - Helps with non-affine changes in lighting. See paper. Try 0.2
    • Method Detail

      • setImageGradient

        public void setImageGradient(Deriv derivX,
                                     Deriv derivY)
        Sets the image spacial derivatives. These should be computed from an image at the appropriate scale in scale-space.
        Parameters:
        derivX - x-derivative of input image
        derivY - y-derivative of input image
      • process

        public void process(double c_x,
                            double c_y,
                            double sigma,
                            double orientation,
                            TupleDesc_F64 descriptor)
        Computes the SIFT descriptor for the specified key point
        Parameters:
        c_x - center of key point. x-axis
        c_y - center of key point. y-axis
        sigma - Computed sigma in scale-space for this point
        orientation - Orientation of keypoint in radians
        descriptor - (output) Storage for computed descriptor. Make sure it's the appropriate length first

DataMelt 3.0 © DataMelt by jWork.ORG

You see the box below because you did not login.