Programa para segmentar o fundo estático de um video

 

O principal objetivo desse trabalho foi familiarizar a turma com a biblioteca de visão computacional OpenCV a qual foi desenvolvida pela Intel. Maiores informações sobre a biblioteca podem ser encontradas aqui.

Foi criado um programa que recebe um stream de vídeo (a partir de um arquivo ou de uma webcam) e faz a segmentação do fundo em relação aos objetos dinâmicos da cena. Isto é, detecta-se os objetos em movimento ao longo do vídeo.

O trabalho pode nas etapas abaixo:

1 - Criação dos dialogos de entrada e saída.

2 - Definição do número de frames para a fase de treinamento. A quantidade de frames varia de acordo com o vídeo de entrada. No entanto, considerando o fundo bem estático durante a fase de treinamento um valor razoável para esse número de frames é de 100 frames.

3 - Pré-processamento. Nesta fase, aplicamos filtros de ruído.

4 - Estimação do fundo. ( Segmentação ).

5 - Pós-processamento. Nesta fase, aplicamos filtros morfológicos (“erode” e “dilate”, por exemplo) com o objetivo de que o desempenho final do processo de segmentação seja ainda melhor.

6 - Detecção de contornos ativos.

 

Estimação do Fundo

No presente trabalho utilizou-se duas abordagens para a estimação do fundo.

 

- Subtração Básica de Fundo Estimado pela Média

Este algoritmo utiliza os k quadros inicias de treinamento para estimar o fundo a
partir da média. O modelo do fundo B(x) é estimado para cada pixel x como:

onde n é o número de quadros da sequência e 1 >= k >= n.

O alvo Ai(x) estimado durante o processamento do quadro i para o pixel x é calculado como a diferença simétrica maior que um limiar pré-definido t entre o quadro atual fi(x) e o modelo estimado B(x):

Este algoritmo é rápido, porém o resultado depende muito do limiar escolhido t e não é muito robusto, podendo produzir um bom resultado para algumas seqüências e para outras o resultado não seja tão bom. Autilização da média para a estimação do fundo não é o ideal pois é uma estatística muito susceptível a valores discrepantes.

 

- Subtração de Fundo pela Média Adaptativa


Um algoritmo mais robusto em relação a alterações na iluminação e também a alterações no cenário teria que atualizar o modelo estimado do fundo a cada quadro processado. Para estimar este fundo usa-se uma taxa de aprendizado ALPHA, esta taxa de aprendizado indica quanto que o quadro atual i vai influenciar no modelo de fundo atual. O modelo do fundo Bi é inicializado como sendo o primeiro quadro e a partir daí os próximos quadros atualizam o modelo utilizando a taxa de aprendizado ALPHA.

Um dos principais problemas deste algoritmo é conseguir determinar uma taxa de aprendizado ALPHA que funcione bem para a seqüência. Caso ALPHA seja muito perto de zero o fundo irá se adaptar muito lentamente as alterações no cenário, caso ALPHA seja muito próximo de 1, o fundo irá adaptar-se rapidamente as alterações no cenário. No primeiro caso, o cenário pode ser modificado e o modelo de fundo pode não corresponder a este cenário modificado causando problemas no alvo Ai como a detecção de falsos-positivos por um longo período. No segundo caso, caso o fundo se adapte de maneira muito rápida às alterações no cenário, partes do alvo podem ser perdidas por serem rapidamente consideradas como pertencentes ao fundo.

Código Fonte