# Operador Sobel

L'operador Sobel és utilitzat en processament digital d'imatges, especialment en algorismes de detecció de vores. Tècnicament és un operador diferencial discret que calcula una aproximació al gradient de la funció d'intensitat d'una imatge digital. Per a cada punt de la imatge a processar, el resultat de l'operador Sobel és tant el vector gradient corresponent com la norma d'aquest vector.
L'operador Sobel aplicat sobre una imatge digital en escala de grisos calcula el gradient de la intensitat de brillantor de cada punt (píxel) donant la direcció del major increment possible (de negre a blanc), a més calcula la suma del canvi en aquesta direcció, és a dir, retorna un vector. El resultat mostra com d'abruptament o suaument canvia una imatge en cada punt analitzat, en quina probabilitat un punt determinat representa una vora a la imatge i també l'orientació a la qual tendeix aquesta vora. A la pràctica, el càlcul de la magnitud -que suggereix una vora- és més senzilla que la interpretació de la direcció.
Matemàticament, el gradient d'una funció de dues variables (per a aquest cas la funció d'intensitat de la imatge) en cada punt és un vector bidimensional els components del qual estan donats per les primeres derivades de les direccions vertical i horitzontal. Per a cada punt de la imatge, el gradient del vector apunta en la direcció de l'increment màxim possible d'intensitat, i la magnitud del gradient del vector correspon a la quantitat de canvi d'intensitat en aquesta direcció. Això implica que el resultat d'aplicar l'operador Sobel sobre la regió d'una imatge amb intensitat de brillantor constant és un vector zero, i el resultat d'aplicar-lo en un punt sobre una vora és un vector que apunta creuant la vora (perpendicular) en el sentit dels punts més foscos cap als més clars.

## Formulació

Matemàticament, l'operador utilitza dos nuclis de 3 × 3 elements per a aplicar convolució a la imatge original i calcular aproximacions a les derivades, un nucli per als canvis horitzontals i un altre per a les verticals. Si definim $\mathbf {A}$ com la imatge original i $\mathbf {G_{x}}$ i $\mathbf {G_{y}}$ són els dos nuclis que representen per a cada punt les aproximacions horitzontal i vertical de les derivades d'intensitat, el resultat es calcula així:
    $\mathbf {G_{x}} ={\begin{bmatrix}+1&0&-1\\+2&0&-2\\+1&0&-1\end{bmatrix}}*\mathbf {A} \quad {\mbox{i}}\quad \mathbf {G_{y}} ={\begin{bmatrix}+1&+2&+1\\0&0&0\\-1&-2&-1\end{bmatrix}}*\mathbf {A}$
A cada punt de la imatge, els resultats de les aproximacions dels gradients horitzontal i vertical poden ser combinats per a obtenir la magnitud del gradient, mitjançant:
    $\mathbf {G} ={\sqrt {\mathbf {G_{x}} ^{2}+\mathbf {G_{y}} ^{2}}}$
Amb aquesta informació podem calcular també la direcció del gradient:
    $\Theta =\operatorname {atan2} \left(\mathbf {G_{y}} ,\mathbf {G_{x}} \right)$    (v. $\operatorname {atan2}$)
on, per exemple, $\Theta$ és 0 per vores verticals amb punts més foscos al costat esquerre.

## Formalment

Com que la funció d'intensitat d'una imatge digital només es coneix mitjançant punts discrets, les derivades d'aquestes funcions no estan definides, llevat que assumim que hi ha una funció contínua que ha estat mostrejada en els punts de la imatge. Amb algunes suposicions addicionals, la derivada de la funció contínua d'intensitat és pot calcular com una funció de la funció d'intensitat mostrejada, és a dir, de la imatge digital. D'això es dedueix que les derivades en qualsevol punt particular són funcions dels valors d'intensitat, virtualment, en tots els punts de la imatge. No obstant això, és poden definir aproximacions a aquestes funcions diferencials amb el nivell de precisió requerit tenint en compte únicament una petita regió de punts al voltant del punt analitzat.
L'operador Sobel representa una primera aproximació imprecisa al gradient de la imatge, però és de qualitat suficient per a ser d'ús pràctic en moltes aplicacions. Més precisament, aquest operador utilitza només valors d'intensitat en una regió de 3x3 al voltant de cada punt analitzat per calcular el gradient corresponent i, a més, utilitza tan sols nombres enters per als coeficients que indiquen l'aproximació del gradient.

## Detalls tècnics

Com una conseqüència de la seva definició, l'operador Sobel pot ser implementat mitjançant simples definicions tant en hardware com en software: per a calcular el punt corresponent de la imatge resultant només s'utilitzen vuit punts al voltant del punt a analitzar. A més només cal aritmètica entera per a calcular una aproximació del vector gradient. I encara: els dos filtres discrets descrits més amunt poden ser separats:
    ${\begin{bmatrix}+1&0&-1\\+2&0&-2\\+1&0&-1\end{bmatrix}}={\begin{bmatrix}1\\2\\1\end{bmatrix}}\cdot {\begin{bmatrix}+1&0&-1\end{bmatrix}}\quad \quad {\begin{bmatrix}+1&+2&+1\\0&0&0\\-1&-2&-1\end{bmatrix}}={\begin{bmatrix}+1\\0\\-1\end{bmatrix}}\cdot {\begin{bmatrix}1&2&1\end{bmatrix}}$
i les dues derivades $\mathbf {G_{x}}$ i $\mathbf {G_{y}}$ poden ser calculades amb:
    $\mathbf {G_{x}} ={\begin{bmatrix}1\\2\\1\end{bmatrix}}\cdot {\begin{bmatrix}+1&0&-1\end{bmatrix}}*\mathbf {A} \quad {\mbox{i}}\quad \mathbf {G_{y}} ={\begin{bmatrix}+1\\0\\-1\end{bmatrix}}\cdot {\begin{bmatrix}1&2&1\end{bmatrix}}*\mathbf {A}$
En algunes implementacions aquests càlculs separats resulten avantatjosos, ja que impliquen menys operacions aritmètiques per a cada punt.

## Exemple

Com que el resultat de l'operador Sobel és un mapeig en dues dimensions del gradient de cada punt, pot ser processat i considerat com una imatge, amb les àrees de gradient elevat (equivalents a vores) en negre i amb les altres en blanc (el fons de la imatge generada). Les següents imatges il·lustren això: es mostra el càlcul de l'operador Sobel sobre una imatge. Observeu les diferències de gradient (zones negres) obtingudes en aplicar únicament un gradient.
| Imatge original en escala de grisos. | Imatge resultant del gradient calculat per l'operador Sobel sobre la imatge original. |
| Càlcul del gradient X amb l'operador Sobel. | Càlcul del gradient Y amb l'operador Sobel. |

## Vegeu també

* Visió artificial
* Algorisme de Floyd-Steinberg
* Tramat (informàtica)
* Transformada de Hough

## Enllaços externs

* http://www.ayc.unavarra.es/miguel.pagola/P_Bordes.html Arxivat 2006-07-03 a Wayback Machine.