Main Content

edge

Encontrar los bordes de una imagen 2D en escala de grises

Descripción

BW = edge(I) devuelve una imagen binaria BW que contiene 1 en las posiciones en las que la función detecta bordes de la imagen binaria o en escala de grises I (y el valor 0 en todas las demás posiciones). De forma predeterminada, edge usa el método de detección de bordes de Sobel.

Sugerencia

Para encontrar los bordes en un imagen 3D en escala de grises o binaria, utilice la función edge3.

ejemplo

BW = edge(I,method) detecta bordes de la imagen I mediante el algoritmo de detección de bordes que especifica el argumento method.

BW = edge(I,method,threshold) devuelve todos los bordes cuya intensidad es mayor que threshold.

BW = edge(I,method,threshold,direction) especifica la orientación de los bordes que se desea detectar. Los métodos de Sobel y de Prewitt pueden detectar bordes en dirección vertical, horizontal o ambas. El método de Roberts puede detectar bordes en ángulos de 45° respecto de la horizontal, de 135° respecto de la horizontal o ambos. Esta sintaxis solo es válida cuando method tiene los valores "Sobel", "Prewitt" o "Roberts".

BW = edge(___,"nothinning") omite la etapa de angostamiento de bordes, lo que puede mejorar el rendimiento. Esta sintaxis solo es válida cuando method tiene los valores "Sobel", "Prewitt" o "Roberts".

BW = edge(I,method,threshold,sigma) especifica sigma, la desviación estándar del filtro. Esta sintaxis solo es válida cuando method tiene los valores "log" o "Canny".

BW = edge(I,method,threshold,h) detecta bordes con el método "zerocross" y un filtro h especificado por el usuario. Esta sintaxis solo es válida cuando el argumento method tiene el valor "zerocross".

[BW,threshOut] = edge(___) también devuelve el valor umbral.

[BW,threshOut,Gx,Gy] = edge(___) también devuelve los gradientes direccionales. Si se emplean los métodos de Sobel y de Prewitt, Gx y Gy representan los gradientes horizontal y vertical. Si se emplea el método de Roberts, Gx y Gy representan los gradientes en ángulos de 135° y 45° en sentido contrario a las agujas del reloj respecto de la horizontal, respectivamente. Esta sintaxis solo es válida cuando method tiene los valores "Sobel", "Prewitt" o "Roberts".

Ejemplos

contraer todo

Lea una imagen en escala de grises en el espacio de trabajo y muéstrela en pantalla.

I = imread('circuit.tif');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

Detecte los bordes con el método de Canny.

BW1 = edge(I,'Canny');

Detecte los bordes con el método de Prewitt.

BW2 = edge(I,'Prewitt');

Muestre un resultado al lado del otro.

imshowpair(BW1,BW2,'montage')

Figure contains an axes object. The axes object contains an object of type image.

Argumentos de entrada

contraer todo

La imagen de entrada, especificada como imagen 2D en escala de grises o imagen 2D binaria.

Si se emplea el método "approxcanny", las imágenes con el tipo de datos single o double se deben normalizar al intervalo [0, 1]. Si I tiene valores que se sitúan fuera del intervalo [0, 1], se puede usar la función rescale para llevar los valores al intervalo previsto.

Tipos de datos: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Método de detección de bordes, especificado con una de las siguientes opciones:

MétodoDescripción
"Sobel"

Detecta bordes en los puntos en los que el gradiente de la imagen I es máximo usando la aproximación de Sobel de la derivada.

"Prewitt"

Detecta bordes en los puntos en los que el gradiente I es máximo usando la aproximación de Prewitt de la derivada.

"Roberts"Detecta bordes en los puntos en los que el gradiente I es máximo usando la aproximación de Roberts de la derivada.
"log"Detecta bordes observando los cruces por cero después de filtrar I con un filtro laplaciano-gaussiano (LoG).
"zerocross"Detecta bordes observando los cruces por cero después de filtrar I con un filtro especificado por el usuario, h.
"Canny"

Detecta bordes buscando los máximos locales del gradiente de I. La función edge calcula el gradiente usando la derivada de un filtro gaussiano. Este método usa dos umbrales para detectar bordes intensos y débiles, e incluye los bordes débiles en la salida si están conectados a bordes intensos. Dado que emplea dos umbrales distintos, el método de Canny es menos propenso a errores causados por el ruido que otros métodos y, al mismo tiempo, tiene más probabilidades de detectar bordes realmente débiles.

"approxcanny"

Detecta bordes mediante una versión aproximada del algoritmo de detección de bordes de Canny. Esta versión aproximada se ejecuta más rápidamente a costa de una detección menos precisa. Se espera que las imágenes de valores en punto flotante estén normalizadas al intervalo [0, 1].

