Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

edge

Buscar bordes en la imagen de intensidad

Descripción

BW = edge(I) devuelve una imagen binaria que contiene s donde la función encuentra bordes en la imagen de entrada y s en otro lugar.BW1I0 De forma predeterminada, utiliza el método de detección de bordes Sobel.edge

Opcionalmente, puede encontrar aristas usar una GPU (requiere ).Parallel Computing Toolbox™

ejemplo

BW = edge(I,method) detecta los bordes de la imagen mediante el algoritmo de detección de bordes especificado por .Imethod

BW = edge(I,method,threshold) devuelve todos los bordes que son más fuertes que .threshold

BW = edge(I,method,threshold,direction) especifica la orientación de las aristas que se deben detectar. Los métodos Sobel y Prewitt pueden detectar bordes en la dirección vertical, la dirección horizontal o ambos. El método Roberts puede detectar bordes en ángulos de 45o desde horizontal, 135o desde horizontal o ambos. Esta sintaxis solo es válida cuando es , , o .method'Sobel''Prewitt''Roberts'

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

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

BW = edge(I,method,threshold,h) detecta los bordes mediante el método con un filtro, que especifique.'zerocross'h Esta sintaxis solo es válida cuando es .method'zerocross'

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

[BW,threshOut,Gv,Gh] = edge(___) también devuelve las magnitudes de gradiente direccional. Para los métodos Sobel y Prewitt, y corresponden a los degradados verticales y horizontales.GvGh Para los métodos Roberts, y corresponden al gradiente en ángulos de 45o y 135o desde horizontal, respectivamente.GvGh Esta sintaxis solo es válida cuando es , , o .method'Sobel''Prewitt''Roberts'

Ejemplos

contraer todo

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

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

Busque aristas utilizando el método Canny.

BW1 = edge(I,'Canny');

Busque bordes utilizando el método Prewitt.

BW2 = edge(I,'Prewitt');

Visualice ambos resultados uno al lado del otro.

imshowpair(BW1,BW2,'montage')

Argumentos de entrada

contraer todo

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

Para el método, las imágenes de tipo de datos o deben normalizarse en el intervalo [0 1].'approxcanny'singledouble

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

Método de detección perimetral, especificado como uno de los siguientes.

MétodoDescripción
'Sobel'

Encuentra bordes en aquellos puntos donde el degradado de la imagen es máximo, utilizando la aproximación de Sobel a la derivada.I

'Prewitt'

Busca aristas en aquellos puntos donde el degradado es máximo, utilizando la aproximación de Prewitt a la derivada.I

'Roberts'Busca bordes en aquellos puntos donde el degradado es máximo, utilizando la aproximación de Roberts a la derivada.I
'log'Encuentra bordes buscando cruces cero después de filtrar con un filtro Laplacian de Gaussian (LoG).I
'zerocross'Busca bordes buscando cruces cero después de filtrar con un filtro que especifique,Ih
'Canny'

Encuentra bordes buscando el máximo local del gradiente de .I La función calcula el degradado utilizando la derivada de un filtro gaussiano.edge Este método utiliza dos umbrales para detectar bordes fuertes y débiles, incluidos los bordes débiles en la salida si están conectados a bordes fuertes. Mediante el uso de dos umbrales, el método Canny es menos probable que los otros métodos se dejen engañar por el ruido y, más es probable, detectar bordes débiles verdaderos.

'approxcanny'

Encuentra bordes utilizando una versión aproximada del algoritmo de detección de bordes de Canny que proporciona un tiempo de ejecución más rápido a expensas de una detección menos precisa. Se espera que las imágenes de punto flotante se normalifiquen en el rango.[0 1]

Nota

Los métodos y no se admiten en una GPU.'Canny''approxcanny'

