Download Datasets & Code

Color SIFT

Published October 30th, 2008

color sift

See:
G. J. Burghouts and J. M. Geusebroek. Performance evaluation of local colour invariants. Comput. Vision Image Understanding, 113:48-62, 2009. download

The SIFT descriptor basically characterizes the local edge distribution around keypoints. Extension to color sounds straightforward: just consider color gradients, rather than intensity gradients, and put this into the Gaussian derivative framework. However, one can make many choices to define color gradients, the "physics based" approach being most promising. In my earlier work download pdf, I addressed the topic of color gradients. The SIFT implementation provided here is an adaptation of David Lowe's original code to include color keypoints and color description, according to the physics-based approach to color vision, all neatly put into the Gaussian scale-space paradigm.

In this color SIFT software, I have chosen to provide the few useful choices (among many alternatives), which can be selected by providing the option "-colordesc", to select an appropriate color descriptor. In any of the options, the descriptor will contain 3 vectors of 128 values, the first vector being exactly the original intensity based SIFT descriptor. The other two vectors are color based.

The default color SIFT descriptor is a chromatic descriptor "invC", being one of the color SIFT descriptors evaluated in the Burghouts and Geusebroek paper above download pdf. In this case, the first vector of 128 bytes in the descriptor carries all intensity related information, whereas the second and third vector contain the orthogonal chromatic information. Hence, intensity, shadow, and shading effects are present in the intensity vector, whereas the pure chromatic information is carried by the additional color vectors. This color descriptor is proven to work very effective under many circumstances, see the Burghouts and Geusebroek performance evaluation download pdf. See also our performance in the TRECVID 2008 video retrieval benchmark, and our winning position (UvA runs = color SIFT + various learning techniques) in the PASCAL-VOC 2008 object categorization benchmark. Among other issues download pdf, download pdf, the "InvC" color SIFT descriptor was an important asset to achieve these results. See the excellent evaluation in Koen van de Sande's PAMI paper download pdf.

Alternatively, one can choose for a normalized color descriptor "invW", a "raw" opponent color descriptor, and a computationally more intensive "hsv" descriptor.

Download Windows 32-bit executables and sample program
Download Linux (Intel 32-bit) executables and sample program
Download Linux (Intel 64-bit) executables and sample program
Download Mac (Intel 32-bit) executables and sample program

Below an adapted version of Krystian Mikolajczyk's "compute_descriptors" program (version 2006, see the Oxford vgg website) with the same color descriptors included. Due to implementation details, there may be slight differences between the output of this program with respect to the above code.

compute_descriptors Linux (Intel 32-bit) executable

For comparison with the results provided in the paper download pdf, you can download a text file containing the keypoints used in the experiments:

Download keypoint locations and affine parameters for ALOI.
(in Mikolajczyk's affine format)

Acknowledgements: Many thanks to David Lowe for kindly providing permission to redistribute the code adapted for color keypoints, and for the useful discussions on the topic. Many thanks to Krystian Mikolajczyk for providing permission to redistribute the "compute_descriptors" code adapted to include colour SIFT.

Amsterdam Library Of Textures

textures

See:
G. J. Burghouts and J. M. Geusebroek. Material-specific adaptation of color invariant features. Pattern Recognition Letters, vol. 30, 306-313, 2009. download pdf

The dataset can be found here.

Amsterdam Library of Object Images

Published January 28th, 2005

toys

See:
J. M. Geusebroek, G. J. Burghouts, and A. W. M. Smeulders. The Amsterdam library of object images. Int. J. Comput. Vision, 61(1):103-112, January 2005. download pdf

The dataset can be found at: http://www.science.uva.nl/~aloi.

Fast Anisotropic Gauss Filtering

Published January 28th, 2005

See:
J. M. Geusebroek, A. W. M. Smeulders, and J. van de Weijer. Fast anisotropic gauss filtering. IEEE Trans. Image Processing, 12(8):938-943, 2003. download pdf

Download the C source code.
Download the Matlab Mex source code and dll (MS Windows) and mexglx (Linux PC).

Weibull Fitting to Natural Image Statistics

Published October 3rd, 2007

See:
J. M. Geusebroek and A. W. M. Smeulders. A six-stimulus theory for stochastic texture. Int. J. Comput. Vision, 62(1/2):7-16, 2005. download pdf

Download the Matlab source code and examples [thanks to Victoria Yanulevskaya].

Color Invariant Texture Segmentation

Published September 28th, 2007

See:
M. A. Hoang, J. M. Geusebroek, and A. W. M. Smeulders. Color texture measurement and segmentation. Signal Processing, 85(2):265-275, 2005. download pdf

Download Windows and Linux (Intel) executables.

Color Invariance

Published January 28th, 2005

toys edges E edges C edges H

See:
J. M. Geusebroek, R. van den Boomgaard, A. W. M. Smeulders, and H. Geerts. Color invariance. IEEE Trans. Pattern Anal. Machine Intell., 23(12):1338-1350, 2001. download pdf

Download the matlab example.

The practical implementation involves these steps:

  • Convert RGB to e, el, and ell (l denotes derivatives to lambda):
    e = (0.06*R + 0.63*G + 0.27*B ) / 255.0
    el = (0.3*R + 0.04*G - 0.35*B ) / 255.0
    ell = (0.34*R - 0.6*G + 0.17*B ) / 255.0
  • Look up (or derive) the invariant expression; we consider for example Clw = sqrt(Clx^2+Cly^2)
    (see table 2 in the paper)
    where Clx = (Elx*E-El*Ex)/E^2 and Cly = (Ely*E-El*Ey)/E^2
    (table 2 and section 3.2, equation 13).
  • See what measurements are needed. We need E, El, Ex, Elx, Ey, Ely. Extract them from e, el, ell by Gaussian smoothing or differentiation:
    E = GaussianSmooth( e, sigma )
    El = GaussianSmooth( el, sigma )
    Ex = GaussianDerivative( e, sigma, xDirection )
    Ey = GaussianDerivative( e, sigma, yDirection )
    Elx = GaussianDerivative( el, sigma, xDirection )
    Ely = GaussianDerivative( el, sigma, yDirection )
    If no such function as GaussianDerivative is available in your image processing system, use GaussianSmooth and a Prewitt or Sobel edge detector.
  • Calculate the invariant expression per pixel:
    Clw = sqrt((Elx*E-El*Ex)^2 + (Ely*E-El*Ey)^2)/E^2
    by combining the results of the smoothing/differentiation step.
  • Repeat the steps for Cllw (take Ell everywhere for El), and find the shadow and shading invariant Cw = sqrt(Clw^2+Cllw^2) at the top of this page (third figure from left).