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:
    1. Gaussian Blur para remover ruído.
    2. Cálculo do gradiente de Sobel.
    3. Non-Maximum Suppression para manter apenas a “crista” da borda (deixando-a fina).
    4. 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 AA, o operador de Sobel aproxima as derivadas usando dois kernels de convolução 3×33 \times 3, um detectando mudanças horizontais (GxG_x) e outro mudanças verticais (GyG_y):

Gx=[10+120+210+1]AeGy=[121000+1+2+1]AG_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} * A \quad \text{e} \quad G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ +1 & +2 & +1 \end{bmatrix} * A

Eq. 1: Operadores de Sobel para gradientes horizontais e verticais.

A matriz GxG_x é projetada para dar um valor alto nas bordas verticais, e GyG_y 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:

G=Gx2+Gy2|G| = \sqrt{G_x^2 + G_y^2}

Eq. 2: Magnitude do gradiente.

Onde:

  • G|G|: magnitude total do gradiente no pixel.
  • GxG_x: componente do gradiente na direção horizontal.
  • GyG_y: 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:

θ=arctan(GyGx)\theta = \arctan\left(\frac{G_y}{G_x}\right)

Eq. 3: Direção (ângulo) da borda.

Onde:

  • θ\theta: ângulo de orientação da borda em relação ao eixo horizontal.
  • arctan\arctan: arco tangente, usado para calcular o ângulo a partir das componentes do vetor gradiente.

Com θ\theta, 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

Construído com Eleventy · busca por Lunr.js