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 .
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. .
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.
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.
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 :
.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ý.
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:
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] :