Edge Detection
Processamento de Imagem com Detecção de Bordas
Detecção de Bordas (Edge Detection) é uma técnica fundamental de processamento de imagens e visão computacional clássica que busca identificar pontos em uma imagem digital onde a intensidade luminosa (brilho) muda abruptamente. Essas mudanças geralmente correspondem a limites físicos de objetos.
⚙️ Como funciona: Contexto Prático
Matematicamente, as bordas são detectadas calculando o gradiente da imagem, que mede a direção e a taxa de mudança na intensidade dos pixels.
Algoritmos clássicos mais comuns:
- Sobel: Aplica matrizes de convolução simples para achar gradientes na vertical e horizontal. Rápido, mas gera bordas grossas.
- Canny Edge Detector: Um pipeline mais complexo que envolve:
- Gaussian Blur para remover ruído.
- Cálculo do gradiente de Sobel.
- Non-Maximum Suppression para manter apenas a “crista” da borda (deixando-a fina).
- Histerese de Limiar para descartar falsas bordas e conectar as verdadeiras.
🧮 Fundamentação Matemática (Gradiente de Imagem)
Dada uma imagem representada por uma matriz , o operador de Sobel aproxima as derivadas usando dois kernels de convolução , um detectando mudanças horizontais () e outro mudanças verticais ():
Eq. 1: Operadores de Sobel para gradientes horizontais e verticais.
A matriz é projetada para dar um valor alto nas bordas verticais, e nas bordas horizontais. O símbolo denota a operação de convolução discreta em 2D.
Em cada pixel da imagem, calculamos a magnitude do gradiente (a “força” da borda) combinando essas duas aproximações:
Eq. 2: Magnitude do gradiente.
Onde:
- : magnitude total do gradiente no pixel.
- : componente do gradiente na direção horizontal.
- : componente do gradiente na direção vertical.
E a orientação (ângulo) da borda, que é crucial para o passo de Non-Maximum Suppression do algoritmo de Canny:
Eq. 3: Direção (ângulo) da borda.
Onde:
- : ângulo de orientação da borda em relação ao eixo horizontal.
- : arco tangente, usado para calcular o ângulo a partir das componentes do vetor gradiente.
Com , o algoritmo verifica a vizinhança na direção do gradiente e descarta o pixel atual se ele não for um máximo local, produzindo bordas finas perfeitamente delineadas.
🎯 Quando usar
- Pré-processamento para ML: Reduz a quantidade de dados. Em vez de uma imagem RGB pesada, um modelo de object-detection pode receber o mapa de bordas para se concentrar na geometria.
- OCR (Reconhecimento Óptico de Caracteres).
- Extração de features clássicas para sistemas antigos sem Deep Learning.
⚠️ Trade-offs e Armadilhas: Como o gradiente mede variações bruscas, ele é muito sensível a ruído de alta frequência. Aplicar derivadas em imagens não-suavizadas resultará em bordas falsas espalhadas por toda a imagem. Sempre se aplica o Gaussian Blur antes.
Relacionadas: object-detection