# SURF

* Per a altres significats, vegeu «surf (desambiguació)».
SURF (Speeded Up Robust Feature) és un algoritme de visió per computador, capaç d'obtenir una representació visual d'una imatge i extreure'n una informació detallada i específica del contingut. Aquesta informació és tractada per realitzar operacions com per exemple la localització i reconeixement de determinats objectes, persones o cares, realització d'escenes 3D, seguiment d'objectes o extracció de punts d'interès. Aquest algoritme forma part de l'anomedada intel·ligència artificial, capaç d'entrenar un sistema perquè interpreti imatges i en determini el contingut. L'Algoritme SURF és presentat per primera vegada per Herbert Bay a ECCV 9a conferència internacional de vició per computador celebrada a Àustria el Maig del 2006.

## Descripció

SURF és un detector i un descriptor d'alt rendiment dels punts d'interès d'una imatge, on es transforma la imatge en coordenades, utilitzant una tècnica anomenada multi-resolució. Consisteix a fer una rèplica de la imatge original de forma Piramidal Gaussiana o Piramidal Laplaciana, i obtenir imatges de la mateixa mida però amb l'amplada de banda reduïda. D'aquesta manera s'aconsegueix un efecte de borrossitat sobre la imatge original, anomenat Scale-Space. Aquesta tècnica assegura que els punts d'interès són invariants en l'escalat. L'algoritme SURF està basat en el predecessor SIFT.

## Etapes SURF
### Detecció

L'algoritme de SURF està basat en els mateixos principis i passos que el SIFT, però utilitza un esquema diferent i això hauria de proveir millors resultats: més rapidesa. Amb la finalitat de detectar punts característics en una escala de manera invariable SIFT utilitza filtres d'aproximació en cascada. On la Diferència de Gaussians, DOG, és calculada sobre imatges re escalades progressivament.

#### Imatge Integral

Semblant al SDoG.
En comptes d'utilitzar gaussianes per promitjar la imatge, s'utilitzen quadrats (aproximacions). Fer la convolució de la imatge amb un quadrat és molt més ràpid si s'utilitza la imatge integral.
La imatge integral es defineix com:
$I(x)=\sum _{i=0}^{i<=x}\sum _{j=0}^{j<=y}I(x,y)$

#### Punts d'interès en la matriu Hessiana

SURF utilitza un detector de BLOB basat en l'Hessià per trobar punts d'interès. El determinant de la matriu Hessiana expressa l'extensió de la resposta i és una expressió d'un canvi local al voltant de l'àrea.
El detector es basa en la matriu Hessiana, a causa del seu bon acompliment en la precisió. Més precisament, es detecten estructures Blob en llocs on el factor determinant és el màxim. En contrast amb el detector d'Hessià - Laplace per Mikolajczyk i Schmid, es basa en el determinant de l'Hessiana també per a la selecció d'escala, com es fa per Lindeberg. Donat un punt x = (x, i) en una imatge I, la matriu H Hessiana (x, σ) en x a escala σ es defineix de la següent manera:
$H(x,\sigma )={\begin{pmatrix}Lxx(x,\sigma )&Lxy(x,\sigma )\\Lxy(x,\sigma )&Lyy(x,\sigma )\end{pmatrix}}$
on $Lxx=(x,\sigma )$ és la convolució del segon ordre derivatiu $\partial x/\partial x^{2}g(\sigma )$ amb la imatge en el punt x, i de manera similar per$Lxy=(x,\sigma )$ i$Lyy=(x,\sigma )$.
Els Filtres Gaussians són òptims per a l'anàlisi de l'escala - espai, però a la pràctica han de ser discretitzats i retallats. Això condueix a una pèrdua en la repetibilitat en rotacions d'imatge al voltant dels múltiples imparells de π/4. Aquesta debilitat que val per als detectors basats en Hessià en general. La repetibilitat arriba a un màxim al voltant de múltiples de π/2. Això es deu a la forma quadrada del filtre .
Els box filters de 9x9 són aproximacions d'un Gaussià amb σ=1,2 i representa l'escala més baixa (resolució espacial més alta) per computeritzar els mapes de resposta Blob.
Es denota Dxx,Dyy,Dxy. Les ponderacions aplicades a les regions rectangulars són mantingudes per l'eficiència de la CPU.
Es calculen les imatges:
-Dxx(x,y) a partir d'I(x,y) i Gxx(x,y)
-Dxy(x,y) a partir d'I(x,y) i Gxy(x,y)
-Dyy(x,y) a partir d'I(x,y) i Gxyyx,y)
Després es genera la següent imatge:
$Det(Haprox)=DxxDyy-(wDxy)^{2}$
La ponderació relativa ($w$) de la resposta del filtre és utilitzat per balancejar l'expressió pel determinant Hessià. És necessari per a la conservació de l'energia entre els kernels Gaussians i els kernels Gaussians aproximats.
$w={\frac {|Lxy(1.2)|F|Dyy(9)|F}{|Lyy(1.2)|F|Dxy(9)|F}}$
El factor de 0,9 apareix com un factor de correcció en utilitzar quadrats en comptes de gaussians. Es poden generar diverses imatges det(H) per diverses mides de filtres. Això s'anomena anàlisi multi-resolució.
|x|F és la norma de Frobenius.
Els canvis de ponderació depenen de l'escala σ. A la pràctica, es manté aquest factor constant. Com es manté constant? Normalitzant la resposta del filtre respecte a la seva mida. Això garanteix la norma de Frobenius per qualsevol altre filtre.
L'aproximació del determinant de la matriu Hessiana representa la resposta de Blob en la imatge a la localització x. Aquestes respostes són emmagatzemades en el mapa de respostes de BLOB sobre diferents escales.
Seguidament es passa a buscar màxims locals.

