Class SIFT

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.awt.event.WindowListener, java.lang.Runnable, java.util.EventListener

    public class SIFT
    extends AlgorithmBase
    Copyright (C) 2007-11, Andrea Vedaldi and Brian Fulkerson Copyright (C) 2012-13, The VLFeat Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    • Field Detail

      • VL_ERR_OVERFLOW

        private final int VL_ERR_OVERFLOW
        See Also:
        Constant Field Values
        • VL_ERR_ALLOC

          private final int VL_ERR_ALLOC
          See Also:
          Constant Field Values
          • VL_ERR_BAD_ARG

            private final int VL_ERR_BAD_ARG
            See Also:
            Constant Field Values
            • VL_ERR_IO

              private final int VL_ERR_IO
              See Also:
              Constant Field Values
              • VL_ERR_EOF

                private final int VL_ERR_EOF
                See Also:
                Constant Field Values
                • VL_PROT_UNKNOWN

                  private final int VL_PROT_UNKNOWN
                  See Also:
                  Constant Field Values
                  • VL_PROT_NONE

                    private final int VL_PROT_NONE
                    See Also:
                    Constant Field Values
                    • VL_PROT_ASCII

                      private final int VL_PROT_ASCII
                      See Also:
                      Constant Field Values
                      • VL_PROT_BINARY

                        private final int VL_PROT_BINARY
                        See Also:
                        Constant Field Values
                        • VL_ERR_PGM_INV_HEAD

                          private final int VL_ERR_PGM_INV_HEAD
                          See Also:
                          Constant Field Values
                          • VL_ERR_PGM_INV_META

                            private final int VL_ERR_PGM_INV_META
                            See Also:
                            Constant Field Values
                            • VL_ERR_PGM_INV_DATA

                              private final int VL_ERR_PGM_INV_DATA
                              See Also:
                              Constant Field Values
                              • VL_ERR_PGM_IO

                                private final int VL_ERR_PGM_IO
                                See Also:
                                Constant Field Values
                                • EOF

                                  private final int EOF
                                  See Also:
                                  Constant Field Values
                                  • fileDir

                                    private java.lang.String[] fileDir
                                  • fileName

                                    private java.lang.String[] fileName
                                  • fileNum

                                    private int fileNum
                                  • mosaic

                                    private boolean mosaic
                                  • verbose

                                    private boolean verbose
                                  • outarg

                                    private java.lang.String outarg
                                  • framesarg

                                    private java.lang.String framesarg
                                  • descriptorarg

                                    private java.lang.String descriptorarg
                                  • metaarg

                                    private java.lang.String metaarg
                                  • read_framesarg

                                    private java.lang.String read_framesarg
                                  • gssarg

                                    private java.lang.String gssarg
                                  • O

                                    private int O
                                  • S

                                    private int S
                                  • omin

                                    private int omin
                                  • edge_thresh

                                    private double edge_thresh
                                  • peak_thresh

                                    private double peak_thresh
                                  • norm_thresh

                                    private double norm_thresh
                                  • magnif

                                    private double magnif
                                  • window_size

                                    private double window_size
                                  • force_orientations

                                    private boolean force_orientations
                                  • writeFrames

                                    private boolean writeFrames
                                  • readFrames

                                    private boolean readFrames
                                  • writeDescriptor

                                    private boolean writeDescriptor
                                  • writeMeta

                                    private boolean writeMeta
                                  • writeGss

                                    private boolean writeGss
                                  • NBO

                                    private int NBO
                                  • NBP

                                    private int NBP
                                  • EXPN_SZ

                                    private int EXPN_SZ
                                  • EXPN_MAX

                                    private double EXPN_MAX
                                    • expn_tab

                                      private double[] expn_tab
                                      • VL_PAD_BY_ZERO

                                        private int VL_PAD_BY_ZERO
                                        • VL_PAD_BY_CONTINUITY

                                          private int VL_PAD_BY_CONTINUITY
                                          • VL_PAD_MASK

                                            private int VL_PAD_MASK
                                            • VL_TRANSPOSE

                                              private int VL_TRANSPOSE
                                              • VL_EPSILON_F

                                                private float VL_EPSILON_F
                                                • VL_EPSILON_D

                                                  private double VL_EPSILON_D
                                                • VL_SIFT_BILINEAR_ORIENTATIONS

                                                  private boolean VL_SIFT_BILINEAR_ORIENTATIONS
                                                • Constructor Detail

                                                  • SIFT

                                                    public SIFT()
                                                    SIFT - default constructor.
                                                  • SIFT

                                                    public SIFT​(java.lang.String[] fileDir,
                                                                java.lang.String[] fileName,
                                                                boolean mosaic,
                                                                boolean verbose,
                                                                java.lang.String outarg,
                                                                java.lang.String framesarg,
                                                                java.lang.String descriptorarg,
                                                                java.lang.String metaarg,
                                                                java.lang.String read_framesarg,
                                                                java.lang.String gssarg,
                                                                int O,
                                                                int S,
                                                                int omin,
                                                                double edge_thresh,
                                                                double peak_thresh,
                                                                double norm_thresh,
                                                                double magnif,
                                                                double window_size,
                                                                boolean force_orientations,
                                                                boolean writeFrames,
                                                                boolean readFrames,
                                                                boolean writeDescriptor,
                                                                boolean writeMeta,
                                                                boolean writeGss)
                                                • Method Detail

                                                  • runAlgorithm

                                                    public void runAlgorithm()
                                                    Description copied from class: AlgorithmBase
                                                    Actually runs the algorithm. Implemented by inheriting algorithms.
                                                    Specified by:
                                                    runAlgorithm in class AlgorithmBase
                                                  • vl_imwbackwardmx

                                                    private float[] vl_imwbackwardmx​(int[] X_pt,
                                                                                     int[] Y_pt,
                                                                                     float[] I_pt,
                                                                                     double[][] iwXp_pt,
                                                                                     double[][] iwYp_pt,
                                                                                     int M,
                                                                                     int N)
                                                  • findNeighbor

                                                    private int findNeighbor​(double x,
                                                                             int[] X,
                                                                             int K)
                                                  • vl_imwbackwardmx

                                                    private double[] vl_imwbackwardmx​(int[] X_pt,
                                                                                      int[] Y_pt,
                                                                                      double[] I_pt,
                                                                                      double[][] iwXp_pt,
                                                                                      double[][] iwYp_pt,
                                                                                      int M,
                                                                                      int N)
                                                  • randomize

                                                    private void randomize​(int[] arr)
                                                  • vl_file_meta_open

                                                    private java.io.RandomAccessFile vl_file_meta_open​(SIFT.VlFileMeta self,
                                                                                                       java.lang.String basename,
                                                                                                       java.lang.String mode,
                                                                                                       int[] error)
                                                    Parameters:
                                                    self - File meta information.
                                                    basename - Basename.
                                                    mode - Opening mode (as in @c fopen).
                                                    Returns:
                                                    error code. The error may be either either ::VL_ERR_OVERFLOW if the file name is too long or to ::VL_ERR_IO if the file cannot be opened.
                                                  • vl_file_meta_close

                                                    private void vl_file_meta_close​(SIFT.VlFileMeta self)
                                                    Parameters:
                                                    self - File meta information.
                                                  • vl_file_meta_parse

                                                    private int vl_file_meta_parse​(SIFT.VlFileMeta self,
                                                                                   java.lang.String optarg)
                                                    Parameters:
                                                    optarg - argument to parse.
                                                    self - structure to initalize. The function parses the string @a optarg to fill the structure @a self. @a optarg is supposed to be composed of two parts: a file protocol specification and a file pattern. Then the function: - Sets VlFileMeta::active to true. - Sets VlFileMeta::protocol to the file protocol id (if any). - Sets VlFileMeta::pattern to the file pattern (if any).
                                                    Returns:
                                                    error code. The funciton may fail either because the file protocol is not recognized (::VL_ERR_BAD_ARG) or because the file pattern is too long to be stored (::VL_ERR_OVERFLOW).
                                                  • vl_string_parse_protocol

                                                    private java.lang.String vl_string_parse_protocol​(java.lang.String string,
                                                                                                      int[] protocol)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    string - string.
                                                    protocol - protocol code (output).
                                                    Returns:
                                                    pointer to the first character after the protocol prefix. The function extracts the prefix of the string @a string terminated by the first occurrence of the @c :// substring (if any). It then matches the suffix terminated by @c :// to the supported @ref vl-stringop-file-protocols protocols. If @c protocol is not
                                                  • vl_string_protocol_name

                                                    private java.lang.String vl_string_protocol_name​(int protocol)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    protocol - protocol code.
                                                    Returns:
                                                    pointer protocol name string. The function returns a pointer to a string containing the name of the protocol @a protocol (see the @a vl-file-protocols protocols list). If the protocol is unknown the function returns the empty string.
                                                  • PRNFO

                                                    private void PRNFO​(java.lang.String name,
                                                                       SIFT.VlFileMeta fm)
                                                  • vl_string_basename

                                                    private java.lang.String vl_string_basename​(java.lang.String destination,
                                                                                                int destinationSize,
                                                                                                java.lang.String source,
                                                                                                int maxNumStrippedExtensions,
                                                                                                int[] num)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    destination - destination buffer.
                                                    destinationSize - size of destination buffer.
                                                    source - input string.
                                                    maxNumStrippedExtensions - maximum number of extensions to strip.
                                                    Returns:
                                                    length of the destination string. The function removes the leading path and up to @c maxNumStrippedExtensions trailing extensions from the string @a source and writes the result to the buffer @a destination. The leading path is the longest suffix that ends with either the
                                                  • vl_string_copy_sub

                                                    private java.lang.String vl_string_copy_sub​(java.lang.String destination,
                                                                                                int destinationSize,
                                                                                                java.lang.String source,
                                                                                                int beginning,
                                                                                                int end,
                                                                                                int[] num)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    destination - output buffer.
                                                    destinationSize - size of output buffer.
                                                    beginning - start of the substring.
                                                    end - end of the substring.
                                                    Returns:
                                                    length of the destination string. The function copies the substring from at @a beginning to @a end (not included) to the buffer @a destination of size @a destinationSize. If, however, the null character is found before
                                                  • vl_pgm_extract_head

                                                    private int vl_pgm_extract_head​(java.io.RandomAccessFile f,
                                                                                    SIFT.VlPgmImage im)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - input file.
                                                    im - image structure to fill.
                                                    Returns:
                                                    error code. The function extracts from the file @a f the meta-data section of an image encoded in PGM format. The function fills the structure ::VlPgmImage accordingly. The error may be either ::VL_ERR_PGM_INV_HEAD or ::VL_ERR_PGM_INV_META depending whether the error occurred in decoding the header or meta section of the PGM file.
                                                  • remove_line

                                                    private int remove_line​(java.io.RandomAccessFile f)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - file to strip.
                                                    Returns:
                                                    number of characters removed.
                                                  • remove_blanks

                                                    private int remove_blanks​(java.io.RandomAccessFile f,
                                                                              int[] err)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - file to strip.
                                                    Returns:
                                                    number of characters removed.
                                                  • readAsciiInt

                                                    private int readAsciiInt​(java.io.RandomAccessFile f)
                                                  • readAsciiDouble

                                                    private double readAsciiDouble​(java.io.RandomAccessFile f,
                                                                                   int[] err)
                                                  • vl_pgm_get_npixels

                                                    private int vl_pgm_get_npixels​(SIFT.VlPgmImage im)
                                                  • vl_pgm_extract_data

                                                    int vl_pgm_extract_data​(java.io.RandomAccessFile f,
                                                                            SIFT.VlPgmImage im,
                                                                            int[] data)
                                                  • vl_string_replace_wildcard

                                                    private java.lang.String vl_string_replace_wildcard​(java.lang.String destination,
                                                                                                        int destinationSize,
                                                                                                        java.lang.String source,
                                                                                                        java.lang.String wildcardChar,
                                                                                                        java.lang.String escapeChar,
                                                                                                        java.lang.String replacement,
                                                                                                        int[] num)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    destination - output buffer.
                                                    destinationSize - size of the output buffer.
                                                    source - input string.
                                                    wildcardChar - wildcard character.
                                                    escapeChar - escape character.
                                                    replacement - replacement string. The function replaces the occurrence of the specified wildcard character @a wildcardChar by the string @a replacement. The result is written to the buffer @a destination of size @a destinationSize. Wildcard characters may be escaped by preceding them by the @a esc character. More in general, anything following an occurrence of @a esc character is copied verbatim. To disable the escape characters simply set @a esc to 0.
                                                    Returns:
                                                    length of the result.
                                                  • vl_file_meta_get_double

                                                    private int vl_file_meta_get_double​(int protocol,
                                                                                        java.io.RandomAccessFile file,
                                                                                        double[] x)
                                                    Parameters:
                                                    self - File meta information.
                                                    x - Datum read.
                                                    Returns:
                                                    error code. The function returns ::VL_ERR_EOF if the end-of-file is reached and ::VL_ERR_BAD_ARG if the file is malformed.
                                                  • log2

                                                    private double log2​(double x)
                                                  • VL_SHIFT_LEFT

                                                    private int VL_SHIFT_LEFT​(int x,
                                                                              int n)
                                                    Parameters:
                                                    x - value.
                                                    n - number of shift positions.
                                                    Returns:
                                                  • fast_expn_init

                                                    private void fast_expn_init()
                                                  • vl_sift_new

                                                    SIFT.VlSiftFilt vl_sift_new​(int width,
                                                                                int height,
                                                                                int noctaves,
                                                                                int nlevels,
                                                                                int o_min)
                                                  • copy_and_upsample_rows

                                                    private void copy_and_upsample_rows​(float[] dst,
                                                                                        int dstIndex,
                                                                                        float[] src,
                                                                                        int srcIndex,
                                                                                        int width,
                                                                                        int height)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                    im - image data. The function starts processing a new image by computing its Gaussian scale space at the lower octave. It also empties the internal keypoint buffer.
                                                  • copy_and_downsample

                                                    private void copy_and_downsample​(float[] dst,
                                                                                     int dstIndex,
                                                                                     float[] src,
                                                                                     int srcIndex,
                                                                                     int width,
                                                                                     int height,
                                                                                     int d)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    dst - output imgae buffer.
                                                    src - input image buffer.
                                                    width - input image width.
                                                    height - input image height.
                                                    d - octaves (non negative). The function downsamples the image @a d times, reducing it to @c 1/2^d of its original size. The parameters @a width and @a height are the size of the input image. The destination image @a dst is assumed to be floor(width/2^d) pixels wide and floor(height/2^d) pixels high.
                                                  • vl_imconvcol_vf

                                                    private void vl_imconvcol_vf​(float[] dst,
                                                                                 int dst_index,
                                                                                 int dst_stride,
                                                                                 float[] src,
                                                                                 int src_index,
                                                                                 int src_width,
                                                                                 int src_height,
                                                                                 int src_stride,
                                                                                 float[] filt,
                                                                                 int filt_begin,
                                                                                 int filt_end,
                                                                                 int step,
                                                                                 int flags)
                                                  • _vl_sift_smooth

                                                    private void _vl_sift_smooth​(SIFT.VlSiftFilt self,
                                                                                 float[] outputImage,
                                                                                 int output_index,
                                                                                 float[] tempImage,
                                                                                 float[] inputImage,
                                                                                 int input_index,
                                                                                 int width,
                                                                                 int height,
                                                                                 double sigma)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    self - SIFT filter.
                                                    outputImage - output imgae buffer.
                                                    tempImage - temporary image buffer.
                                                    inputImage - input image buffer.
                                                    width - input image width.
                                                    height - input image height.
                                                    sigma - smoothing.
                                                  • vl_sift_process_first_octave

                                                    private int vl_sift_process_first_octave​(SIFT.VlSiftFilt f,
                                                                                             float[] im)
                                                  • vl_sift_get_octave

                                                    private float[] vl_sift_get_octave​(SIFT.VlSiftFilt f,
                                                                                       int s,
                                                                                       int[] octave_index)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                    s - level index. The level index @a s ranges in the interval s_min = -1 and s_max = S + 2, where @c S is the number of levels per octave.
                                                    Returns:
                                                    pointer to the octave data for level @a s.
                                                  • vl_sift_process_next_octave

                                                    private int vl_sift_process_next_octave​(SIFT.VlSiftFilt f)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter. The function computes the next octave of the Gaussian scale space. Notice that this clears the record of any feature detected in the previous octave.
                                                    Returns:
                                                    error code. The function returns the error ::VL_ERR_EOF when there are no more octaves to process.
                                                  • vl_pgm_insert

                                                    private int vl_pgm_insert​(java.io.RandomAccessFile f,
                                                                              SIFT.VlPgmImage im,
                                                                              byte[] data)
                                                  • vl_sift_detect

                                                    private void vl_sift_detect​(SIFT.VlSiftFilt f)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                  • vl_sift_keypoint_init

                                                    private void vl_sift_keypoint_init​(SIFT.VlSiftFilt f,
                                                                                       SIFT.VlSiftKeypoint k,
                                                                                       double x,
                                                                                       double y,
                                                                                       double sigma)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                    k - SIFT keypoint (output).
                                                    x - x coordinate of the keypoint center.
                                                    y - y coordinate of the keypoint center.
                                                    sigma - keypoint scale. The function initializes a keypoint structure @a k from the location @a x and @a y and the scale @a sigma of the keypoint. The keypoint structure maps the keypoint to an octave and scale level of the discretized Gaussian scale space, which is required for instance to compute the keypoint SIFT descriptor.
                                                  • vl_sift_calc_keypoint_orientations

                                                    private int vl_sift_calc_keypoint_orientations​(SIFT.VlSiftFilt f,
                                                                                                   double[] angles,
                                                                                                   SIFT.VlSiftKeypoint k)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                    angles - orientations (output).
                                                    k - keypoint. The function computes the orientation(s) of the keypoint @a k. The function returns the number of orientations found (up to four). The orientations themselves are written to the vector @a angles.
                                                    Returns:
                                                    number of orientations found.
                                                  • update_gradient

                                                    private void update_gradient​(SIFT.VlSiftFilt f)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter. The function makes sure that the gradient buffer is up-to-date with the current GSS data.
                                                  • vl_mod_2pi_f

                                                    private float vl_mod_2pi_f​(float x)
                                                  • vl_sift_calc_keypoint_descriptor

                                                    private void vl_sift_calc_keypoint_descriptor​(SIFT.VlSiftFilt f,
                                                                                                  float[] descr,
                                                                                                  SIFT.VlSiftKeypoint k,
                                                                                                  double angle0)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    f - SIFT filter.
                                                    descr - SIFT descriptor (output)
                                                    k - keypoint.
                                                    angle0 - keypoint direction. The function computes the SIFT descriptor of the keypoint @a k of orientation @a angle0. The function fills the buffer @a descr which must be large enough to hold the descriptor. The function assumes that the keypoint is on the current octave. If not, it does not do anything.
                                                  • normalize_histogram

                                                    private float normalize_histogram​(float[] buf,
                                                                                      int begin,
                                                                                      int end)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    begin - begin of histogram.
                                                    end - end of histogram.
                                                  • vl_file_meta_put_double

                                                    private int vl_file_meta_put_double​(int protocol,
                                                                                        java.io.RandomAccessFile file,
                                                                                        double x)
                                                    Parameters:
                                                    self - File meta information.
                                                    x - Datum to write.
                                                    Returns:
                                                    error code. The function returns ::VL_ERR_ALLOC if the datum cannot be written.
                                                  • vl_file_meta_put_uint8

                                                    private int vl_file_meta_put_uint8​(int protocol,
                                                                                       java.io.RandomAccessFile file,
                                                                                       byte x)
                                                    Parameters:
                                                    self - File meta information.
                                                    x - Datum to write.
                                                    Returns:
                                                    error code. The function returns ::VL_ERR_ALLOC if the datum cannot be written.
                                                  • vl_sift_delete

                                                    private void vl_sift_delete​(SIFT.VlSiftFilt f)
                                                    ------------------------------------------------------------------
                                                    Parameters:
                                                    dst - destination 8-byte buffer.
                                                    src - source 8-byte bufffer.