Umbral de sensibilidad, especificado como escalar numérico para cualquier method o como vector de 2 elementos para los métodos "Canny" y "approxcanny". edge ignora todos los bordes cuya intensidad no es mayor que threshold. Para obtener más información sobre este parámetro, consulte Algoritmo.

  • Si no se especifica threshold o se especifica un arreglo vacío ([]), edge escoge los valores automáticamente.

  • En el caso de los métodos "log" y "zerocross", si se especifica el valor umbral 0, la imagen de salida tendrá contornos cerrados porque incluirá todos los cruces por cero de la imagen de entrada.

  • Los métodos "Canny" y "approxcanny" usan dos umbrales. edge ignora todos los bordes cuya intensidad es menor que la del umbral más bajo y conserva todos los bordes cuya intensidad es mayor que la del umbral más alto. Se puede especificar threshold como vector de 2 elementos de la forma [low high], en el que low y high son valores que se encuentran dentro del intervalo [0, 1]. También se puede especificar threshold como un escalar numérico que edge asignará al umbral más alto. En este caso, edge usará threshold*0.4 como umbral más bajo.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Dirección de los bordes que se desea detectar, especificada con una de las siguientes opciones: "horizontal", "vertical" o "both". El argumento direction solo es válido cuando el argumento method tiene los valores "Sobel", "Prewitt" o "Roberts".

Nota

Si selecciona el method de Roberts, la dirección "horizontal" en realidad detecta bordes en un ángulo de 135° en sentido contrario a las aguas del reloj respecto de la horizontal, en tanto que la dirección "vertical" detecta bordes en un ángulo de 45° en sentido contrario a las agujas del reloj respecto de la horizontal.

Tipos de datos: char | string

Filtro, especificado como matriz numérica. Únicamente el método "zerocross" admite el argumento h.

Tipos de datos: double

Desviación estándar del filtro, especificada como escalar numérico. Únicamente los métodos "Canny" y "log" admiten el argumento sigma.

MétodoDescripción
"Canny"

Valor escalar que especifica la desviación estándar del filtro gaussiano. El valor predeterminado es sqrt(2). edge escoge el tamaño del filtro automáticamente en función de sigma.

"log" (filtro laplaciano-gaussiano)

Valor escalar que especifica la desviación estándar del filtro laplaciano-gaussiano. El valor predeterminado es 2. El filtro es de n por n, con n=ceil(sigma*3)*2+1.

Tipos de datos: double

Argumentos de salida

contraer todo

Imagen binaria de salida, devuelta como arreglo lógico del mismo tamaño que I con el valor 1 en las posiciones donde la función detecta bordes en I y el valor 0 en todas las demás posiciones.

Valor umbral calculado usado para el cálculo, devuelto como vector de 2 elementos para method "Canny", vector vacío ([]) para el método "approxcanny" o escalar numérico en cualquier otro caso.

Gradiente horizontal, devuelto como arreglo numérico del mismo tamaño que I. Una gran magnitud en el valor del gradiente horizontal indica un borde vertical fuerte.

Nota

Si selecciona el method de Roberts, edge devuelve el gradiente calculado en un ángulo de 135° en sentido contrario a las agujas del reloj respecto de la horizontal.

Gradiente vertical, devuelto como arreglo numérico del mismo tamaño que I. Una gran magnitud en el valor del gradiente vertical indica un borde horizontal fuerte.

Nota

Si selecciona el method de Roberts, edge devuelve el gradiente calculado en un ángulo de 45° en sentido contrario a las agujas del reloj respecto de la horizontal.

Algoritmos

  • Si se emplean métodos de detección de bordes basados en la magnitud del gradiente (Sobel, Prewitt y Roberts), edge usa threshold como umbral para la magnitud del gradiente.

  • Si se emplean los métodos de cruce por cero, incluido el del filtro laplaciano-gaussiano, edge usa threshold como umbral para los cruces por cero. En otras palabras, se detecta un borde si el cruce por cero se da con un salto grande. Si el salto es pequeño, no.

  • El método de Canny aplica dos umbrales al gradiente: un umbral alto (baja sensibilidad de detección) y un umbral bajo (alta sensibilidad de detección). edge comienza con el resultado de baja sensibilidad y, después, lo expande hasta incluir los píxeles de los bordes conectados del resultado de alta sensibilidad. Esto contribuye a llenar los posibles huecos en los bordes detectados.

  • En todos los casos, edge selecciona el umbral predeterminado de forma heurística a partir de los datos de entrada. La mejor manera de variar el umbral es ejecutar edge una vez y capturar el umbral calculado como segundo argumento de salida. Después, puede aumentar el umbral respecto del valor que calcula edge para detectar menos píxeles de borde o reducirlo para detectar más píxeles de borde.

Referencias

[1] Canny, John, "A Computational Approach to Edge Detection," IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-8, No. 6, 1986, pp. 679-698.

[2] Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 478-488.

[3] Parker, James R., Algorithms for Image Processing and Computer Vision, New York, John Wiley & Sons, Inc., 1997, pp. 23-29.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo

El comportamiento cambió en R2011a

Consulte también

| | |