#### Representació espai escala i localització dels punts d'interès

Els punts d'interès han de ser trobats en diferents escales, entre altres coses perquè la cerca de correspondències sovint requereix la seva comparació en les imatges on se'ls veu a diferents escales. Els espais escala s'apliquen en general com una piràmide d'imatge. Les imatges se suavitzen repetidament amb un filtre gaussià i després, se submostreja a fi d'aconseguir un nivell superior de la piràmide. Per tant, es calculen varios pisos o escales del “det H” amb diverses mides de les mascares:
$\sigma approx=Currentfiltersize*\left({\frac {\left(BaseFilterscale\right)}{BaseFilterSize}}\right)$
L'escala - espai es divideix en un nombre d'octaves, on una octava Es refereix a una sèrie de mapes de resposta de cobrir una duplicació de l'escala. En SURF el nivell més baix de l'escala d'espai s'obté a partir de la sortida dels filtres 9 × 9 .
Després es busquen els màxims 3D en (x,y,n) utilitzant el cub de veïnatge 3x3x3. A partir d'aquí es procedeix a fer la interpolació del màxim. Lowe resta aquestes capes de la piràmide per tal d'aconseguir que el DoG (Diferència de gaussianes) trobi en les imatges els contorns i les taques.
En concret, s'utilitza una variant ràpida introduïda per Neubeck i Van Gool. Els màxims del determinant de la matriu Hessiana s'interpolen en escala i espai de la imatge amb el mètode proposat per Brown i Lowe .

### Descripció

