PDI+VC · Exercício de Programação

EP06_02 — 🟢 Filtro de Marcadores por Circularidade

6.14.2 EP06_02 🟢 Filtro de Marcadores por Circularidade

Após a segmentação de uma imagem, é comum que diversos componentes conexos sejam identificados. Em aplicações como a retificação de documentos, apenas alguns desses componentes correspondem aos marcadores de referência utilizados para o alinhamento da imagem. Um critério frequentemente empregado para selecionar esses marcadores é a circularidade, que mede o quão próxima a forma de um componente está de um círculo.

Neste exercício, cada componente é descrito por sua área \(A\) e seu perímetro \(P\). O objetivo é calcular sua circularidade e decidir, a partir de um limiar fornecido, se o componente deve ser aceito ou rejeitado como candidato a marcador.

6.14.2.1 📋 Diretrizes de Implementação

  1. Quantidade: Ler o inteiro \(N\) (número de candidatos) e o limiar de circularidade \(C_{\text{limiar}}\) (número real).
  2. Dados dos candidatos: Para cada um dos \(N\) candidatos, ler a área \(A\) (inteiro) e o perímetro \(P\) (número real).
  3. Circularidade: Calcular \(C=\frac{4\pi A}{P^2}\), em que:
  • \(A\) é a área do componente;
  • \(P\) é o perímetro do componente;
  • \(C\) é a circularidade.
  1. Caso degenerado: Se \(P=0\), considerar \(C=0\) e classificar diretamente o candidato como REJEITADO.
  2. Classificação: Se \(C>C_{\text{limiar}}\), classificar o candidato como ACEITO; caso contrário, classificá-lo como REJEITADO.
  3. Arredondamento: Exibir o valor de \(C\) com quatro casas decimais.
  4. Saída: Para cada candidato, imprimir o valor de \(C\) seguido da classificação. Ao final, imprimir o número total de candidatos aceitos.

6.14.2.2 📌 Restrições Computacionais

  • Utilizar a constante \(\pi\) da biblioteca padrão da linguagem (por exemplo, math.pi), sem aproximações.
  • A comparação deve ser realizada com o valor de \(C\) em precisão completa, antes do arredondamento para exibição.
  • O critério de aceitação é estrito (\(C>C_{\text{limiar}}\)).
  • Se \(P=0\), a divisão não deve ser realizada.

6.14.2.3 🧠 Fundamentação Teórica

A circularidade é um descritor geométrico definido por \(C=\frac{4\pi A}{P^2}\), em que:

  • \(A\) é a área do componente;
  • \(P\) é o perímetro do componente;
  • \(C\) é a circularidade.

Para um círculo perfeito, \(C=1\). À medida que a forma se torna mais alongada ou irregular, o perímetro cresce mais rapidamente que a área, reduzindo o valor de \(C\).

Forma Circularidade aproximada Interpretação
Círculo \(1{,}0000\) Forma circular.
Quadrado \(0{,}7854\) Forma aproximadamente compacta.
Forma alongada ou irregular \(C\ll1\) Baixa circularidade.
\(P=0\) \(0\) (convenção adotada) Contorno degenerado.

A circularidade é invariante à translação, à rotação e à escala, sendo amplamente utilizada para distinguir componentes aproximadamente circulares de outros formatos.

6.14.2.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: inteiro \(N\).
  • Linha 2: número real \(C_{\text{limiar}}\).
  • Próximas \(N\) linhas: área \(A\) (inteiro) e perímetro \(P\) (real), separados por espaço.

Saída:

  • Uma linha para cada candidato, no formato C ACEITO ou C REJEITADO, com \(C\) apresentado com quatro casas decimais.
  • Última linha: Total aceitos: X.

6.14.2.5 📌 Exemplos

Entrada Saída Observação
3
0.6
78 31.4
100 40
50 60
0.9941 ACEITO
0.7854 ACEITO
0.1745 REJEITADO
Total aceitos: 2
Candidato aproximadamente circular, forma compacta e forma alongada.
1
0.9
10 0
0.0000 REJEITADO
Total aceitos: 0
Perímetro nulo: contorno degenerado.
🎮 Simulador EP06_02: Filtro de Marcadores por Circularidade C = 4πA / P²
Ajuste o limiar e observe quais candidatos (discos, quadrados e formas irregulares) sobrevivem ao filtro.
–
Figura 6.22: Simulador EP06_02: Filtro de Marcadores por Circularidade
%%writefile EP06_02.py
# Código Python
Writing EP06_02.py
TestSuite("EP06_02.py").run()
✔️ EP06_02.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_02.cases

🔍 Testando Python: EP06_02.py
⚠️ EP06_02.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.