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.

imfindcircles

Encuentra círculos usando la transformada circular de Hough

Descripción

centers = imfindcircles(A,radius) encuentra los círculos en la imagen cuyos radios son aproximadamente iguales a.Aradius La salida,, es una matriz de dos columnas que contiene las coordenadas de los círculos centros en la imagen.centersx,y

[centers,radii] = imfindcircles(A,radiusRange) encuentra círculos con radios en el rango especificado por.radiusRange El argumento de salida adicional, contiene los radios estimados correspondientes a cada centro de círculo en.radiicenters

ejemplo

[centers,radii,metric] = imfindcircles(A,radiusRange) también devuelve un vector de columna, que contiene las magnitudes de los picos de la matriz del acumulador para cada círculo (en orden descendente).metric Las filas de y corresponden a las filas de.centersradiimetric

ejemplo

[centers,radii,metric] = imfindcircles(___,Name,Value) especifica opciones adicionales con uno o más argumentos de par, utilizando cualquiera de las sintaxis anteriores.Name,Value

Ejemplos

contraer todo

Este ejemplo muestra cómo encontrar todos los círculos en una imagen, y cómo retener y mostrar los círculos más fuertes.

Lea una imagen en escala de grises en el espacio de trabajo y mostrarla.

A = imread('coins.png'); imshow(A)

Encuentra todos los círculos con píxeles de radio en el rango [15, 30].r

[centers, radii, metric] = imfindcircles(A,[15 30]);

Conserve los cinco círculos más fuertes según los valores de las métricas.

centersStrong5 = centers(1:5,:);  radiiStrong5 = radii(1:5); metricStrong5 = metric(1:5);

Dibuja los cinco perímetros del círculo más fuerte sobre la imagen original.

viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');

Lea la imagen en el espacio de trabajo y mostrarla.

A = imread('circlesBrightDark.png'); imshow(A)

Defina el rango de radio.

Rmin = 30; Rmax = 65;

Encuentra todos los círculos brillantes en la imagen dentro del rango de radio.

[centersBright, radiiBright] = imfindcircles(A,[Rmin Rmax],'ObjectPolarity','bright');

Encuentra todos los círculos oscuros en la imagen dentro del rango de radio.

[centersDark, radiiDark] = imfindcircles(A,[Rmin Rmax],'ObjectPolarity','dark');

Dibuja líneas azules alrededor de los bordes de los círculos brillantes.

viscircles(centersBright, radiiBright,'Color','b');

Dibuja líneas discontinuas rojas alrededor de los bordes de las ojeras.

viscircles(centersDark, radiiDark,'LineStyle','--');

Argumentos de entrada

contraer todo

La imagen de entrada es la imagen en la que se detectan objetos circulares, especificados como una imagen en escala de grises, color verdadero o binario.

Tipos de datos: single | double | int16 | uint8 | uint16 | logical

Radio de círculo es el radio aproximado de los objetos circulares que desea detectar, especificado como un escalar de cualquier tipo numérico.

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

Rango de radios para los objetos circulares que desea detectar, especificados como un vector de dos elementos, de enteros de cualquier tipo numérico.[rmin rmax]

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

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: especifica objetos circulares brillantes sobre un fondo oscuro.'ObjectPolarity','bright'

La polaridad del objeto indica si los objetos circulares son más brillantes o más oscuros que el fondo, especificados como el par separado por comas que consta de y cualquiera de los valores de la tabla siguiente.'ObjectPolarity'

'bright'Los objetos circulares son más brillantes que el fondo.
'dark'Los objetos circulares son más oscuros que el fondo.

El método de cálculo es la técnica utilizada para calcular la matriz del acumulador, especificada como el par separado por comas que consta de y cualquiera de los valores de la tabla siguiente.'Method'

'PhaseCode'Método de codificación de fase de Atherton y Kerbyson.[1] Este es el valor predeterminado.
'TwoStage'El método utilizado en la transformada de Hough circular de dos etapas,.[2][3]

Ejemplo: especifica el método de codificación de fase de Atherton y Kerbyson.'Method','PhaseCode'

Factor de sensibilidad es la sensibilidad para la matriz de acumulador de transformación Hough circular, especificada como el par separado por comas que consta de y un valor escalar no negativo en el intervalo [0,1].'Sensitivity' A medida que aumenta el factor de sensibilidad, detecta más objetos circulares, incluidos los círculos débiles y parcialmente oscurecidos.imfindcircles Los valores de sensibilidad elevados también aumentan el riesgo de detección falsa.

El umbral de degradado de borde establece el umbral de degradado para determinar los píxeles de arista de la imagen, especificados como el par separado por comas que consta de un valor escalar no negativo en el intervalo [0,1].'EdgeThreshold' Especifique para establecer el umbral en magnitud de degradado cero.0 Especifique para establecer el umbral en la magnitud de degradado máxima. detecta más objetos circulares (con aristas débiles y fuertes) cuando se establece el umbral en un valor inferior.1imfindcircles Detecta menos círculos con bordes débiles a medida que aumenta el valor del umbral. De forma predeterminada, elige el umbral de degradado de borde automáticamente mediante la función.imfindcirclesgraythresh

Ejemplo: establece el umbral de degradado de arista.'EdgeThreshold',0.50.5

Argumentos de salida

contraer todo

Las coordenadas de los centros circulares, devueltas como una-por-matriz que contiene las coordenadas de los centros de círculo en la primera columna y las coordenadas en la segunda columna.P2xy El número de filas, es el número de círculos detectados. se ordena en función de la fuerza de los círculos.Pcenters

Los radios estimados para los centros circulares, devueltos como un vector de columna. El valor de radio en corresponde al círculo centrado en.radii(j)centers(j,:)

Las fortalezas circulares son las fortalezas relativas para los centros circulares, devueltas como vector. El valor en corresponde al círculo con el radio centrado en.metric(j)radii(j)centers(j,:)

Sugerencias

  • Especifique un tamaño relativamente pequeño para una mejor precisión.radiusRange Una buena regla de oro es elegir tal que y.radiusRangermax < 3*rmin(rmax-rmin) < 100

  • La precisión de es limitada cuando el valor de (o) es menor o igual a 5.imfindcirclesradiusrmin

  • El paso de estimación de radio suele ser más rápido si utiliza el método (predeterminado) en lugar de.'PhaseCode''TwoStage'

  • Ambos métodos de cálculo, y están limitados en su capacidad para detectar círculos concéntricos.'PhaseCode''TwoStage' Los resultados de los círculos concéntricos pueden variar en función de la imagen de entrada.

  • no encuentra círculos con centros fuera del dominio de la imagen.imfindcircles

  • preprocesa imágenes binarias (lógicas) para mejorar la precisión del resultado.imfindcircles Convierte imágenes truecolor a escala de grises utilizando la función antes de procesarlas.rgb2gray

Algoritmos

La función utiliza un algoritmo basado en la transformada de Hough circular (CHT) para encontrar círculos en las imágenes.imfindcircles Este enfoque se utiliza debido a su robustez en presencia de ruido, oclusión e iluminación variable.

El CHT no es un algoritmo rigurosamente especificado, más bien hay una serie de enfoques diferentes que se pueden tomar en su implementación. Sin embargo, en general, hay tres pasos esenciales que son comunes a todos.

  1. Cálculo de matriz de acumuladores.

    Los píxeles de primer plano de alto gradiente se designan como píxeles candidatos y se les permite emitir "votos" en la matriz del acumulador. En una implementación clásica de CHT, los píxeles candidatos votan en el patrón alrededor de ellos que forma un círculo completo de un radio fijo. La figura 1A muestra un ejemplo de un píxel candidato acostado en un círculo real (círculo sólido) y el patrón de votación clásico de CHT (círculos discontinua) para el píxel candidato.

    Figura 1: patrón de voto clásico de CHT

  2. Estimación de centro

    Los votos de los píxeles candidatos pertenecientes a un círculo de imagen tienden a acumularse en la bandeja de la matriz del acumulador correspondiente al centro del círculo. Por lo tanto, los centros circulares se estiman detectando los picos en la matriz del acumulador. La figura 1B muestra un ejemplo de los píxeles candidatos (puntos sólidos) que yacen en un círculo real (círculo sólido), y sus patrones de votación (círculos de trazos) que coinciden en el centro del círculo real.

  3. Estimación de radio

    Si se utiliza la misma matriz de acumuladores para más de un valor de radio, como se suele hacer en los algoritmos CHT, los radios de los círculos detectados se deben estimar como un paso separado.

La función proporciona dos algoritmos para encontrar círculos en las imágenes:imfindcircles Codificación de fase (por defecto) y dos etapas. Ambos comparten algunos pasos computacionales comunes, pero cada uno tiene sus propios aspectos únicos también.

Las características computacionales comunes compartidas por ambos algoritmos son las siguientes:

  • Uso de array acumulador 2-D:

    La clásica transformación Hough requiere una matriz 3-D para almacenar votos para múltiples radios, lo que da como resultado grandes requisitos de almacenamiento y largos tiempos de procesamiento. Tanto los métodos de codificación de fase como de dos etapas resuelven este problema mediante el uso de una única matriz de acumuladores 2-D para todos los radios. Aunque este enfoque requiere un paso adicional de estimación de radio, la carga computacional general suele ser menor, especialmente cuando se trabaja en un rango de radio grande. Esta es una práctica ampliamente adoptada en las implementaciones modernas de CHT.

  • El uso de píxeles perimetrales

    Los requisitos generales de memoria y la velocidad se rigen fuertemente por el número de píxeles candidatos. Para limitar su número, la magnitud del degradado de la imagen de entrada es el umbral para que solo se incluyan píxeles de alto gradiente en los votos de conteo.

  • Uso de la información de orientación del borde:

    Otra forma de optimizar el rendimiento es restringir el número de bins disponibles para los píxeles candidatos. Esto se logra mediante la utilización de información de borde disponible localmente para permitir sólo la votación en un intervalo limitado a lo largo de la dirección del degradado (Figura 2).

    Figura 2: Modo de votación: múltiples radios, a lo largo de la dirección del degradado

RminEl radio mínimo de búsqueda
RmaxRadio de búsqueda máximo
RactualRadio del círculo al que pertenece el píxel candidato a
CminCentro del círculo de radio rmin
CmaxCentro del círculo de radio rmax
CactualCentro del círculo de radio ractual

Los dos métodos CHT empleados por función difieren fundamentalmente en la forma en que se calculan los radios circulares.imfindcircles

  • De dos etapas

    Los radios se estiman explícitamente utilizando los centros de círculos estimados junto con la información de la imagen. La técnica se basa en la computación de histogramas radiales; Véanse las referencias 2 y 3 para obtener una explicación detallada.

  • Codificación de fase

    La idea clave en la codificación de fase (ver referencia) es el uso de valores complejos en la matriz del acumulador con la información de radio codificada en la fase de las entradas de la matriz.[1] Los votos emitidos por los píxeles del borde contienen información no solo sobre las posibles ubicaciones del centro, sino también sobre el radio del círculo asociado a la ubicación central. A diferencia del método de dos etapas donde el radio tiene que ser estimado explícitamente usando histogramas radiales, en la codificación de fase el radio se puede estimar simplemente decodificando la información de fase de la ubicación central estimada en la matriz del acumulador.

Referencias

[1] T.J Atherton, D.J. Kerbyson. "Size invariant circle detection." Image and Vision Computing. Volume 17, Number 11, 1999, pp. 795-803.

[2] H.K Yuen, .J. Princen, J. Illingworth, and J. Kittler. "Comparative study of Hough transform methods for circle finding." Image and Vision Computing. Volume 8, Number 1, 1990, pp. 71–77.

[3] E.R. Davies, Machine Vision: Theory, Algorithms, Practicalities. Chapter 10. 3rd Edition. Morgan Kauffman Publishers, 2005,

Capacidades ampliadas

Consulte también

| | |

Introducido en R2012a