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 transformación circular De ugh

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 matriz del acumulador para cada círculo (en orden descendente).metric Las filas de y corresponden a las filas de .centersradiimetric

ejemplo

[___] = 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

En este ejemplo se muestra cómo buscar todos los círculos de una imagen y cómo conservar y mostrar los círculos más fuertes.

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

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

Dibuje los cinco perímetros de círculo más fuertes sobre la imagen original.

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

Lea la imagen en el espacio de trabajo y muéstrala.

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

Defina el rango de radio.

Rmin = 30; Rmax = 65;

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

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

Encuentra todas las ojeras de 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, truecolor o binaria.

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

El radio circular 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, especificado como un vector de 2 elementos de enteros de la forma.[rmin rmax]

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

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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 de objetos indica si los objetos circulares son más brillantes u 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 transformación circular De dos etapas de Hough , .[2][3]

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

El factor de sensibilidad es la sensibilidad para la matriz de acumulador de transformación Circular Hough, especificada como el par separado por comas que consta de y un número en el rango [0,1].'Sensitivity' A medida que aumenta el factor de sensibilidad, detecta más objetos circulares, incluidos círculos débiles y parcialmente oscurecidos.imfindcircles Los valores de sensibilidad más altos 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 borde en la imagen, especificado como el par separado por comas que consta de y un número en el rango [0, 1].'EdgeThreshold' Especifique para establecer el umbral en magnitud de cero degradado.0 Especifique para establecer el umbral en la magnitud máxima del degradado. detecta más objetos circulares (con bordes débiles y fuertes) al establecer 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 arista automáticamente mediante la función .imfindcirclesgraythresh

Ejemplo: establece el umbral de degradado del borde en .'EdgeThreshold',0.50.5

Argumentos de salida

contraer todo

Coordenadas de los centros de círculo, devueltas como una matriz -por- que contiene las coordenadas de los círculos 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 de círculo, devueltos como un vector de columna. El valor de radio en corresponde al círculo centrado en .radii(j)centers(j,:)

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

Sugerencias

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

  • La precisión de está limitada cuando el valor de (o ) es menor o igual que 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

utiliza un algoritmo basado en Circular Hough Transform (CHT) para encontrar círculos en 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. Computación de matriz de acumuladores

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

    Patrón de votación clásico CHT

  2. Estimación del centro

    Los votos de los píxeles candidatos que pertenecen a un círculo de imagen tienden a acumularse en el contenedor de matriz del acumulador correspondiente al centro del círculo. Por lo tanto, los centros de círculo 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 se encuentran en un círculo real (círculo sólido) y sus patrones de votación (círculos desalimentados) que coinciden en el centro del círculo real.

  3. Estimación de radio

    Si se utiliza la misma matriz de acumulador para más de un valor de radio, como se hace comúnmente en los algoritmos CHT, los radios de los círculos detectados deben estimarse como un paso independiente.

proporciona dos algoritmos para encontrar círculos en imágenes:imfindcircles Codificación de fase (predeterminada) y de 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 la matriz de acumuladores 2D

    La transformación clásica de Hough requiere una matriz 3D para almacenar votos para varios radios, lo que da como resultado grandes requisitos de almacenamiento y largos tiempos de procesamiento. Los métodos Phase-Coding y Two-Stage resuelven este problema mediante el uso de una única matriz de acumulador 2D 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.

  • Uso de píxeles de borde

    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 umbral, de modo que solo se incluyan píxeles de degradado alto en los votos de recuento.

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

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

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

RminRadio de búsqueda mínimo
RmaxRadio de búsqueda máximo
RactualRadio del círculo al que pertenece el píxel candidato
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 la función difieren fundamentalmente en la forma en que se calculan los radios del círculo.imfindcircles

  • Dos etapas

    Los radios se estiman explícitamente utilizando los centros de círculo estimados junto con la información de la imagen. La técnica se basa en histogramas radiales informáticos.[2][3]

  • Codificación de fase

    La idea clave en la codificación de fase 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 de borde contienen información no solo sobre las posibles ubicaciones centrales, sino también sobre el radio del círculo asociado a la ubicación central. A diferencia del método de dos etapas en el que el radio debe estimarse explícitamente utilizando histogramas radiales, en La codificación de fase el radio se puede estimar simplemente descodificando la información de fase de la ubicación central estimada en la matriz del acumulador.

Consideraciones de compatibilidad

expandir todo

El comportamiento cambió en R2019a

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

Introducido en R2012a