Detección de bordes con Prewitt, Scharr y Sobel Operator

La discontinuidad en el brillo de la imagen se denomina borde. La detección de bordes es la técnica utilizada para identificar las regiones de la imagen donde el brillo de la imagen cambia bruscamente. Este cambio brusco en el valor de la intensidad se observa en los mínimos o máximos locales en el histograma de la imagen, utilizando la derivada de primer orden. 

Las técnicas utilizadas aquí en este artículo son técnicas derivadas de primer orden, a saber:

 Operador Prewitt

El operador de Prewitt fue desarrollado por Judith MS Prewitt. El operador de Prewitt se utiliza para la detección de bordes en una imagen. El operador de Prewitt detecta ambos tipos de aristas, estas son:

  • Bordes horizontales o a lo largo del eje x,
  • Bordes verticales o a lo largo del eje y.

Siempre que hay un cambio repentino en la intensidad de los píxeles, la máscara detecta un borde. Dado que el borde se define como el cambio en la intensidad de los píxeles, se puede calcular utilizando la diferenciación. La máscara de Prewitt es una máscara derivada de primer orden. En la representación gráfica del resultado de la máscara de Prewitt, el borde está representado por los máximos locales o los mínimos locales.

Tanto la máscara de la primera como la de la segunda derivada siguen estas tres propiedades:

  • Más peso significa más detección de bordes.
  • El signo opuesto debe estar presente en la máscara. (+ y -)
  • La suma de los valores de máscara debe ser igual a cero.

El operador de Prewitt nos proporciona dos máscaras, una para detectar bordes en dirección horizontal y otra para detectar bordes en dirección vertical.

Operador de Prewitt [eje X] = [ -1 0 1; -1 0 1; -1 0 1]

Operador de Prewitt [eje Y] = [-1 -1 -1; 0 0 0; 1 1 1]

Pasos:

  • Lee la imagen.
  • Convertir a escala de grises si está coloreado.
  • Convertir al formato doble.
  • Defina la máscara o el filtro.
  • Detecta los bordes a lo largo del eje X.
  • Detecte los bordes a lo largo del eje Y.
  • Combine los bordes detectados a lo largo de los ejes X e Y.
  • Mostrar todas las imágenes.

Imtool() es la función incorporada en Matlab. Se utiliza para mostrar la imagen. Toma 2 parámetros; la primera es la variable de imagen y la segunda es el rango de valores de intensidad. Proporcionamos una lista vacía como segundo argumento, lo que significa que se debe usar el rango completo de intensidad mientras se muestra la imagen.

Ejemplo: 

Matlab

% MATLAB code for prewitt
% operator edge detection
k=imread("logo.png");
k=rgb2gray(k);
k1=double(k);
p_msk=[-1 0 1; -1 0 1; -1 0 1];
kx=conv2(k1, p_msk, 'same');
ky=conv2(k1, p_msk', 'same');
ked=sqrt(kx.^2 + ky.^2);
 
% display the images.
imtool(k,[]);
 
% display the edge detection along x-axis.
imtool(abs(kx), []);
 
% display the edge detection along y-axis.
imtool(abs(ky),[]);
 
% display the full edge detection.
imtool(abs(ked),[]);

Producción:

 

Operador Scharr

Este es un método de filtrado utilizado para identificar y resaltar bordes/características de degradado utilizando la primera derivada. El rendimiento es bastante similar al del filtro Sobel.

Operador Scharr [eje X] = [-3 0 3; -10 0 10; -3 0 3];

Operador de Scharr [eje Y] = [ 3 10 3; 0 0 0; -3 -10 -3];

Ejemplo:

Matlab

%Scharr operator -> edge detection
 k=imread("logo.png");
 k=rgb2gray(k);
 k1=double(k);
 s_msk=[-3 0 3; -10 0 10; -3 0 3];
 kx=conv2(k1, s_msk, 'same');
 ky=conv2(k1, s_msk', 'same');
 ked=sqrt(kx.^2 + ky.^2);
 %display the images.
 imtool(k,[]);
 %display the edge detection along x-axis.
 imtool(abs(kx), []);
 %display the edge detection along y-axis.
 imtool(abs(ky),[]);
 %display the full edge detection.
 imtool(abs(ked),[]);

Producción:

 

 

Operador Sobel

Lleva el nombre de Irwin Sobel y Gary Feldman. Al igual que el operador de Prewitt, el operador de Sobel también se usa para detectar dos tipos de bordes en una imagen:

  • Dirección vertical
  • Dirección horizontal

La diferencia entre el operador de Sobel y el de Prewitt es que en el operador de Sobel los coeficientes de las máscaras se pueden ajustar de acuerdo con nuestros requisitos siempre que sigan todas las propiedades de las máscaras derivadas.

Operador Sobel-X = [-1 0 1; -2 0 2; -1 0 1]

Operador Sobel-Y = [-1 -2 -1; 0 0 0; 1 2 1]

Ejemplo:

Matlab

% MATLAB code for Sobel operator
% edge detection
 k=imread("logo.png");
 k=rgb2gray(k);
 k1=double(k);
 s_msk=[-1 0 1; -2 0 2; -1 0 1];
 kx=conv2(k1, s_msk, 'same');
 ky=conv2(k1, s_msk', 'same');
 ked=sqrt(kx.^2 + ky.^2);
  
 %display the images.
 imtool(k,[]);
  
 %display the edge detection along x-axis.
 imtool(abs(kx), []);
  
 %display the edge detection along y-axis.
 imtool(abs(ky),[]);
  
 %display the full edge detection.
 imtool(abs(ked),[]);

Producción:

 

 

Publicación traducida automáticamente

Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *