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
- Quantidade: Ler o inteiro \(N\) (número de candidatos) e o limiar de circularidade \(C_{\text{limiar}}\) (número real).
- Dados dos candidatos: Para cada um dos \(N\) candidatos, ler a área \(A\) (inteiro) e o perímetro \(P\) (número real).
- 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.
- Caso degenerado: Se \(P=0\), considerar \(C=0\) e classificar diretamente o candidato como
REJEITADO. - Classificação: Se \(C>C_{\text{limiar}}\), classificar o candidato como
ACEITO; caso contrário, classificá-lo comoREJEITADO. - Arredondamento: Exibir o valor de \(C\) com quatro casas decimais.
- 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 ACEITOouC 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. |
%%writefile EP06_02.py
# Código PythonWriting 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.