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.