Operador Sobel

De Viquipèdia
Dreceres ràpides: navegació, cerca

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 quin tant 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 dóna nocions d'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) per a cada punt és un vector bidimensional els components estan donats per les primeres derivades de les direccions verticals i horitzontals. Per a cada punt de la imatge, el gradient del vector apunta en 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 sentit dels punts més foscos cap als més clars.

Formulació[modifica | modifica el codi]

Matemàticament, l'operador utilitza dos nuclis de 3 × 3 elements per aplicar convolució a la imatge original per calcular aproximacions a les derivades, un nucli per als canvis horitzontals i un altre per 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 és calculat com:


\mathbf{G_x} = \begin{bmatrix} 
+1 & 0 & -1 \\
+2 & 0 & -2 \\
+1 & 0 & -1 
\end{bmatrix} * \mathbf{A}
\quad \mbox{and} \quad 
\mathbf{G_y} = \begin{bmatrix} 
+1 & +2 & +1 \\
0 & 0 & 0 \\
-1 & -2 & -1 
\end{bmatrix} * \mathbf{A}


En cada punt de la imatge, els resultats de les aproximacions dels gradients horitzontal i vertical poden ser combinats per 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:

 \mathbf{\Theta}= \operatorname{arctan} \left ({\mathbf{G_y}\over \mathbf{G_x}}\right)

on, per exemple,  \Theta és 0 per vores verticals amb punts més foscos al costat esquerre.

Formalment[modifica | modifica el codi]

Com que la funció d'intensitat d'una imatge digital només es coneix mitjançant punts discrets, les derivades d'aquestes funcions no poden ser definides llevat que assumim que hi ha una funció contínua que ha estat mostrejat en els punts de la imatge. Amb algunes suposicions addicionals, la derivada de la funció contínua d'intensitat pot ser calculada com una funció de la funció d'intensitat mostrejat, ie, de la imatge digital. De l'anterior resulta 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ò, aproximacions a aquestes funcions diferencials poden ser definides amb el nivell de precisió requerit tenint en compte únicament una petita regió de punts al voltant del estudiat.

L'operador Sobel representa una primera aproximació imprecisa del gradient de la imatge, però és de qualitat suficient per 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, a més que utilitza només nombres enters per als coeficients que indiquen l'aproximació del gradient.

Detalls tècnics[modifica | modifica el codi]

Com una consecencia de la seva definició, l'operador Sobel pot ser implementat mitjançant simples definicions tant en hardware com en software: només són utilitzats vuit punts de la imatge al voltant del punt a analitzar per calcular el punt corresponent de la imatge resultant, a més només es requereix aritmètica amb nombres enters per calcular una aproximació del vector gradient. A més, els dos filtres discrets descrits amunt poden ser separats:

\begin{bmatrix} 
+1 & 0 & -1 \\
+2 & 0 & -2 \\
+1 & 0 & -1 
\end{bmatrix} = \begin{bmatrix} 
1 \\
2 \\
1
\end{bmatrix} \times \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} \times \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} \times \begin{bmatrix} 
+1 & 0 & -1 
\end{bmatrix} * \mathbf{A}
\quad \mbox{y} \quad 
\mathbf{G_y} = \begin{bmatrix} 
+1 \\
0 \\
-1
\end{bmatrix} \times \begin{bmatrix} 
1 & 2 & 1 
\end{bmatrix} * \mathbf{A}

En certes implementacions, aquests càlculs separats donen bona avantatge ja que impliquen menys operacions aritmètiques per a cada punt.

Exemple[modifica | modifica el codi]

Ja que el resultat de l'operador Sobel és un mapeig de dues dimensions del gradient de cada punt, aquest pot ser processat i ser vist com una imatge, amb les àrees de gradient elevat (equivalents a vores) en negre i amb els altres com 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) donades 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 I amb l'operador Sobel.

Vegeu també[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]