Operátor Sobel

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 26. srpna 2014; kontroly vyžadují 14 úprav .

Sobelův operátor je diskrétní diferenciální operátor , který vypočítává přibližnou hodnotu gradientu jasu obrazu . Výsledkem použití Sobelova operátoru v každém bodě obrázku je buď vektor gradientu jasu v tomto bodě, nebo jeho norma . Používá se zejména v oblasti zpracování obrazu , často se používá v algoritmech detekce hran .

Popis

Sobelův operátor je založen na konvoluci obrazu pomocí malých oddělitelných celočíselných filtrů ve vertikálním a horizontálním směru, takže je poměrně snadné jej vypočítat. Na druhou stranu jím používaná aproximace gradientu je dost drsná, zejména pro vysokofrekvenční oscilace obrazu.

Operátor vypočítá gradient jasu obrazu v každém bodě. Takto se zjistí směr největšího nárůstu jasu a velikost jeho změny v tomto směru. Výsledek ukazuje, jak „ostře“ nebo „hladce“ se v každém bodě mění jas obrazu, a tedy pravděpodobnost nalezení bodu na hraně a také orientace hrany. V praxi je výpočet velikosti změny jasu (pravděpodobnost příslušnosti k obličeji) spolehlivější a snáze interpretovatelný než výpočet směru.

Matematicky je gradient funkce dvou proměnných pro každý bod obrazu (což je funkce jasu) dvourozměrný vektor , jehož složkami jsou horizontální a vertikální derivace jasu obrazu. V každém bodě obrázku je gradientní vektor orientován ve směru největšího nárůstu jasu a jeho délka odpovídá velikosti změny jasu. To znamená, že výsledkem Sobelova operátoru v bodě ležícím v oblasti konstantní jasnosti bude nulový vektor a v bodě ležícím na hranici oblastí různé jasnosti vektor překračující hranici ve směru rostoucí jasnosti. .

Formalizace

Přísně vzato, operátor používá jádra, se kterými je původní obrázek konvolvován, k výpočtu přibližných hodnot horizontálních a vertikálních derivací. Dovolit být původní obrázek a a  být dva obrázky, na kterých každý bod obsahuje přibližné derivace s ohledem na a s ohledem na . Vypočítávají se takto:

kde označuje dvourozměrnou konvoluční operaci.

Souřadnice se zde zvyšuje "doprava" a  - "dolů". V každém bodě obrázku lze vypočítat přibližnou hodnotu hodnoty gradientu pomocí získaných přibližných hodnot derivací:

(myšleno prvek po prvku).

Pomocí těchto informací můžeme také vypočítat směr gradientu:

,

kde například úhel Θ je nula pro vertikální hranici, která má temnou stranu vlevo.

Upřesnění

Protože funkce jasu je známá pouze v diskrétních bodech, nemůžeme určit derivace, dokud nenastavíme jas jako diferencovatelnou funkci , která prochází těmito body. S tímto dodatečným předpokladem lze derivaci funkce diferencovatelného jasu vypočítat z funkce, ze které jsou měření vzata - obrazových bodů. Ukazuje se, že derivace v libovolném jednotlivém bodě jsou funkcemi jasu ze všech bodů na obrázku. Aproximace jejich derivací však lze určit s větší či menší mírou přesnosti.

Sobelův operátor je nepřesnější aproximací gradientu obrazu, ale pro praktické aplikace v mnoha problémech je dostatečně kvalitní. Přesněji řečeno, operátor používá pouze hodnoty intenzity v blízkosti každého pixelu k získání aproximace odpovídajícího gradientu obrazu a k odhadu gradientu používá pouze celočíselné hodnoty hmotnosti jasu.

Rozšíření o další počet dimenzí

Sobelův operátor se skládá ze dvou samostatných operací [1] :

Vzorce Sobelova filtru pro derivace obrázků v různých prostorech pro :

Zde je příklad trojrozměrného Sobelova jádra pro osu :

.

Technické detaily

Jak vyplývá z definice, Sobelův operátor lze implementovat pomocí jednoduchých technických a softwarových nástrojů: k aproximaci vektoru gradientu je potřeba pouze osm pixelů kolem bodu obrazu a celočíselná aritmetika. Oba výše popsané diskrétní filtry lze navíc oddělit:

a dvě derivace a , lze nyní vypočítat jako

Oddělení těchto výpočtů může vést ke snížení aritmetických operací s každým pixelem.

Použití konvoluce na skupinu pixelů může být reprezentováno pseudokódem :

N(x, y) = Součet { K(i, j).P(xi, yj)}, pro i, j od -1 do 1.

N(x, y) je výsledkem aplikace konvoluční matice K na P.

Softwarová implementace operátoru Sobel dokáže efektivně využít SIMD rozšíření instrukční sady moderních procesorů (tzv. kódová vektorizace), přičemž zisk v rychlosti výpočtu operátoru může být až pětinásobný oproti vysoko- implementace úrovně [2] . Ruční kódování v jazyce symbolických instrukcí vám umožňuje překonat rychlost kompilátorů, jako je Microsoft Visual C++ a Intel C++ Compiler .

Výpočet Sobelova operátoru je jednoduše paralelizován do libovolného počtu vláken (v limitu lze každý bod výsledného obrázku vypočítat nezávisle na jeho sousedech). Pokud jsou například dva procesory ( jádra ), horní polovinu snímku může zpracovávat jeden z nich a dolní jeden druhý.

Příklady

Výsledkem použití Sobelova operátoru je dvourozměrná gradientová mapa pro každý bod. Lze jej zpracovat a zobrazit jako obrázek, na kterém budou oblasti s velkou hodnotou gradientu (většinou okraje) viditelné jako bílé čáry. Níže uvedené obrázky to ilustrují jednoduchým obrázkem jako příklad:

Operátor Scharr

Sobelův operátor vyhlazuje rušivé efekty na obraz způsobené čistě centrálním diferenciálním operátorem , ale nemá plnou rotační symetrii . Scharr zkoumal zlepšení této vlastnosti a dospěl k závěru, že nejlepší výsledky dává následující jádro [3] [4] :

Viz také

Poznámky

  1. K. Engel (2006), Real-time volume graphics, , str. 112-114 
  2. Vatutin E.I., Miroshnichenko S.Yu., Titov V.S. Softwarová optimalizace operátora Sobel pomocí SIMD rozšíření procesorů rodiny x86 . Telekomunikace. 2006. č. 6. S. 12-16. (2006). Získáno 9. března 2010. Archivováno z originálu dne 13. dubna 2012.
  3. Scharr, Hanno, 2000, disertační práce (v Německu), Optimální operátoři v digitálním zpracování obrazu .
  4. B. Jähne, H. Scharr a S. Körkel. Principy návrhu filtrů. In Příručka počítačového vidění a aplikací. Academic Press, 1999.

Literatura

Odkazy