SURF

De Viquipèdia
Dreceres ràpides: navegació, cerca
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ó de de escenes 3D, seguiment d’objectes o extracció de punts d’interès. Aquest algoritme forma part de l’anomedada intel·ligència artificial, capaç de entrenar un sistema per què interpreti imatges i en determini el contingut. L’Algoritme SURF és presentat per primera vegada per Herbert Bay a ECCV 9ª conferència internacional de vició per computador celebrada a Àustria el Maig del 2006.

Descripció[modifica | modifica el codi]

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 esta basat en el predecessor SIFT.

Etapes SURF[modifica | modifica el codi]

Detecció[modifica | modifica el codi]

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[modifica | modifica el codi]

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)

 La suma de la imatge original dins d’un rectangle D de la imatge es pot avaluar ràpidament utilitzant aquesta imatge integral. I(x,y) sumada sobre l’àrea seleccionada requereix 4 avaluacions de S(x,y) (A,B,C,D)

Punts d'interes en la matriu Hessiana[modifica | modifica el codi]

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 es 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 la 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 perLxy=(x,\sigma)	 iLyy=(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 .  No obstant això , els detectors encara funcionen bé, la discretització té un lleuger efecte en el rendiment . Com els filtres reals no son ideals , en tot cas, i donat l'èxit de Lowe amb les seves aproximacions logarítmiques , empenyen a l'aproximació de la matriu Hessiana encara més amb els filtres quadrats Aquests filtres de segon ordre Gaussians aproximats poden ser avaluats amb un cost computacional molt baix amb l’ús d'imatges integrals . Per tant , el temps de càlcul és independent de la mida del filtre.  Aquestes son algunes aproximacions: Gyy i Gxy (1) .

Approximation Filters Gxx & Gxy (1)



Els box filters de 9x9 son aproximacions d’un Gaussià amb σ=1.2 i representa l’escala mes baixa ( resolució espacial mes alta) per computaritzar 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 de I(x,y) i Gxx(x,y)

-Dxy(x,y) a partir de I(x,y) i Gxy(x,y)

-Dyy(x,y) a partir de I(x,y) i Gxyyx,y)

Després es genera la següent imatge:

Det(H aprox) = 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ó al utilitzar quadrats en comptes de gaussians. Es poden generar varies imatges det(H) per varies mides de filtres. Això s’anomena analisis multi-resolució.  

|x|F es 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 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[modifica | modifica el codi]

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 es suavitzen repetidament amb un filtre gaussià i després, es submostreja a fi d'aconseguir un nivell superior de la piràmide . Per tant, es calculen varios pisos o escales del “det H” amb varies mides de les mascares:

