Skip to content

SIFT features

Detect scale-space extrema and describe local gradient distributions around them.

Try it on your image ↓

VISUAL WALKTHROUGHFeatures
REFERENCE INPUTTexture and corners

Corners change intensity in more than one direction; a long straight edge is less distinctive.

RESULTA descriptor for one patch

The vector summarizes local gradient directions. Bars illustrate its structure, not the complete 128-value SIFT descriptor.

STEP 03 / 03

Accumulate local gradient histograms into a descriptor.

Illustrative example. The stages explain the method; they are not a live OpenCV execution.

Try it on an image

YOUR IMAGE · REAL OPENCV

Experiment at pixel level

Open full lab ↗

Detect and draw SIFT keypoints. Circle size reflects feature scale.

The engine loads on your first run. Your images stay in this browser.

Input448 × 320
OutputWaiting for a result

Scroll over either image to zoom at the pointer. Use the scrollbars to pan both views over the same relative area. Zoom is relative to the input; pixel coordinates belong to each image. Warps can change scene correspondence.

Pixel inspector RGBA · native values · matched scale · 9 × 9 output pixels
Hover to inspect. Click to pin a pixel.
Input
Select a pixel

Output
Select a pixel

Sample models and licenses

When to use it

Match textured scenes with substantial changes in scale or orientation.

How it works

  1. 01Find extrema across differences of Gaussian images.
  2. 02Reject unstable points and estimate scale and orientation.
  3. 03Accumulate local gradient histograms into a descriptor.

scale-space extrema → orientation → gradient histogram

What to tune

contrastThreshold rejects weak extrema; edgeThreshold rejects edge-like points; nfeatures caps output. Match floating descriptors with L2.

Where it breaks down

Descriptors are larger and slower than compact binary features. Low texture, motion blur and repeated patterns reduce reliable matches.

TypeScript API

Open an entry for its exact overloads, parameter descriptions, result ownership and pinned upstream source.

All of these calls execute on the CPU. Native objects need explicit disposal. See matrices and ownership and build compatibility.