stringtranslate.com

operador prewitt

El operador Prewitt se utiliza en el procesamiento de imágenes , particularmente dentro de los algoritmos de detección de bordes . Técnicamente, es un operador de diferenciación discreta , 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 de Prewitt es el vector de gradiente correspondiente o la norma de este vector. El operador Prewitt se basa en convolucionar la imagen con un filtro pequeño, separable y de valor entero en direcciones horizontales y verticales y, por lo tanto, es relativamente económico en términos de cálculos como los operadores de Sobel y Kayyali [1] . Por otra parte, la aproximación del gradiente que produce es relativamente tosca, en particular para variaciones de alta frecuencia en la imagen. El operador Prewitt fue desarrollado por Judith MS Prewitt. [2]

Descripción simplificada

En términos simples, el operador calcula el gradiente de intensidad de la imagen en cada punto, dando la dirección del mayor aumento posible de claro a oscuro y la tasa de cambio en esa dirección. Por lo tanto, el resultado muestra cuán "bruscamente" o "suavemente" cambia la imagen en ese punto y, por lo tanto, qué probabilidad hay de que parte de la imagen represente un borde , así como también cómo es probable que esté orientado ese borde. En la práctica, el cálculo de la magnitud (probabilidad de un borde) es más confiable y más fácil de interpretar que el cálculo de la dirección.

Matemáticamente, el gradiente de una función de dos variables (aquí la función de intensidad de la imagen) es en cada punto de la imagen un vector 2D con los componentes dados por las derivadas en las direcciones horizontal y vertical. En cada punto de la imagen, el vector de gradiente apunta en la dirección del mayor aumento de intensidad posible, y la longitud del vector de gradiente corresponde a la tasa de cambio en esa dirección. Esto implica que el resultado del operador Prewitt en un punto de la imagen que está en una región de intensidad de imagen constante es un vector cero y en un punto en un borde es un vector que apunta a través del borde, desde los valores más oscuros a los más brillantes.

Formulación

Matemáticamente, el operador utiliza dos núcleos de 3×3 que están convolucionados con la imagen original para calcular aproximaciones de las derivadas: uno para cambios horizontales y otro para verticales. Si definimos como imagen fuente, y y son dos imágenes que en cada punto contienen las aproximaciones derivadas horizontal y vertical, estas últimas se calculan como:

donde aquí denota la operación de convolución bidimensional .

Dado que los núcleos de Prewitt se pueden descomponer como productos de un núcleo de promedio y un núcleo de diferenciación, calculan el gradiente con suavizado. Por tanto, es un filtro separable . Por ejemplo, se puede escribir como

La coordenada x se define aquí como creciente en la dirección "izquierda", y la coordenada y se define como creciente en la dirección "arriba". En cada punto de la imagen, las aproximaciones de gradiente resultantes se pueden combinar para dar la magnitud del gradiente, usando:

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 oscuro en el lado derecho.

Ejemplo


Ejemplo de código

% Código MATLAB | Operador Prewitt desde cero% Leer imagen de entrada input_image = imread ( '[nombre del archivo de imagen de entrada]. [formato de archivo]' );   % Mostrando imagen de entrada input_image = uint8 ( input_image ); figura , imshow ( input_image ); título ( 'Imagen de entrada' );      % Convierte la imagen RGB de color verdadero a la imagen en escala de grises input_image = rgb2gray ( input_image );   % Convertir la imagen a doble input_image = double ( input_image );   % Preasignar la matriz de imagen_filtrada con ceros imagen_filtrada = ceros ( tamaño ( imagen_entrada ));   % Máscara de operador Prewitt Mx = [ - 1 0 1 ; - 1 0 1 ; - 1 0 1 ]; Mi = [ -1-1-1 ;0 0 0 ; 1 1 1] ;                      % Proceso de detección de bordes % Cuando i = 1 y j = 1, entonces la posición del % del píxel filtered_image será filtered_image(2, 2) % La máscara es de 3x3, por lo que debemos atravesar % hasta filtered_image(size(input_image, 1) - 2 %, tamaño(input_image, 2) - 2) % Por lo tanto, no estamos considerando los bordes. para i = 1 : tamaño ( imagen_entrada , 1 ) - 2 para j = 1 : tamaño ( imagen_entrada , 2 ) - 2              % Aproximaciones de gradiente Gx = suma ( suma ( Mx .* input_image ( i : i + 2 , j : j + 2 ))); Gy = suma ( suma ( Mi .* input_image ( i : i + 2 , j : j + 2 ))); % Calcular la magnitud del vector filtered_image ( i + 1 , j + 1 ) = sqrt ( Gx .^ 2 + Gy .^ 2 ); fin fin              % Mostrando imagen filtrada filtered_image = uint8 ( filtered_image ); figura , imshow ( imagen_filtrada ); título ( 'Imagen filtrada' );      % Definir un valor umbral umbralValue = 100 ; El % varía entre [0 255] imagen_salida = máx ( imagen_filtrada , valor_umbral ); imagen_salida ( imagen_salida == ronda ( valorumbral )) = 0 ;            % Mostrando imagen de salida output_image = im2bw ( output_image ); figura , imshow ( imagen_salida ); título ( 'Imagen con borde detectado' );     

Ver también

Referencias

  1. ^ Oscuro, Jules R.; Takamura, Tamio (11 de diciembre de 2013). "Enfoque alternativo para la clasificación de nubes de satélite: aplicación de gradiente de borde". Avances en Meteorología . 2013 : 1–8. doi : 10.1155/2013/584816 . ISSN  1687-9309.
  2. ^ Prewitt, JMS (1970). "Mejora y extracción de objetos". Procesamiento de imágenes y Psicopictórica . Prensa académica.

[1]

  1. ^ Geeks para geeks (28 de julio de 2023). "MATLAB: detección de bordes de imágenes mediante el operador Prewitt desde cero"