\sigma approx = Current filter size * \left( \frac{\left(Base Filter scale\right) }{Base Filter Size} \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ó[modifica | modifica el codi]

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.

Wavelet-Haar

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, éssent s é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 la ordenada.

Un cop calculats per a tots els veïns, s'estima la orientació dominant calculant la suma de tots els resultats dintre d'una finestra lliscant que cubreix un angle de \pi/3.

Es 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. El tamany 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 tamanys de vector màxim que no representen la realitat correctament.

Ara, el càlcul del descriptor es realitza construint, primerament, una regió cuadrada centrada en el punt d'interès i amb un tamany de 20s.

La regió d'interès es divideix regularment en 4x4 subregions cuadrades, i per a cada una d'elles es calculen unes característiques simples, el wavelet de Haar per a x i y i es suavitzen els resultats mitjançant un filtre Gaussià (per a oferir una major robustesa a deformacions, soroll i translacions), obtenint dx i dy. El tamany d'aquest és de 2s, La verticalitat (si és horitzontal o vertical) es defineix ara respecte l'orientació del punt d'interès.

Per a cada sub-regió es sumen els resultats dx i dy, a més de calcularse 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[modifica | modifica el codi]

En aquest apartat es detalla el pas posterior a la cerca de punts característiques 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 podràn comparar els descriptor de totes dues imatges i establir les correspondències entre punts amb algún 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[modifica | modifica el codi]

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 la etapa: Capturar seqüència i l'emmagatzema a l’equip. Si no és així, es començaría l'etapa de buscar, si es 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, és 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 direcció 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 a la qual passaria a la següent etapa.

8-SELECCIÓ ROI (Region of Interest):

Amb la imatge a la finestra duplicada un cop feta la pausa, es selecciona l’àrea de la imatge o zona. La zona seleccionada , apareixerà en una alra 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 MASCARA:

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 de la primera imatge seleccionada per l’usuari i agafant com a limit 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 limit l’area 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- CONTADOR D’OBSTRUCCIÓ:

Aquesta etapa s’utilitza per si l’objecte ha estat obstruït parcialment o totalment per un període curt de temps. És tindran dos contadors temporals:

-Contador d’obstrucció: Contador de temps o cicles que indica si l'objecte ha estat encavalcat o obstruït. Mentres l’objecte està encavalcat, el contador va augmentant, quan arriba al màxim , s’activa el contador fi de programa.

-Contador 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 contador d’obstrucció. Si ha sigut una obstrucció temporal, els contadors 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- ADELANTAR EL VIDEO EN Ta

Surf vs Sift[modifica | modifica el codi]

Presentació dels algoritmes[modifica | modifica el codi]

El reconeixament d’imatges o objectes, és una de les aplicacions mes 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]. Aquest 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 dónen algunes característiques bàsiques d'aquest 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 caracteristiques 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 posibles 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 es la funció Gaussiana i la I es 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 en base a mesures d’estabilitat, s’eliminen els punts clau amb baix contrast o es troben localitzats als marges.

-Assignació de l’orientació: la invariancia respecte 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 son transformats mitjançant una representació que permet mesurar nivells de distorció i canvis en la iluminació 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 reconeixament d’objectes. Aquest algoritme té 3 etapes:

-Detecció dels punts d’interes, keypoints.

-Asignació d’orientació.

-Extracció dels descriptors.

Mes informació als apartats de característiques.

Diferències Teoriques[modifica | modifica el codi]

Les diferències entre els algoritmes SIFT i SURF principals són la velocitat d’aplicació d’un respecte 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[modifica | modifica el codi]

Experiment 1[modifica | modifica el codi]

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 es 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 distancia entre el número 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 el 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 necesita 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 dóna tanta importància al número de característiques detectades l'algoritme SURF, es el mes adequat.


SIFT SURF
Mètode SURF Mètode SIFT

Cal detallar que l'ordre de les imatges a l'hora de compar-les es 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 diferencia del SURF dóna 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'un anàlisi fet 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[modifica | modifica el codi]

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
Promig punts d'interés 222 431
Temps d'execució 2887.13 ms 959.87 ms
Consum de bateria 0.04 % 0.02 %
Memoria utilitzada 102.30 KB 385.02 KB
Eficacia 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.

Respecte 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[modifica | modifica el codi]

Llenguatge i entorn C++[modifica | modifica el codi]

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++ es 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'intengra molt bé amb el compilador. Visual C++ i OpenCV són gratuits cosa que permetrà a la llibreria ser distribuida sense restriccions de llicencia.

Disseny de l'arquitectura[modifica | modifica el codi]

Imatge Integral[modifica | modifica el codi]

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[modifica | modifica el codi]

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[modifica | modifica el codi]

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[modifica | modifica el codi]

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[modifica | modifica el codi]

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

Altres implementacions[modifica | modifica el codi]

Nom Llenguatge Open
Source
Descripció
Original C++ No Implementació original.
OpenSURF 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 C++ Si Implementació de l'extracció de característiques del SURF (2,0 OpenCV).
SURFmex 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ó del algorisme SURF.
Parallel SURF C++ Si Implementació Multi-threaded basada en Pan-o-matic.
ProcessorSURF C# Si C# SURF plugin per Multi-Agent Serving System.
JavaSurf Java Si Implementació Java per SURF
JOpenSURF Java Si Traducció Java de 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 No GPU Implementació GPU.
FPGA SURF 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[modifica | modifica el codi]

Vol. 1, Issue 2, April 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é[modifica | modifica el codi]

Referències[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]