Articles

Introduktion til SIFT( Skala Invariant Funktion Transform)

Deepanshu Tyagi

Følg

Mar 16, 2019 · 7 min læse

SIFT står for Skala-Invariant Har Omdanne og blev præsenteret første gang i 2004, af D. Lowe, University of British Columbia. Sigt er invariance til billedskala og rotation. Denne algoritme er patenteret, så denne algoritme er inkluderet i det ikke-frie modul i OpenCV.

store fordele ved sift er

  • lokalitet: funktioner er lokale, så robuste over for okklusion og rod (ingen forudgående segmentering)
  • særpræg: individuelle funktioner kan matches med en stor database med objekter
  • Antal: mange funktioner kan genereres til selv små objekter
  • effektivitet: tæt på realtidsydelse
  • udvidelsesmuligheder: kan let udvides til en lang række forskellige funktionstyper, hvor hver tilføjer robusthed

Dette er en del af en 7-serie Funktionsdetektering og matchning. Andre artikler inkluderet

  • Introduktion til Funktionsdetektion og matchning
  • Introduktion til Harris Corner Detector
  • Introduktion til SURF (fremskyndede robuste funktioner)
  • Introduktion til hurtig (funktioner fra accelereret Segmenttest)
  • Introduktion til kort (binære robuste uafhængige elementære funktioner)
  • Introduktion til ORB (orienteret hurtigt og roteret kort)

sigt er en ganske involveret algoritme. Der er hovedsageligt fire trin involveret i SIFT-algoritmen. Vi vil se dem en efter en.

  • skala-space peak valg: Potentiel placering til at finde funktioner.
  • Keypoint lokalisering: præcis lokalisering af funktionen keypoints.
  • Orienteringsopgave: tildeling af orientering til tastaturpunkter.
  • Keypoint descriptor: beskriver tastepunkterne som en højdimensionel vektor.
  • Keypoint Matching

Scale-space peak Selection

virkelige verdensobjekter er kun meningsfulde i en bestemt skala. Du kan se en sukkerterning perfekt på et bord. Men hvis man ser på hele Mælkevejen, eksisterer den simpelthen ikke. Denne multi-skala karakter af objekter er ret almindelig i naturen. Og et skalarum forsøger at replikere dette koncept på digitale billeder.

sløring

inden for en oktav sløres billederne gradvist ved hjælp af den gaussiske Sløringsoperator. Matematisk betegnes “sløring”som den gaussiske operatørs og billedet. Gaussian blur har et bestemt udtryk eller” operator”, der anvendes på hvert punkt. Hvilke resultater er det slørede billede.

sløret billede

g er den gaussiske sløringsoperatør, og jeg er et billede. Y er lokaliseringskoordinaterne, mens “Skala” – parameteren er “skala” – parameteren. Tænk på det som mængden af sløring. Større værdi, større sløring.

Gaussian Blur operator

hund(forskel på gaussisk kerne)

nu bruger vi de slørede billeder til at generere et andet sæt billeder, forskellen mellem gaussere (hund). Disse hundebilleder er gode til at finde ud af interessante nøglepunkter i billedet. Forskellen på Gaussisk opnås som forskellen på Gaussisk sløring af et billede med to forskellige kr., lad det være kr. og kr. kr. Denne proces udføres for forskellige oktaver af billedet i den gaussiske pyramide. Det er repræsenteret i nedenstående billede:

find tastaturer

indtil nu har vi genereret et skalarum og brugt skalarummet til at beregne forskellen mellem gaussere. Disse bruges derefter til at beregne Laplacian af gaussiske tilnærmelser, der er skala invariant.

et billedpunkt i et billede sammenlignes med dets 8 naboer samt 9 billedpunkter i den næste skala og 9 billedpunkter i tidligere skalaer. På denne måde foretages i alt 26 kontroller. Hvis det er en lokal ekstrema, er det et potentielt tastatur. Det betyder dybest set, at keypoint er bedst repræsenteret i denne skala.

Keypoint lokalisering

