El operador Sobel , a veces llamado operador Sobel–Feldman o filtro Sobel , se utiliza en el procesamiento de imágenes y la visión artificial , particularmente en algoritmos de detección de bordes donde crea una imagen que enfatiza los bordes. Recibe su nombre en honor a Irwin Sobel y Gary M. Feldman, colegas del Laboratorio de Inteligencia Artificial de Stanford (SAIL). Sobel y Feldman presentaron la idea de un « operador de gradiente de imagen isotrópico 3 × 3» en una charla en SAIL en 1968. [1] Técnicamente, es un operador de diferenciación discreto , que calcula una aproximación del gradiente de la función de intensidad de la imagen. En cada punto de la imagen, el resultado del operador Sobel–Feldman es el vector de gradiente correspondiente o la norma de este vector. El operador Sobel–Feldman se basa en la convolución de la imagen con un filtro pequeño, separable y de valor entero en las direcciones horizontal y vertical y, por lo tanto, es relativamente económico en términos de cálculos. Por otra parte, la aproximación de gradiente que produce es relativamente burda, en particular para variaciones de alta frecuencia en la imagen.
El operador utiliza dos núcleos 3×3 que se convolucionan con la imagen original para calcular aproximaciones de las derivadas : una para los cambios horizontales y otra para los verticales. Si definimos A como la imagen de origen y G x y G y son dos imágenes que en cada punto contienen las aproximaciones de las derivadas horizontal y vertical respectivamente, los cálculos son los siguientes: [1]
donde aquí denota la operación de convolución de procesamiento de señal bidimensional .
En su texto que describe el origen del operador, [1] Sobel muestra diferentes signos para estos núcleos. Definió los operadores como máscaras de vecindad (es decir, núcleos de correlación) y, por lo tanto, son un reflejo de lo que se describe aquí como núcleos de convolución. También asumió que el eje vertical aumenta hacia arriba en lugar de hacia abajo, como es común en el procesamiento de imágenes en la actualidad, y, por lo tanto, el núcleo vertical está invertido.
Dado que los núcleos de Sobel se pueden descomponer como productos de un núcleo de promediación y un núcleo de diferenciación, calculan el gradiente con suavizado. Por ejemplo, y se puede escribir como
La coordenada x se define aquí como creciente en la dirección "derecha", y la coordenada y se define como creciente en la dirección "abajo". En cada punto de la imagen, las aproximaciones de gradiente resultantes se pueden combinar para obtener la magnitud del gradiente, utilizando:
Usando esta información, también podemos calcular la dirección del gradiente:
donde, por ejemplo, es 0 para un borde vertical que es más claro en el lado derecho ( ver atan2 ).
Dado que la función de intensidad de una imagen digital solo se conoce en puntos discretos, no se pueden definir derivadas de esta función a menos que supongamos que existe una función de intensidad diferenciable subyacente que se ha muestreado en los puntos de la imagen. Con algunas suposiciones adicionales, la derivada de la función de intensidad continua se puede calcular como una función de la función de intensidad muestreada, es decir, la imagen digital. Resulta que las derivadas en cualquier punto particular son funciones de los valores de intensidad en prácticamente todos los puntos de la imagen. Sin embargo, se pueden definir aproximaciones de estas funciones derivadas con grados de precisión mayores o menores.
El operador Sobel-Feldman representa una aproximación bastante inexacta del gradiente de la imagen, pero aún así tiene la calidad suficiente para ser de uso práctico en muchas aplicaciones. Más precisamente, utiliza valores de intensidad solo en una región de 3x3 alrededor de cada punto de la imagen para aproximar el gradiente de la imagen correspondiente, y utiliza solo valores enteros para los coeficientes que ponderan las intensidades de la imagen para producir la aproximación del gradiente.
El operador Sobel-Feldman consta de dos operaciones separables: [2]
Filtros Sobel-Feldman para derivadas de imágenes en diferentes dimensiones con :
1D:
2D:
2D:
3D:
3D:
4D:
Así, a modo de ejemplo, el núcleo Sobel-Feldman 3D en la dirección z :
Como consecuencia de su definición, el operador Sobel se puede implementar de forma sencilla tanto en hardware como en software: solo se necesitan ocho puntos de imagen alrededor de un punto para calcular el resultado correspondiente y solo se necesita aritmética entera para calcular la aproximación del vector de gradiente. Además, los dos filtros discretos descritos anteriormente son separables:
y las dos derivadas G x y G y pueden calcularse por lo tanto como
En ciertas implementaciones, este cálculo separable puede ser ventajoso ya que implica menos cálculos aritméticos para cada punto de la imagen.
La aplicación de la convolución K al grupo de píxeles P se puede representar en pseudocódigo como:
donde representa la nueva matriz de píxeles resultante después de aplicar la convolución K a P ; siendo P la matriz de píxeles original.
El resultado del operador Sobel-Feldman es un mapa bidimensional del gradiente en cada punto. Se puede procesar y visualizar como si fuera una imagen, con las áreas de alto gradiente (los posibles bordes) visibles como líneas blancas. Las siguientes imágenes ilustran esto mostrando el cálculo del operador Sobel-Feldman en una imagen simple.
Las imágenes a continuación ilustran el cambio en la dirección del gradiente en un círculo en escala de grises. Cuando el signo de y son iguales, el ángulo del gradiente es positivo y negativo cuando son diferentes. En el ejemplo a continuación, los colores rojo y amarillo en el borde del círculo indican ángulos positivos, y los colores azul y cian indican ángulos negativos. Los bordes verticales en los lados izquierdo y derecho del círculo tienen un ángulo de 0 porque no hay un cambio local en . Los bordes horizontales en los lados superior e inferior del círculo tienen ángulos de − π/2 y π/2 respectivamente porque no hay cambio local en . El ángulo negativo para el borde superior significa que la transición es de una región brillante a una oscura, y el ángulo positivo para el borde inferior significa una transición de una región oscura a una brillante. Todos los demás píxeles están marcados como negros debido a que no hay cambios locales en ni , y por lo tanto el ángulo no está definido. Dado que el ángulo es una función de la relación de a los píxeles con pequeñas tasas de cambio aún pueden tener una respuesta de ángulo grande. Como resultado, el ruido puede tener una respuesta de ángulo grande que generalmente no es deseada. Al utilizar información del ángulo de gradiente para aplicaciones de procesamiento de imágenes, se debe hacer un esfuerzo para eliminar el ruido de la imagen para reducir esta respuesta falsa.
El operador Sobel-Feldman, si bien reduce los artefactos asociados con un operador de diferencias centrales puro, no exhibe una buena simetría rotacional (alrededor de 1° de error). Scharr investigó la posibilidad de optimizar esta propiedad mediante la producción de núcleos optimizados para una precisión numérica específica dada (entero, flotante...) y dimensionalidades (1D, 2D, 3D). [3] [4] Allí se han presentado núcleos de filtro 3D optimizados hasta un tamaño de 5 x 5 x 5, pero el más utilizado, con un error de aproximadamente 0,2° es:
Esto se explica de manera similar:
Los operadores de Scharr resultan de una optimización que minimiza el error angular cuadrático medio ponderado en el dominio de Fourier . Esta optimización se realiza bajo la condición de que los filtros resultantes sean numéricamente consistentes. Por lo tanto, en realidad son núcleos derivados en lugar de simplemente mantener restricciones de simetría. El filtro 3x3 de valor entero de 8 bits óptimo que surge de la teoría de Scharr es
Farid y Simoncelli también presentaron una estrategia de optimización similar y los filtros resultantes. [5] [6] También investigan esquemas derivados de orden superior. A diferencia del trabajo de Scharr, estos filtros no están obligados a ser numéricamente consistentes.
El problema del diseño de filtros derivados ha sido revisado, por ejemplo, por Kroon. [7]
Hast presentó filtros derivados basados en splines cúbicos arbitrarios. [8] Demostró cómo se pueden calcular correctamente derivadas de primer y segundo orden utilizando splines cúbicos o trigonométricos mediante un enfoque de filtrado doble que proporciona filtros de longitud 7.
Otro operador similar que se generó originalmente a partir del operador Sobel es el operador Kayyali, [9] un filtro de convolución 3x3 basado en simetría rotacional perfecta.
Los núcleos derivados de orientación óptima reducen drásticamente los errores sistemáticos de estimación en la estimación del flujo óptico . En trabajos posteriores de Scharr se presentaron esquemas más grandes con una precisión aún mayor y familias de filtros optimizadas para la estimación extendida del flujo óptico. [10] Se investigaron conjuntos de filtros derivados de segundo orden para la estimación de movimiento transparente . [11] Se observó que cuanto más grandes son los núcleos resultantes, mejor se aproximan a los filtros derivados de Gauss.
Aquí, se utilizan cuatro operadores de gradiente diferentes para estimar la magnitud del gradiente de la imagen de prueba.