Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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 una imagen 3D en escala de grises o binaria, utilice la función edge3.

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

ejemplo

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 Prewitt, Gx y Gy representan los gradientes horizontal y vertical, respectivamente. Si se emplea el método de Roberts, Gx y Gy representan los gradientes en ángulos de 135° y 45° 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 área de trabajo y muéstrela en pantalla.

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

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')

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 no negativo 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.

  • Si no se especifica threshold o se especifica un arreglo vacío ([]), edge escoge los valores de forma heurística y automática dependiendo de los datos de entrada. La mejor manera de variar el umbral es ejecutar la función una vez generando como salida el umbral calculado como argumento threshOut. Después, empezando por el valor umbral calculado, aumente o reduzca el umbral para detectar menos o más píxeles de borde, respectivamente.

  • Para los métodos "Sobel", "Prewitt" y "Roberts", la función usa el valor umbral para determinar la magnitud del gradiente que desea considerar como borde. Un valor umbral de 0 selecciona todos los bordes de la imagen, incluso aunque tengan una intensidad muy baja.

  • Para los métodos "log" y "zerocross", la función usa el valor umbral para determinar la magnitud del cruce por cero que desea considerar como borde. Es decir, cuando el umbral es elevado, se detecta un borde si el cruce por cero se da con un salto grande, pero con un salto pequeño, no. Si especifica un valor umbral de 0, la imagen de salida tiene contornos cerrados porque incluye todos los cruces por cero de la imagen de entrada.

  • Los métodos "Canny" y "approxcanny" usan dos umbrales para el gradiente: un umbral alto para baja sensibilidad de detección y un umbral bajo para alta sensibilidad de detección. La detección del borde empieza con el resultado de baja sensibilidad y, después, aumenta para incluir píxeles de borde conectados del resultado de alta sensibilidad. Esto contribuye a llenar los posibles huecos en los bordes detectados. La función 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 asigna al valor umbral más alto. En este caso, edge calcula el valor umbral más bajo como threshold*0.4.

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 Roberts, la dirección "horizontal" en realidad detecta bordes en un ángulo de 135° respecto de la horizontal, en tanto que la dirección "vertical" detecta bordes en un ángulo de 45° 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 Roberts, edge devuelve el gradiente calculado en un ángulo de 135° 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 Roberts, edge devuelve el gradiente calculado en un ángulo de 45° respecto de la horizontal.

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

Consulte también

| | |