1
resposta

[Dúvida] Aplicação de Kernel e Filtros em imagens noturnas com tons de cinza

Gente, quero aplicar esses filtros numa vídeo em escala de cinza na fonte!
vocês tem alguma dica, ou algum material que possa me ajudar a aplicar o melhor Filtro e Kernel?
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O video original esta na aba "Frame"

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá Vitor! Tudo bem?

O desafio da detecção de movimento em imagens noturnas é o ruído (granulação), que acaba sendo interpretado como movimento pelo código (o ruído "vaza" na subtração de frames). É indicado aplicar os filtros em momentos estratégicos do seu pipeline de processamento: suavizar antes da subtração e limpar a "sujeira" depois.

1. Suavização e Redução de Ruído (Pré-processamento)

Essa etapa deve ser aplicada no frame atual (frameGray) antes de você fazer a subtração. O objetivo é eliminar o ruído para que ele não seja detectado como movimento.

  • Filtro Gaussiano (cv2.GaussianBlur): É o mais comum e recomendado. É usado para reduzir o ruído geral de baixa luminosidade, suavizando o frame. Tente um kernel ímpar como (5, 5) ou (7, 7).
    • Exemplo:
      frame_suavizado = cv2.GaussianBlur(frameGray, (5, 5), 0)
      
  • Filtro da Mediana (cv2.medianBlur): Se você notar ruído do tipo "sal e pimenta" (pontos brancos isolados muito fortes). Ele preserva as bordas um pouco melhor.

2. Melhoria de Contraste

Se o objeto em movimento estiver muito escuro, tente realçá-lo logo após converter para tons de cinza.

  • Equalização de Histograma (cv2.equalizeHist): Distribui a intensidade dos pixels, aumentando o contraste em áreas escuras.

3. Limpeza da Máscara (Pós-processamento)

Use essa técnica para eliminar os pontinhos de ruído que sobraram na sua máscara de movimento.

  • Operação de Abertura (Opening): É um combo de Erosão seguida de Dilatação. Usado para remover ruídos pontuais, pois a Erosão elimina os pequenos pontos e a Dilatação restaura o tamanho dos objetos reais de interesse (o movimento).
    • Exemplo:
      kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
      mask_limpa = cv2.morphologyEx(mask_binaria, cv2.MORPH_OPEN, kernel)
      # Use 'mask_limpa' para encontrar os contornos
      

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!