Key0points genereret i det foregående trin producerer mange keypoints. Nogle af dem ligger langs en kant, eller de har ikke nok kontrast. I begge tilfælde er de ikke så nyttige som funktioner. Så vi slippe af med dem. Fremgangsmåden svarer til den, der anvendes i Harris Corner Detector til fjernelse af kantfunktioner. For funktioner med lav kontrast kontrollerer vi simpelthen deres intensiteter.

de brugte Taylor-serieudvidelse af skalarum for at få en mere nøjagtig placering af ekstrema, og hvis intensiteten ved denne ekstrema er mindre end en tærskelværdi (0,03 i henhold til papiret), afvises den. Hund har en højere respons for kanter, så kanter også skal fjernes. De brugte en 2H2 hessisk matrice (H) til at beregne hovedkrumningen.

orienteringsopgave

nu har vi legitime tastaturpunkter. De er blevet testet for at være stabile. Vi kender allerede den skala, hvor tastaturet blev registreret (det er det samme som skalaen på det slørede billede). Så vi har skala invariance. Den næste ting er at tildele en orientering til hvert tastatur for at gøre det rotation invariance.

et kvarter tages rundt om tastaturets placering afhængigt af skalaen, og gradientstørrelsen og retningen beregnes i den pågældende region. Et orienteringshistogram med 36 bakker, der dækker 360 grader, oprettes. Lad os sige, at gradientretningen på et bestemt tidspunkt (i “orienteringsopsamlingsregionen”) er 18.759 grader, så går den ind i 10-19 graders bin. Og det “beløb”, der tilføjes til skraldespanden, er proportional med størrelsen af gradienten på det tidspunkt. Når du har gjort dette for alle billedpunkter omkring tastepunktet, vil histogrammet have et højdepunkt på et tidspunkt.

den højeste top i histogrammet tages, og enhver top over 80% af det anses også for at beregne orienteringen. Det skaber keypoints med samme placering og skala, men forskellige retninger. Det bidrager til stabiliteten af matching.

Keypoint descriptor

på dette tidspunkt har hvert tastatur en placering, skala, orientering. Næste er at beregne en deskriptor for det lokale billedområde om hvert tastatur, der er meget karakteristisk og uforanderligt som muligt for variationer såsom ændringer i synspunkt og belysning.

for at gøre dette tages et 16h16 vindue omkring tastaturet. Det er opdelt i 16 underblokke af 4H4 størrelse.

For each sub-block, 8 bin orientation histogram is created.

So 4 X 4 descriptors over 16 X 16 sample array were used in practice. 4 X 4 X 8 directions give 128 bin values. It is represented as a feature vector to form keypoint descriptor. Denne funktionsvektor introducerer et par komplikationer. Vi er nødt til at slippe af med dem, før vi færdiggør fingeraftrykket.

  1. Rotationsafhængighed funktionsvektoren bruger gradientretninger. Det er klart, at hvis du roterer billedet, ændres alt. Alle gradientretninger ændres også. For at opnå rotationsuafhængighed trækkes tastaturets rotation fra hver retning. Således er hver gradientorientering i forhold til tastaturets orientering.
  2. Belysningsafhængighed hvis vi tærskelværdier, der er store, kan vi opnå belysningsuafhængighed. Så ethvert tal (af 128) større end 0,2 ændres til 0,2. Denne resulterende funktionsvektor normaliseres igen. Og nu har du en belysning uafhængig funktion vektor!

Keypoint Matching

Keypoints mellem to billeder matches ved at identificere deres nærmeste naboer. Men i nogle tilfælde kan den anden nærmeste kamp være meget tæt på den første. Det kan ske på grund af støj eller andre grunde. I så fald tages forholdet mellem nærmeste afstand til næst nærmeste afstand. Hvis det er større end 0,8, afvises de. Det eliminerer omkring 90% af falske kampe, mens kasserer kun 5% korrekte kampe, som pr papiret.

implementering

Jeg var i stand til at implementere sift ved hjælp af OpenCV(3.4). Sådan gjorde jeg det:

GitHub link til koden:https://github.com/deepanshut041/feature-detection/tree/master/sift

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *