6.14.2 EP06_02 🟢 Filtro de Marcadores por Circularidad
Tras la segmentación de una imagen, es común que se identifiquen diversos componentes conexos. En aplicaciones como la rectificación de documentos, solo algunos de estos componentes corresponden a los marcadores de referencia utilizados para el alineamiento de la imagen. Un criterio empleado con frecuencia para seleccionar estos marcadores es la circularidad, que mide cuán cercana es la forma de un componente a un círculo.
En este ejercicio, cada componente se describe por su área \(A\) y su perímetro \(P\). El objetivo es calcular su circularidad y decidir, a partir de un umbral proporcionado, si el componente debe ser aceptado o rechazado como candidato a marcador.
6.14.2.1 📋 Directrices de Implementación
- Cantidad: Leer el entero \(N\) (número de candidatos) y el umbral de circularidad \(C_{\text{umbral}}\) (número real).
- Datos de los candidatos: Para cada uno de los \(N\) candidatos, leer el área \(A\) (entero) y el perímetro \(P\) (número real).
- Circularidad: Calcular \(C=\frac{4\pi A}{P^2}\), donde:
- \(A\) es el área del componente;
- \(P\) es el perímetro del componente;
- \(C\) es la circularidad.
- Caso degenerado: Si \(P=0\), considerar \(C=0\) y clasificar directamente al candidato como
RECHAZADO. - Clasificación: Si \(C>C_{\text{umbral}}\), clasificar al candidato como
ACEPTADO; en caso contrario, clasificarlo comoRECHAZADO. - Redondeo: Mostrar el valor de \(C\) con cuatro decimales.
- Salida: Para cada candidato, imprimir el valor de \(C\) seguido de la clasificación. Al final, imprimir el número total de candidatos aceptados.
6.14.2.2 📌 Restricciones Computacionales
- Utilizar la constante \(\pi\) de la biblioteca estándar del lenguaje (por ejemplo,
math.pi), sin aproximaciones. - La comparación debe realizarse con el valor de \(C\) en precisión completa, antes del redondeo para la visualización.
- El criterio de aceptación es estricto (\(C>C_{\text{umbral}}\)).
- Si \(P=0\), no se debe realizar la división.
6.14.2.3 🧠 Fundamentación Teórica
La circularidad es un descriptor geométrico definido por \(C=\frac{4\pi A}{P^2}\), donde:
- \(A\) es el área del componente;
- \(P\) es el perímetro del componente;
- \(C\) es la circularidad.
Para un círculo perfecto, \(C=1\). A medida que la forma se vuelve más alargada o irregular, el perímetro crece más rápidamente que el área, reduciendo el valor de \(C\).
| Forma | Circularidad aproximada | Interpretación |
|---|---|---|
| Círculo | \(1{,}0000\) | Forma circular. |
| Cuadrado | \(0{,}7854\) | Forma aproximadamente compacta. |
| Forma alargada o irregular | \(C\ll1\) | Baja circularidad. |
| \(P=0\) | \(0\) (convención adoptada) | Contorno degenerado. |
La circularidad es invariante a la traslación, la rotación y la escala, y se utiliza ampliamente para distinguir componentes aproximadamente circulares de otros formatos.
6.14.2.4 📦 Especificación de Entrada y Salida (VPL)
Entrada:
- Línea 1: entero \(N\).
- Línea 2: número real \(C_{\text{umbral}}\).
- Siguientes \(N\) líneas: área \(A\) (entero) y perímetro \(P\) (real), separados por espacio.
Salida:
- Una línea para cada candidato, en el formato
C ACEPTADOoC RECHAZADO, con \(C\) presentado con cuatro decimales. - Última línea:
Total aceptados: X.
6.14.2.5 📌 Ejemplos
| Entrada | Salida | Observación |
|---|---|---|
| 3 0.6 78 31.4 100 40 50 60 |
0.9941 ACEPTADO 0.7854 ACEPTADO 0.1745 RECHAZADO Total aceptados: 2 |
Candidato aproximadamente circular, forma compacta y forma alargada. |
| 1 0.9 10 0 |
0.0000 RECHAZADO Total aceptados: 0 |
Perímetro nulo: contorno degenerado. |
%%writefile EP06_02.py
# Código PythonOverwriting EP06_02.py
TestSuite("EP06_02.py").run()✔️ EP06_02.cases ya existe en casos/
📋 5 caso(s) cargado(s) de casos/EP06_02.cases
🔍 Probando Python: EP06_02.py
⚠️ EP06_02.py: archivo vacío (menos de 3 líneas). Pruebas omitidas.