Carregando
0x40Lição 5 de 16

Detecte padrões com filtros de imagem

Deslize uma pequena grade de pesos sobre uma imagem para desfocar, aumentar a nitidez e encontrar bordas.

22 min Questionário com 6 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Calcule uma saída de convolução manualmente
  • Preveja o que os kernels de desfoque, nitidez e bordas fazem
  • Conecte a convolução aos filtros que uma rede neural aprende

Desfocar, aumentar a nitidez, “encontrar bordas”: esses efeitos de editor de fotos são todos uma operação, convolução. Um kernel - uma pequena grade de pesos, geralmente 3×3 - desliza sobre a imagem. Em cada posição, cada pixel abaixo do kernel é multiplicado pelo seu peso e os produtos são somados. Essa soma é o pixel de saída.

one_position.py
1patch = [
2    [10, 10, 200],
3    [10, 10, 200],
4    [10, 10, 200],
5]
6kernel = [
7    [-1, 0, 1],
8    [-2, 0, 2],
9    [-1, 0, 1],
10]
11total = sum(patch[row][column] * kernel[row][column] for row in range(3) for column in range(3))
12print(total)
Saída
760

Esse kernel subtrai a coluna da esquerda da coluna da direita: em uma mudança acentuada de escuro para claro, ele fornece um grande número (760), enquanto em uma região plana os produtos se cancelam em 0. Esse é um detector de borda.

Experimente

Até 15 XP

Parque infantil do kernel

Escolha um kernel e clique em qualquer pixel da saída para ver exatamente como ele foi calculado.

  • Blur calcula a média de cada vizinhança 3×3. O que acontece com os cantos agudos do quadrado?
  • Arestas verticais e Arestas horizontais encontram, cada uma, apenas alguns dos lados do quadrado. Quais? (Laranja significa negativo: uma mudança do claro para o escuro.)
  • Edite você mesmo os pesos do kernel. Você pode fazer um filtro que encontre apenas a linha diagonal?
Entrada (clique em um pixel da saída)
Kernel
Edite qualquer peso para criar seu próprio filtro.
Saída (laranja = negativo)

Saída na linha 6, coluna 6 = soma de (pixel × peso) na janela destacada 3×3 (pixels fora da imagem valem 0):

220×0 + 220×0 + 220×0 + 20×0 + 20×1 + 20×0 + 20×0 + 20×0 + 220×0 = 20

Principais conclusões

  • Convolução desliza um kernel sobre a imagem; cada saída é uma soma ponderada de uma vizinhança.

  • Pesos médios → desfoque; pesos que subtraem vizinhos → arestas; um centro reforçado → aguçar.

  • As bordas na borda da imagem precisam de preenchimento (aqui, os pixels externos contam como 0).

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: aplique visão computacional com Python

Use pequenas matrizes de pixels para explorar conceitos de visão, execute seu código com imagens de exemplo e relacione cada resultado à ideia maior de visão computacional.

Exercício 1

Encontre a mudança vizinha mais forte

+25 XP

Leia uma lista JSON de pelo menos dois valores em escala de cinza. Encontre a maior diferença absoluta entre valores adjacentes e imprima-a.

  • Uma vantagem forte
  • Pequenas variações
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Exercício 2

Convolver uma imagem

+25 XP

Leia uma imagem JSON em tons de cinza e, na próxima linha, um kernel JSON 3×3. Aplique o kernel em todas as posições onde ele caiba inteiramente dentro da imagem (sem preenchimento) e imprima a imagem de saída como uma lista de linhas. A saída é 2 menor em cada direção.

  • Borda vertical
  • Some um bloco 3x3
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…