Operator Sobel

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 26 august 2014; verificările necesită 14 modificări .

Operatorul Sobel este un operator diferenţial discret care calculează valoarea aproximativă a gradientului de luminozitate a imaginii . Rezultatul aplicării operatorului Sobel în fiecare punct al imaginii este fie vectorul gradientului de luminozitate în acel punct, fie norma sa . Folosit în domeniul prelucrării imaginilor , în special, este adesea folosit în algoritmii de detectare a marginilor .

Descriere

Operatorul Sobel se bazează pe convoluția unei imagini prin mici filtre întregi separabile în direcțiile verticale și orizontale, deci este relativ ușor de calculat. Pe de altă parte, aproximarea gradientului folosită de el este destul de aspră, mai ales pentru oscilațiile imaginii de înaltă frecvență.

Operatorul calculează gradientul de luminozitate al imaginii în fiecare punct. Așa se găsește direcția celei mai mari creșteri a luminozității și amploarea schimbării acesteia în această direcție. Rezultatul arată cât de „ascuțit” sau „lim” se modifică luminozitatea imaginii în fiecare punct și, prin urmare, probabilitatea de a găsi un punct pe margine, precum și orientarea marginii. În practică, calcularea mărimii schimbării luminozității (probabilitatea de a aparține unei fețe) este mai fiabilă și mai ușor de interpretat decât calcularea direcției.

Matematic, gradientul funcției a două variabile pentru fiecare punct al imaginii (care este funcția de luminozitate) este un vector bidimensional ale cărui componente sunt derivatele orizontale și verticale ale luminozității imaginii. În fiecare punct al imaginii, vectorul gradient este orientat în direcția celei mai mari creșteri a luminozității, iar lungimea sa corespunde cantității de modificare a luminozității. Aceasta înseamnă că rezultatul operatorului Sobel într-un punct situat într-o regiune de luminozitate constantă va fi un vector zero , iar într-un punct situat la granița unor regiuni de luminozitate diferită, un vector care traversează granița în direcția creșterii luminozității .

Formalizare

Strict vorbind, operatorul folosește nuclee cu care imaginea originală este convoluată pentru a calcula valorile aproximative ale derivatelor orizontale și verticale. Fie imaginea originală și și  două imagini pe care fiecare punct conține derivate aproximative față de și față de . Ele se calculează după cum urmează:

unde denotă o operație de convoluție bidimensională.

Coordonata aici crește „la dreapta” și  - „jos”. În fiecare punct al imaginii, valoarea aproximativă a valorii gradientului poate fi calculată utilizând valorile aproximative obținute ale derivatelor:

(însemnând element cu element).

Folosind aceste informații, putem calcula și direcția gradientului:

,

unde, de exemplu, unghiul Θ este zero pentru o margine verticală care are o latură întunecată în stânga.

Rafinament

Deoarece funcția de luminozitate este cunoscută numai în puncte discrete, nu putem determina derivatele până când nu setăm luminozitatea să fie o funcție diferențiabilă care trece prin aceste puncte. Cu această premisă suplimentară, derivata funcției de luminozitate diferențiabilă poate fi calculată din funcția din care sunt luate măsurătorile - punctele imaginii. Se pare că derivatele din orice punct sunt funcții de luminozitate din toate punctele din imagine. Cu toate acestea, aproximările derivatelor lor pot fi determinate cu un grad mai mare sau mai mic de precizie.

Operatorul Sobel este o aproximare mai imprecisă a gradientului de imagine, dar este de o calitate suficientă pentru aplicații practice în multe probleme. Mai precis, operatorul folosește doar valorile de intensitate din vecinătatea fiecărui pixel pentru a obține o aproximare a gradientului de imagine corespunzător și folosește numai valori întregi ale greutății de luminanță pentru a estima gradientul.

Extindere la un alt număr de dimensiuni

Operatorul Sobel constă din două operații separate [1] :

Formule de filtru Sobel pentru derivate de imagine în diferite spații pentru :

Iată un exemplu de nucleu Sobel tridimensional pentru axă :

.

Detalii tehnice

După cum rezultă din definiție, operatorul Sobel poate fi implementat cu instrumente tehnice și software simple: pentru a aproxima vectorul gradient, sunt necesari doar opt pixeli în jurul punctului imaginii și aritmetica întregului. Mai mult, ambele filtre discrete descrise mai sus pot fi separate:

și două derivate, și , pot fi acum calculate ca

Separarea acestor calcule poate duce la o reducere a operațiilor aritmetice cu fiecare pixel.

Aplicarea unei convoluții unui grup de pixeli poate fi reprezentată prin pseudocod :

N(x, y) = Suma { K(i, j).P(xi, yj)}, pentru i, j de la −1 la 1.

N(x, y) este rezultatul aplicării matricei de convoluție K la P.

Implementarea software a operatorului Sobel poate folosi în mod eficient extensiile SIMD ale setului de instrucțiuni ale procesoarelor moderne (așa-numita vectorizare a codului), în timp ce câștigul în viteza de calculare a operatorului poate fi de până la cinci ori în comparație cu un nivel ridicat. implementare la nivel [2] . Codarea manuală în limbajul de asamblare vă permite să depășiți în viteză compilatoarele precum Microsoft Visual C++ și Intel C++ Compiler .

Calculul operatorului Sobel este pur și simplu paralelizat într-un număr arbitrar de fire (în limită, fiecare punct al imaginii rezultate poate fi calculat independent de vecinii săi). De exemplu, dacă există două procesoare ( nuclee ), jumătatea superioară a imaginii poate fi procesată de unul dintre ele, iar cel de jos de celălalt.

Exemple

Rezultatul aplicării operatorului Sobel este o hartă de gradient bidimensională pentru fiecare punct. Poate fi procesat și afișat ca o imagine, în care zonele cu o valoare mare a gradientului (mai ales margini) vor fi vizibile ca linii albe. Imaginile de mai jos ilustrează acest lucru cu o imagine simplă ca exemplu:

Operatorul Scharr

Operatorul Sobel atenuează efectele false asupra imaginii cauzate de un operator diferenţial pur central , dar nu are simetrie de rotaţie completă . Scharr a investigat îmbunătățirea acestei proprietăți și a ajuns la concluzia că următorul nucleu dă cele mai bune rezultate [3] [4] :

Vezi și

Note

  1. K. Engel (2006), Real-time volume graphics, , p. 112-114 
  2. Vatutin E.I., Miroshnichenko S.Yu., Titov V.S. Optimizarea software a operatorului Sobel folosind extensii SIMD ale procesoarelor din familia x86 . Telecomunicatii. 2006. Nr 6. S. 12-16. (2006). Preluat la 9 martie 2010. Arhivat din original la 13 aprilie 2012.
  3. Scharr, Hanno, 2000, disertație (în Germania), Optimal Operators in Digital Image Processing .
  4. B. Jähne, H. Scharr și S. Körkel. Principii de proiectare a filtrelor. În Handbook of Computer Vision and Applications. Presa Academică, 1999.

Literatură

Link -uri