L'objectiu d'un descriptor és proporcionar una descripció única i robusta d'un conjunt. Descriu la distribució d'intensitat del contingut dins el punt d'interès dels punts veïns. És generat basant-se en l'àrea circumdant d'un punt d'interès, de manera que, realment, s'obté un vector descriptor per cada punt d'interès.
La dimensió del descriptor té un impacte directe amb el temps d'adquisició que es pren. De manera que, poques dimensions són indesitjables pel "matching" dels punts d'interès, tot i que proporciona menys distincions que una dimensió major.
Tot seguit es demostra tot el procediment que es du a terme per tal de realitzar el procés del descriptor.
El primer pas per a obtenir el descriptor un cop calculat l'escalat és el càlcul de l'orientació del punt d'interès. Per a obtenir un punt invariant a les rotacions, il·luminació i orientació s'utilitza el wavelet de Haar sobre les direccions de x i y en una regió circular de radi 6s, essent s l'escala del punt d'interès. Els punts d'interès de SURF tenen la característica principal de repetibilitat, que vol dir que si un punt és considerat fiable, el detector trobarà el mateix punt sota diferents punts de vista (escala, orientació, rotació, etc.).
Es té una posició (x,y) per cada punt d'interès.
Realitzades les respostes wavelet Haar amb un Gaussià centrat en el punt d'interès, les respostes són representades com a punts en l'espai, on la resposta horitzontal la tenim a l'abscissa i la resposta vertical en l'ordenada.
Un cop calculats per a tots els veïns, s'estima l'orientació dominant calculant la suma de tots els resultats dintre d'una finestra lliscant que cobreix un angle de $\pi /3$.
Se sumen la resposta horitzontal i vertical amb la finestra. El vector més llarg de les finestres és el que defineix l'orientació del punt d'interès. La mida d'aquesta finestra ha de prendre's en compte, ja que si és massa petita, tindrà un sol gradient dominant i si és massa gran, tendirà a donar mides de vector màxim que no representen la realitat correctament.
Ara, el càlcul del descriptor es realitza construint, primerament, una regió quadrada centrada en el punt d'interès i amb una mida de 20s.
La regió d'interès es divideix regularment en 4x4 subregions quadrades, i per a cada una d'elles es calculen unes característiques simples, el wavelet de Haar per a x i y i se suavitzen els resultats mitjançant un filtre Gaussià (per a oferir una major robustesa a deformacions, soroll i translacions), obtenint dx i dy. La mida d'aquest és de 2s, La verticalitat (si és horitzontal o vertical) es defineix ara respecte a l'orientació del punt d'interès.
Per a cada subregió se sumen els resultats $dx$ i $dy$, a més de calcular-se el seu valor absolut |dx| i |dy|. D'aquesta manera, cada subregió proporciona un vector $v$, que estarà compost per:
$v=(\sum _dx,\sum _dy,\sum _|dx|,\sum _|dy|)$
El qual és distinctiu i al mateix temps robust al soroll, errors i deformacions geomètriques o fotomètriques.
El descriptor del SURF s'obté mitjançant la unió dels vectors de les subregions.

### Matching

En aquest apartat es detalla el pas posterior a la cerca de punts característics que ens proporciona el detector. D'aquesta manera es pot comparar descriptors entre parells d'imatges i buscar correspondències entre elles. Hi ha dues maneres possibles per dur-ho a termer:
* Obtenir els punts característics de la imatge primera i el seu descriptor i fer el mateix amb la segona imatge. Així es podran comparar els descriptors de totes dues imatges i establir les correspondències entre punts amb algun tipus de mesura.
* Obtenir els punts característics de la primera imatge amb el descriptor. Posteriorment comparar aquest descriptor amb els punts de la segona imatge on es creu que està la seva parella corresponent.

## Desenvolupament d'un algorisme utilitzant el mètode SURF

