========================== Speeded-Up Robust Features ========================== .. versionadded:: 0.6.1 SURF is only available starting in version 0.6.1, with an important bugfix in version 0.6.2. .. versionadded:: 0.8 In version 0.8, some of the inner functions are now in mahotas.features.surf instead of mahotas.surf Speeded-Up Robust Features (SURF) are a recent innnovation in the *local features* family. There are two steps to this algorithm: 1. Detection of interest points. 2. Description of interest points. The function ``mahotas.features.surf.surf`` combines the two steps:: import numpy as np from mahotas.features import surf f = ... # input image spoints = surf.surf(f) print "Nr points:", len(spoints) Given the results, we can perform a simple clustering using, for example, `milk `__ (we could have used any other system, of course; having written milk, I am most familiar with it):: try: import milk # spoints includes both the detection information (such as the position # and the scale) as well as the descriptor (i.e., what the area around # the point looks like). We only want to use the descriptor for # clustering. The descriptor starts at position 5: descrs = spoints[:,5:] # We use 5 colours just because if it was much larger, then the colours # would look too similar in the output. k = 5 values, _ = milk.kmeans(descrs, k) colors = np.array([(255-52*i,25+52*i,37**i % 101) for i in xrange(k)]) except: values = np.zeros(100) colors = [(255,0,0)] So we are assigning different colours to each of the possible The helper ``surf.show_surf`` draws coloured polygons around the interest points:: f2 = surf.show_surf(f, spoints[:100], values, colors) imshow(f2) show() Running the above on a photo of luispedro, the author of mahotas yields: .. plot:: ../../mahotas/demos/surf_luispedro.py :include-source: API Documentation ----------------- The ``mahotas.features.surf`` module contains separate functions for all the steps in the SURF pipeline. .. automodule:: mahotas.features.surf :members: :noindex: