6.14.6 EP06_06 🔴 Mapa de Variância Local para Detecção de Textura
Uma fábrica de tecidos precisa inspecionar rolos de pano em tempo real, sem dispor de uma imagem de referência — cada rolo apresenta pequenas variações naturais. Nessa situação, a estratégia apresentada no capítulo consiste em analisar a homogeneidade local da textura: regiões uniformes apresentam baixa variância de intensidade em pequenas vizinhanças, enquanto riscos, manchas e falhas de fabricação produzem aumentos locais dessa variância.
Neste exercício, você implementará o núcleo desse método, calculando a variância local em uma janela deslizante e gerando uma máscara binária que identifica as regiões cuja variância excede um limiar.
6.14.6.1 📋 Diretrizes de Implementação
Dimensões e parâmetros: Ler os inteiros \(L\), \(C\), \(k\) (tamanho da janela, sempre ímpar) e \(T\) (limiar de variância).
Imagem: Ler os \(L \times C\) valores inteiros da matriz de textura (intensidades entre 0 e 255).
Tratamento das bordas: Quando a janela ultrapassar os limites da imagem, utilizar replicação de borda, isto é, repetir o valor do pixel válido mais próximo.
Média local: Para cada posição \((i,j)\), calcular \[ \mu(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{janela}} \text{textura}(p,q). \]
Variância local: Calcular a variância populacional da janela, \[ \sigma^2(i,j)= \frac{1}{k^2} \sum_{(p,q)\in\text{janela}} \left(\text{textura}(p,q)-\mu(i,j)\right)^2, \] ou, de forma equivalente, \[ \sigma^2(i,j)=\overline{x^2}-\mu(i,j)^2, \] em que \(\overline{x^2}\) representa a média dos quadrados das intensidades.
Arredondamento: Arredondar a variância para o inteiro mais próximo (round half away from zero, com
np.floor(res_norm + 0.5)).Limiarização: Definir \(\text{máscara}(i,j)=1\) se a variância arredondada for estritamente maior que \(T\); caso contrário, definir \(\text{máscara}(i,j)=0\).
Saída: Imprimir a máscara binária resultante.
6.14.6.2 📌 Restrições Computacionais
- Replicação de borda: utilizar o valor do pixel válido mais próximo sempre que a janela ultrapassar os limites da imagem.
- Variância populacional: utilizar denominador \(k^2\), nunca \(k^2-1\).
- Comparação estrita: a máscara deve ser calculada utilizando a condição \(\sigma^2_{\text{arred}}>T\).
- Janela ímpar: o valor de \(k\) é sempre ímpar, garantindo um pixel central.
6.14.6.3 🧠 Fundamentação Teórica
| Situação | Variância local | Interpretação |
|---|---|---|
| Região uniforme | Baixa | Intensidades semelhantes na vizinhança. |
| Região contendo defeito | Alta | A presença de intensidades distintas aumenta a dispersão dos valores. |
| Janela pequena | Maior sensibilidade a detalhes e ruído | Detecta alterações localizadas. |
| Janela grande | Resposta mais suave | Evidencia defeitos maiores, porém reduz a precisão de sua localização. |
A variância local mede a dispersão das intensidades em uma vizinhança. Regiões homogêneas apresentam baixa variância, enquanto alterações na textura aumentam essa medida, permitindo identificar possíveis defeitos por meio de uma simples limiarização.
6.14.6.4 📦 Especificação de Entrada e Saída (VPL)
Entrada:
- Linha 1: Inteiro \(L\).
- Linha 2: Inteiro \(C\).
- Linha 3: Inteiro \(k\) (ímpar).
- Linha 4: Inteiro \(T\).
- Próximas \(L\) linhas: elementos inteiros da matriz de textura.
Saída:
- Máscara binária (valores 0 ou 1), com \(L\) linhas e \(C\) colunas.
6.14.6.5 📌 Exemplos
| Entrada | Saída | Observação |
|---|---|---|
| 3 3 3 50 10 10 10 10 10 10 10 90 10 |
0 0 0 1 1 1 1 1 1 |
O defeito aumenta a variância em todas as janelas que o contêm. |
| 2 2 3 5 100 100 100 100 |
0 0 0 0 |
A textura é uniforme; a variância é nula em toda a imagem. |
%%writefile EP06_06.py
# Código PythonWriting EP06_06.py
TestSuite("EP06_06.py").run()✔️ EP06_06.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_06.cases
🔍 Testando Python: EP06_06.py
⚠️ EP06_06.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.