👆 Clique esquerdo escurece (−25) e clique com o botão direito clareia (+25) os pixels da entrada. Observe o limiar ótimo T* ajustar-se dinamicamente ao histograma.
T* = −
Escolher manualmente o limiar \(T\) funciona quando a iluminação é estável, mas em microscopia digital e em inspeção de lâminas de sangue, cada amostra tem um contraste diferente — um limiar fixo falharia de imagem para imagem. O método de Otsu resolve isso encontrando, sozinho, o limiar que maximiza a separação estatística entre as duas classes de pixels, tornando a segmentação automática e adaptativa. Ver na Figura 4.31 uma simulação deste EP.
Dimensões: Ler os inteiros \(L\) (linhas) e \(C\) (colunas).
Dados: Ler os valores inteiros da matriz original linha a linha.
Histograma: Construir o histograma \(h[i]\), \(i=0,\dots,255\), contando quantos pixels têm valor \(i\).
Busca do limiar: Para cada candidato \(T\) de \(1\) a \(255\), calcular a variância entre classes: \[ \sigma_B^2(T) = \frac{n_0 \cdot n_1}{N^2}\,(m_0 - m_1)^2 \] onde \(n_0,n_1\) são as quantidades de pixels com valor \(<T\) e \(\geq T\), \(m_0,m_1\) são suas médias, e \(N=L\times C\).
Escolha: O limiar ótimo \(T^*\) é o que maximiza \(\sigma_B^2(T)\) (em caso de empate, manter o primeiro encontrado).
Aplicação: Binarizar a imagem usando T*, aplicando: \[ p' = \begin{cases} 255, & \text{se } p > T^* \\ 0, & \text{se } p \le T^* \end{cases} \]
cv2.THRESL_BINARY; pixels com valor exatamente igual a \(T^*\) tornam-se pretos.| Conceito | Significado | Impacto |
|---|---|---|
| \(\sigma_B^2(T)\) alta | Classes bem separadas em \(T\) | \(T\) é um bom candidato a limiar |
| Histograma bimodal | Dois “morros” distintos | Otsu encontra o vale entre eles |
| Histograma unimodal | Um único “morro” | Otsu ainda escolhe algum \(T\), mas a segmentação é pouco confiável |
Entrada:
Saída:
| Entrada | Saída | Observação |
|---|---|---|
| 4 4 12 12 12 200 12 12 200 200 12 200 200 200 200 200 200 200 |
0 0 0 255 0 0 255 255 0 255 255 255 255 255 255 255 |
Histograma bimodal claro: 12 e 200 |
| 1 2 10 250 |
0 250 | Apenas dois valores: \(T^*\) fica no maior |
👆 Clique esquerdo escurece (−25) e clique com o botão direito clareia (+25) os pixels da entrada. Observe o limiar ótimo T* ajustar-se dinamicamente ao histograma.
T* = −
%%writefile EP04_02.cpp
// sua soluçãoOverwriting EP04_02.cpp
TestSuite("EP04_02.cpp").run()✔️ EP04_02.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP04_02.cases
🔍 Testando C++: EP04_02.cpp
⚠️ EP04_02.cpp: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.