1- INICI:
Inicialització de totess les variables globals i les funcions necessàries per executar el programa.
2- BUSCAR CÀMERA:
Si hi ha una càmera connectada, passa a l'etapa: Capturar seqüència i l'emmagatzema a l'equip. Si no és així, es començaria l'etapa de buscar, si és una rep d'una seqüència d'un vídeo emmagatzemat a l'equip.
3-BUSCAR VÍDEO:
Només hi entra si l'algoritme no ha trobat cap dispositiu de vídeo connectat a l'equip. Si es rep una ruta de seqüència de vídeo emmagatzemat, es passa a l'etapa de capturar seqüència. Si no es rep ruta, es tanca.
4-CAPTURA D'IMATGE:
Pot capturar la imatge a partir de càmera o de vídeo emmagatzemat. Extreu per cada iteració un quadre. Si no hi ha quadre (apuntador de la imatge és NULL), finalitza l'execució del programa.
5- HI HA IMATGE:
Es revisa etapa anterior, si l'apuntador no marca cap adreça de memòria, s'acaba l'execució. Si hi ha imatge, passa a l'etapa d'aplicar filtre per suavitzar la imatge. Poden utilitzar-se filtres gaussians (són els més nítids), de mitjana, etc.
6-MOSTRAR VÍDEO:
Mostra per pantalla per cada iteració del cicle, la imatge obtinguda en l'etapa de captura d'imatge.
7- PAUSA VÍDEO:
Es pot parar el vídeo, i l'última imatge obtinguda per l'etapa de captura és mostrada per pantalla en una finestra diferent de la qual passaria a la següent etapa.
8-SELECCIÓ ROI (Regió d'interès):
Amb la imatge a la finestra duplicada un cop feta la pausa, se selecciona l'àrea de la imatge o zona. La zona seleccionada, apareixerà en una altra finestra per tal de ser agafada com a imatge base en la qual es podrà analitzar la resta del vídeo. Aquesta nova imatge serà emmagatzemada temporalment i paral·lelament a l'algoritme.
9-SELECCIÓ DELS PUNTS DE LA MÀSCARA:
La màscara és una imatge que conté dos colors: Blanc i negre. Aquesta es pren com a imatge base per la cerca de punts d'interès en l'algoritme de SURF en passos posteriors.
10-CONVERSIÓ D'IMATGE A ESCALA DE GRISOS:
Es converteix la imatge a escala de grisos, pel fet que l'algoritme necessita la primera imatge seleccionada per l'usuari i agafant com a límit l'àrea en blanc de la selecció de punts de màscara.
11- EXTRACCIÓ DE PUNTS SURF:
Aquesta etapa extreu els punts d'interès. Descriptors d'imatge de la primera imatge seleccionada per l'usuari i agafant com a límit l'àrea en blanc de la selecció de punts de màscara.
12- EMMEGATZAMENT D'IMATGE DE BASE:
Guarda temporalment les imatges que s'agafaran per una futura comparació amb la resta de la seqüència de vídeo. Aquestes seran:
-Imatge obtinguda de la selecció la ROI en escala de grisos.
-Màscara de blanc i negre de l'etapa de selecció de punts de màscara.
13-COMPARACIÓ ENTRE PLANTILLES UTILITZANT SURF:
Les imatges anteriors, no es modifiquen i es comparen amb les altres de la seqüència de vídeo. En aquesta etapa es podrà identificar els descriptors d'imatge i els descriptors de la seqüència de vídeo, traçant una línia entre ells.
El canvi entre aquests descriptors, ens determinarà si l'objecte seleccionat es troba obstruït parcialment o si ha sigut remogut.
14- Comptador D'OBSTRUCCIÓ:
Aquesta etapa s'utilitza per si l'objecte ha estat obstruït parcialment o totalment per un breu període. Es tindran dos comptadors temporals:
-Comptador d'obstrucció: Comptador de temps o cicles que indica si l'objecte ha estat encavalcat o obstruït. Mentre l'objecte està encavalcat, el comptador va augmentant, quan arriba al màxim, s'activa el comptador fi de programa.
-Comptador de fi de programa: Apaga el programa o mostra advertència de si s'arriba a un cert temps o cicles on l'objecte encara no hi és. Després d'haver arribat al màxim en el comptador d'obstrucció. Si ha sigut una obstrucció temporal, els comptadors es reinicialitzen.
15- ADVERTÈNCIA OBJECTE OBSTRUÏT:
El vídeo es deté si es confirma si l'objecte s'ha perdut o ha sigut obstruït per un temps considerable. També indica el segon en què l'algoritme ho detecta. Despès mostra la imatge parada del vídeo i finalment, acaba el programa.
16- VALORS DELS DESCRIPTORS:
Tenint ja, els valors presos en l'etapa d'extracció de punts SURF, es crea una condició per determinar si l'objecte està present o no. Si s'agafen 4 descriptors, X < 4, sent X el nombre de descriptors analitzats en cada quadre. D'aquesta manera, es revisa si l'objecte hi és o no.
17- LOCALITZACIÓ OBJECTE. UBICACIÓ PUNTS FLANN.
Es troben les relacions entre els punts descriptors tant de la imatge com de la seqüència de vídeo i es traça una línia.
Localització objecte mitjançant homografia.
18- Avançar EL VIDEO EN Ta

## Surf vs Sift
### Presentació dels algoritmes

El reconeixement d'imatges o objectes, és una de les aplicacions més importants de la visió per computador, en el seguentapartat es fa una comparació dels descriptors locals SIFT (Scale Invariant Feature Transform) [David Lowe, 1999] i SURF (Speeded-UP Feature Transform) [Bay y Tuytelaars, 2006]. Aquests dos descriptors locals permeten detectar estructures o punts molt significatius d'una imatge per obtenir una descripció discriminativa d'aquestes zones a partir dels seus punts veïns, amb l'objectiu de comparar-les amb altres descriptors utilitzant mesures similars. A continuació es donen algunes característiques bàsiques d'aquests dos algoritmes:
SIFT (Scale Invariant Feature Transform)
Va ser publicat per David Lower el 1999 amb la idea de proposar un algoritme capaç d'extreure les característiques d'una imatge i a partir d'aquestes descriure el conjunt d'objectes que estaven continguts en ella. Aquest algoritme es pot desglosar en 4 etapes:
-Detecció dels extrems en l'escala: la primera etapa realitza una cerca en les diferents escales i dimensions de la imatge identificant possibles punts d'interés, invariants als canvis d'orientació i escalat. Aquest procediment es porta a terme amb la funció DoG (Difference-of-Gaussian) donant diferents valors a la σ, en la següent equació:
$D\left(x,y,\sigma \right)=L\left(x,y,k_{i}\sigma \right)-L\left(x,y,k_{j}\sigma \right),$
On la G és la funció Gaussiana i la I és la imatge. Ara les imatges Gaussianes es resten per poder produir el DoG, després d'això es submostreja la imatge Gaussiana per un factor 2 per obtenir una DoG pel mostratge de la imatge. Cada pixel es fixe amb els seus veïns amb una mascara 3x3 per trobar els maxims i minims locals de D (x, y, σ).
-Localització dels keypoints: els punts clau es trien basant-se en mesures d'estabilitat, s'eliminen els punts clau amb baix contrast o es troben localitzats als marges.
-Assignació de l'orientació: la invariancia respecte a la rotació s'aconsegueix mitjançant l'assignació a cada un dels punts de l'orientació basada en les propietats locals de la imatge i representant el descriptor respecte aquesta orientació.
-Descriptor de keypoints: Els gradients locals de la imatge es mesuren en la regió que rodeja el punt clau. Aquests són transformats mitjançant una representació que permet mesurar nivells de distorció i canvis en la il·luminació de forma local.
SURF (Speeded-UP Feature Transform)
Com ja hem vist en apartats anteriors, el SURF és un algoritme desenvolupat per Herbert Bay, Tinne Tuytelaars y Luc Van Gool (2008), treballa com un detector i descriptor de punts d'interès enfocat al reconeixement d'objectes. Aquest algoritme té 3 etapes:
-Detecció dels punts d'interes, keypoints.
-Assignació d'orientació.
-Extracció dels descriptors.
Més informació als apartats de característiques.

### Diferències Teoriques

Les diferències entre els algoritmes SIFT i SURF principals són la velocitat d'aplicació d'un respecte a l'altre però amb tots dos obtenim els punts d'interès de la imatge invariants, en escala i orientació, i els canvis en la il·luminació. Les principals diferències de dades en múltiples experiments són que el SIFT es guarda la posició, escala i l'orientació, ja que és possible que en una mateixa posició (x,y), ens trobem diversos punts d'interès a diferent escala i/o orientació σ. Però altre banda en el SURF, en una posició (x,y) només apareix un únic punt d'interès, per aquest motiu no es guarda l'escala i orientació, tanmateix sí que enregistra la matriu de segon ordre i signe del laplacià.

### Diferències experimentals
#### Experiment 1

A l'hora de fer comparacions s'ha de tenir en compte les versions dels algoritmes que s'utilitzen en cada cas, en aquest article s'extreuen conclusions envers la versió 4 del SIFT i la versió 1.0.9 del SURF amb codi C i analitzant imatges amb escala de grisos, També s'extreuen conclusions de resultats d'experiments amb robots i resposta dels algoritmes en plataformes Android.
El resultat de les proves amb 109 imatges, com ja anunciàvem abans, s'ha constatat que el mètode SURF és molt més ràpid que el SIFT. Des del punt de vista de punts invariants detectats, l'algoritme SIFT sobrepassa al SURF amb més del doble de punts detectats. Això és causat perquè el SURF permet que hi hagi diversos punts invariants en una mateixa posició amb diferent escala o orientació, mentre en el SIFT si que és possible. Aquest fet fa deduir que la distància entre el nombre de característiques detectades disminuiria si el SIFT no fes la duplicació de punts. En les gràfiques s'observa que el mètode Sift té uns 2.68 punts invariants més que el SURF respecte al temps, el SIFT utilitza uns 1646 ms per analitzar una imatge i el SURF 485 ms, és quasi una tercera part del temps, l'eficiència en aquest factor és considerable. Aquest factor és important de cara a l'objectiu de cada projecte, si es necessita un algoritme amb el qual es pugui obtenir una gran quantitat de dades seria més recomanable el SIFT, però si es necessita una resposta ràpida i no es dona tanta importància al nombre de característiques detectades l'algoritme SURF, és el mes adequat.
| SIFT | SURF |
Cal detallar que l'ordre de les imatges a l'hora de compar-les és molt important, ja que els resultats poden variar si s'escull una comparació amb X vs Y que si es fa amb Y vs X. El mètode SIFT mostra més punts quan les imatges que es comparen tenen més punts en comú, a diferència del SURF dona més valors quan les imatges están mes diferenciades, valors de fals positius. Això succeeix amb totes les fotogràfies i permet concloure que l'algoritme SIFT té més perdurabilitat en el temps que SURF, obtenint aparellaments mes fiables.
| 109 IMATGES | SIFT | SURF |
| Punts detectats | 1292 | 482 |
| Mitjana de temps | 1646.53 ms | 485.77 ms |
*Dades extretes d'una anàlisi feta per A. M. Romero i M. Cazorla, en el document "Comparativa de detectores de características visuales y su aplicacio ́n al SLAM "

#### Experiment 2

El següent estudi és un experiment de rendiment, consum i eficàcia dels algoritmes, en els quals s'han realitzat 100 logotips preparats i s'ha executat 10 cops cada prova de funcionalitat, amb l'objectiu de veure si els algoritmes modifiquen el seu comportament segons l'estat del dispositiu mòbil.
Les components de l'escenari de proves eren les següents:
Base de dades: allotja una tupla composta per un vector de característiques i un altre de punts d'interès.
Component d'entrenament: permet guardar la base de dades i els punts d'interès generats pels algoritmes.
Component de prova: permet obtenir el vector de característiques i els punts d'interès generats per cada descriptor (SIFT, SURF) a partir d'una imatge d'entrada.
Component de cerca (matching): permet obtenir un conjunt de correspondències entre la tupla obtinguda i les tuples de la base de dades.
| | SIFT | SURF |
| Mitjana de punts d'interès | 222 | 431 |
| Temps d'execució | 2887.13 ms | 959.87 ms |
| Consum de bateria | 0,04% | 0,02% |
| Memòria utilitzada | 102.30 KB | 385.02 KB |
| Eficàcia | 0.33 | 0.40 |
En la taula anterior, els resultats obtinguts pel que fa als punts d'interès s'observa la diferència de la mitjana de punts detectats pel mètode SIFT molt inferior al SURF, això és causat per la diferència de les imatges comparades. Respecte al temps d'execució el SIFT és molt més lent que el SUFT, la qual cosa indica que per aplicacions en temps reals aquest algoritme s'hauria de descartar. En el consum de bateria els resultats son proporcionals al temps d'execució, així doncs el SIFT consumeix el doble que el mètode SUFT.
Pel que fa a la memòria utilitzada el mètode SUFT supera àmpliament els recursos necessaris per emmagatzemar els vectors de característiques de les imatges, quasi quadruplicant el mètode SIFT. En temes d'eficàcia el mètode SIFT també és menys eficaç que el SUFT, però lleugerament més baix.

## Implementació SURF OpenCV
### Llenguatge i entorn C++

C++ es escollit per les següents raons:
Velocitat: Processament d'imatges a baix nivell baix nivell es necessita ser ràpid i C++ ho facilita.
Usabilitat: És molt típic utilitzar C++ en el processament digital d'imatge. Però també és útil C o codi Matlab.
Portabilitat: C++ és portable a múltiples plataformes, d'aquesta manera es pot moure per diferents plataformes i complidadors.
Llibreries per al processament d'imatge : OpenCv es una llibreria de funcións en C++ que permeten llegar imatges, videos i video en directe de la webcam o altres dispositius. Suportat per windows i linux.
Un possible entorn és visual basic C++ juntament amb VC++, un potent IDE, que permet crear codi fàcilment així com organitzar els projectes. OpenCV s'integra molt bé amb el compilador. Visual C++ i OpenCV són gratuits cosa que permetrà a la llibreria ser distribuïda sense restriccions de llicència.

### Disseny de l'arquitectura
#### Imatge Integral

Descripció : El mòdul crea i manipula les Imatges Integrals
Entrades: Una Imatge
Processos : Crea la representació de la imatge integral de la imatge d'entrada subministrada. Calcula la suma de píxels sobre àrees rectangulars .
Sortides : La representació de la imatge integral .

#### Fast Hessian

Descripció: Troba la Hessiana basada en els punts d'interès / regions en una imatge integral.
Entrades: Una representació de la imatge integral d'una imatge.
Processos: Construeix determinant del Mapa de respostes hessià. Realitza una supressió no màxima per localitzar punts d'interès en un espai Escala. Interpola, detecta punts a precisió sub - píxel.
Sortides: Un vector de punts d'interès localitzats amb precisió.

#### SURF Descriptor

Descripció: Extreu components descriptor per a un conjunt donat de punts d'interès detectats.
Entrades: Una representació de la imatge integral d'una imatge, vector de punts d'interès.
Processos: Calcula les respostes wavelet Haar. Calcula l'orientació dominant d'un punt d'interès. Extreu 64 - dimensional vector descriptor basat en sumes de respostes wavelet.
Sortides: Un vector de descriptors SURF, punts d'interès.

#### Punts d'interès

Descripció: Emmagatzema les dades associades a cada punt d'interès individual.
Entrades: Dades específiques d'interès.
Processos: mètodes d'accés / mutador per a dades.
Sortides: Cap

#### Serveis

Descripció: Mòdul que conté totes les funcions específiques no SURF.

## Altres implementacions

| Nom | Llenguatge | Open Source | Descripció |
| Original | C++ | No | Implementació original. |
| OpenSURF Arxivat 2010-07-25 a Wayback Machine. | C++, C# | Si | Implementació amb la documentació detallada y document de referencia. |
| OpenSurfCL | C++ | Si | Implementació lliure d'OpenSURF en OpenCL. Contenidors per C # i Java. |
| OpenCV SURF Arxivat 2011-07-20 a Wayback Machine. | C++ | Si | Implementació de l'extracció de característiques del SURF (2,0 OpenCV). |
| SURFmex Arxivat 2011-08-09 a Wayback Machine. | Matlab | | Matlab Interface (MEX) a codi OpenCV's SURF. |
| OpenSURF Matlab | Matlab | Si | Interfície OpenSURF per a Matlab |
| libmv SURF | C++ | Si | Implementació d'extracció i compraració. |
| Python mahotas | Python | | Pac de visió per ordinador que inclou una implementació en SURF. |
| Dlib C++ Library | C++ | Si | Implementació d'extracció de característiques del SURF. |
| Pan-o-matic | C++ | Si | Software que inclou una implementació de l'algorisme SURF. |
| Parallel SURF | C++ | Si | Implementació Multi-threaded basada en Pan-o-matic. |
| ProcessorSURF Arxivat 2011-08-12 a Wayback Machine. | C# | Si | C# SURF plugin per Multi-Agent Serving System. |
| JavaSurf | Java | Si | Implementació Java per SURF |
| JOpenSURF | Java | Si | Traducció Java d'OpenSURF |
| ImageJ SURF | Java | Si | Implementació SURF com ImageJ plugin amb GUI amb una interfície gràfica d'usuari convenient i producció d'estadístiques. |
| BoofCV | Java | Si | Llibreria Java de visió per ordinador Java que inclou SURF. |
| Speeded Up SURF | | Si | GPU Implementació GPU |
| CUDA SURF | C++ CUDA | Si | GPU Implementació GPU utilitzant CUDA |
| Mathematica | Mathematica | No | Implementació matemàtica. |
| GPU SURF Arxivat 2011-02-25 a Wayback Machine. | | No | GPU Implementació GPU. |
| FPGA SURF Arxivat 2011-10-01 a Wayback Machine. | | Si | FPGA Implementació FPGA. |
| clsurf | C++ | | Alt rendiment de plataforma creuda OpenCL implementat amb SURF en comparació dels veïns més propers. |

## Estudis i implementacions

* A. M. Romero and M. Cazorla, "Comparativa de detectores de característicasvisuales y su aplicación al SLAM ", X Workshop de agentes físicos, Setiembre 2009, Cáceres
* P. M. Panchal, S. R. Panchal, S. K. Shah, "A Comparison of SIFT and SURF Arxivat 2015-02-21 a Wayback Machine. ", International Journal of Innovative Research in Computer and Communication Engineering
Vol. 1, Issue 2, abril 2013
* David Gossow, Peter Decker i Dietrich Paulus, "An Evaluation of Open Source SURF Implementations", Lecture Notes in Computer Science, 2011, Volume 6556/2011, 169-179
** Libraries: dlib, OpenCV, and Pan-o-Matic
* Peter Abeles, A comparison of several C/C++ and Java implementations for speed and stability. Nov. 2011
** Libraries: OpenSURF, OpenCV, Pan-o-Matic, Original, BoofCV, JavaSURF, i JOpenSURF.

## Vegeu també

* SIFT
* Detector Viola Jones
* Reconeixement d'objectes
* Visió artificial

## Referències

* Herbert Bay, Tinne Tuytelaars, and Luc Van Gool, "Speeded Up Robust Features", ETH Zuric, Katholieke Universiteit Leuven
* Andrea Maricela Plaza Cordero,Jorge Luis Zambrano Martínez, " Estudio y Selección de las Técnicas SIFT, SURF y ASIFT de Reconocimiento de Imágenes para el Diseño de un Prototipo en Dispositivos Móviles", 15º Concurso de Trabajos Estudiantiles, EST 2012
* A. M. Romero and M. Cazorla, "Comparativa de detectores de característicasvisuales y su aplicación al SLAM ", X Workshop de agentes físicos, Setiembre 2009, Cáceres
* P. M. Panchal, S. R. Panchal, S. K. Shah, "A Comparison of SIFT and SURF Arxivat 2015-02-21 a Wayback Machine. ", International Journal of Innovative Research in Computer and Communication Engineering Vol. 1, Issue 2, abril 2013
* Herbert Bay, Andreas Ess, Tinne Tuytelaars, Luc Van Gool "SURF: Speeded Up Robust Features", Computer Vision and Image Understanding (CVIU), Vol. 110, No. 3, pp. 346–359, 2008
* Christopher Evans "Notes on the OpenSURF Library", MSc Computer Science, University of Bristol

## Enllaços externs

* SURF on Github
* Website of SURF: Speeded Up Robust Features (anglès)
* First publication of Speeded Up Robust Features (2006) (anglès)
* Revised publication of SURF (2008) Arxivat 2013-10-06 a Wayback Machine. (anglès)