stringtranslate.com

Operador Prewitt

El operador Prewitt se utiliza en el procesamiento de imágenes , particularmente en algoritmos de detección de bordes . 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 Prewitt es el vector de gradiente correspondiente o la norma de este vector. El operador Prewitt se basa en la convolución de 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 Sobel y Kayyali [1] . Por otro lado, la aproximación del gradiente que produce es relativamente rudimentaria, 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 la 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. El resultado muestra, por lo tanto, cuán "abruptamente" o "suavemente" cambia la imagen en ese punto y, por lo tanto, cuán probable es 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 magnitud (probabilidad de un borde) es más confiable y más fácil de interpretar que el cálculo de 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 de Prewitt en un punto de la imagen que se encuentra en una región de intensidad de imagen constante es un vector cero y en un punto sobre un borde es un vector que apunta a través del borde, desde valores más oscuros a más brillantes.

Formulación

Matemáticamente, 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 como imagen de origen, y y son dos imágenes que en cada punto contienen las aproximaciones de las 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 promediación y un núcleo de diferenciación, calculan el gradiente con suavizado. Por lo 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 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 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]' );   % Visualización de la imagen de entrada input_image = uint8 ( input_image ); figure , imshow ( input_image ); title ( '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 );   % Preasigne la matriz filtered_image con ceros filtered_image = zeros ( size ( input_image ));   % Máscara de operador Prewitt Mx = [ - 1 0 1 ; - 1 0 1 ; - 1 0 1 ]; My = [ - 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 píxel de la imagen filtrada % será filtered_image(2, 2) % La máscara es de 3x3, por lo que debemos atravesar % hasta filtered_image(size(input_image, 1) - 2 %, size(input_image, 2) - 2) % Por lo tanto, no estamos considerando los bordes. para i = 1 : size ( input_image , 1 ) - 2 para j = 1 : size ( input_image , 2 ) - 2              % Aproximaciones de gradiente Gx = suma ( suma ( Mx .* input_image ( i : i + 2 , j : j + 2 ))); Gy = suma ( suma ( My .* input_image ( i : i + 2 , j : j + 2 ))); % Calcular magnitud del vector filtered_image ( i + 1 , j + 1 ) = sqrt ( Gx .^ 2 + Gy .^ 2 ); fin fin              % Visualización de imagen filtrada filtered_image = uint8 ( filtered_image ); figure , imshow ( filtered_image ); title ( 'Imagen filtrada' );      % Define un valor umbral umbralValorUmbral = 100 ; % varía entre [0 255] salida_imagen = max ( filtrada_imagen , valorUmbral ); salida_imagen ( salida_imagen == ronda ( valorUmbral )) = 0 ;            % Visualización de la imagen de salida output_image = im2bw ( output_image ); figure , imshow ( output_image ); title ( 'Imagen con borde detectado' );     

Véase también

Referencias

  1. ^ Dim, Jules R.; Takamura, Tamio (11 de diciembre de 2013). "Enfoque alternativo para la clasificación de nubes por 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 . Academic Press.

[1]

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