Umbral de sensibilidad, especificado como un escalar numérico para cualquier vector , o un vector de 2 elementos para los métodos y. ignora todas las aristas que no son más fuertes que .method'Canny''approxcanny'edgethreshold Para obtener más información acerca de este parámetro, consulte .Algoritmo

  • Si no especifica , o si especifica una matriz vacía ( ), elige el valor o los valores automáticamente.threshold[]edge

  • Para los métodos y, si especifica el valor de umbral, la imagen de salida tiene contornos cerrados porque incluye todos los cruces cero en la imagen de entrada.'log''zerocross'0

  • Los métodos y utilizan dos umbrales. ignora todas las aristas con una fuerza de arista por debajo del umbral inferior y conserva todas las aristas con una fuerza de arista por encima del umbral superior.'Canny''approxcanny'edge Puede especificar como un vector de 2 elementos del formulario con y valores en el rango [0 1].threshold[low high]lowhigh También puede especificar como escalar numérico, que se asigna al umbral superior.thresholdedge En este caso, se utiliza como umbral inferior.edgethreshold*0.4

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

Dirección de aristas que se deben detectar, especificadas como , , o .'horizontal''vertical''both' El argumento solo es válido cuando es , , o .directionmethod'Sobel''Prewitt''Roberts'

Nota

Si selecciona Roberts , la dirección detecta realmente los bordes en un ángulo de 135o desde horizontal, y la dirección detecta los bordes en un ángulo de 45o desde horizontal.method'horizontal''vertical'

Tipos de datos: char | string

Filtro, especificado como una matriz. El método solo admite el argumento.h'zerocross'

Tipos de datos: double

Desviación estándar del filtro, especificada como escalar. El argumento solo es compatible con los métodos y.sigma'Canny''log'

MétodoDescripción
'Canny'

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

(Laplacian de Gaussian)'log'

Valor escalar que especifica la desviación estándar del filtro laplaciano de Gaussiano. El valor predeterminado es .2 El tamaño del filtro es -by-, donde .nnn=ceil(sigma*3)*2+1

Tipos de datos: double

Argumentos de salida

contraer todo

Imagen binaria de salida, devuelta como una matriz lógica del mismo tamaño que , con s donde la función encuentra bordes en y s en otro lugar.I1I0

Valor de umbral utilizado en el cálculo, devuelto como un vector de 2 elementos para el , un vector vacío ( ) para el método, o un escalar numérico para todos los demás métodos de detección de bordes.'Canny'method[]'approxcanny'

Degradado vertical, devuelto como una matriz numérica del mismo tamaño que .I

Nota

Si selecciona Roberts , devolverá el degradado calculado en un ángulo de 45o desde horizontal.methodedge

Degradado horizontal, devuelto como una matriz numérica del mismo tamaño que .I

Nota

Si selecciona Roberts , devolverá el degradado calculado en un ángulo de 135o desde horizontal.methodedge

Algoritmos

  • Para los métodos de detección de borde de magnitud de gradiente (Sobel, Prewitt, Roberts), se utiliza para umbral la magnitud de gradiente calculada.edgethreshold

  • Para los métodos de cruce cero, incluyendo Laplacian de Gaussian, se utiliza como umbral para los cruces cero.edgethreshold En otras palabras, un gran salto a través de cero es un borde, mientras que un pequeño salto no lo es.

  • El método Canny aplica dos umbrales al degradado: un umbral alto para la sensibilidad de borde bajo y un umbral bajo para la sensibilidad de borde alta. comienza con el resultado de baja sensibilidad y luego lo crece para incluir píxeles de borde conectados del resultado de alta sensibilidad.edge Esto ayuda a rellenar huecos en los bordes detectados.

  • En todos los casos, elige el umbral predeterminado heurísticamente, dependiendo de los datos de entrada.edge La mejor manera de variar el umbral es ejecutarse una vez, capturando el umbral calculado como el segundo argumento de salida.edge A continuación, a partir del valor calculado por , ajuste el umbral más alto para detectar menos píxeles de borde o más bajo para detectar más píxeles de borde.edge

Consideraciones de compatibilidad

expandir todo

El comportamiento cambió en R2011a

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

Consulte también

| |

Introducido antes de R2006a