Trabalho
1 – Programa para segmentar o fundo estático de um vídeo
Descrição
do trabalho:
O objetivo principal desse primeiro
trabalho é familiarizar a turma com a biblioteca de visão computacional criada
pela Intel chamada de OpenCV [1]. Foi criado, especialmente para o curso, um
tutorial [2] com uma série de exemplos sobre essa biblioteca que pode auxiliar
bastante nessa primeira etapa do trabalho.
No
primeiro trabalho deve ser criado um programa que recebe um stream de vídeo (a
partir de um arquivo ou vindo de uma webcam) e faz a segmentação do fundo em
relação aos objetos dinâmicos da cena. Ou seja, o programa deve ser capaz de
detectar os objetos em movimento ao longo do vídeo. Uma motivação e estudos
desenvolvidos nesta área podem ser encontrados em [3].
Softwares
específicos para essa tarefa são desejáveis em diversas aplicações práticas, e
apesar de não existir hoje uma solução definitiva para esse problema, existe
alguma teoria específica para executar tal tarefa. O documento segmentação de
movimento [4] faz a introdução aos conceitos de uma pequena parte dessa teoria,
e sua leitura facilitou bastante a realização do trabalho.
Ambiente
de desenvolvimento:
O trabalho foi desenvolvido no
Microsoft Visual Studio 2005 utilizando as bibliotecas do OpenCV para dar
suporte a leitura de arquivos .avi, interface gráfica e chamadas de funções
específicas.
Implementação:
Neste trabalho foram estudadas
quatro metodologias para solucionar o problema em questão:
1- Redes
Neurais
2- Method for Adaptive: Novel Clustering-Based Background
Segmentation
3- Mediana
4- OpenCV
1 -
Redes Neurais
A
aplicação de redes neurais neste tipo de problema seria beneficiada, por temos
inúmeros casos a serem tratados em diferentes situações, onde a rede neural
pode se adaptar bem a cada um deles. A idéia básica da aplicação de redes
neurais neste trabalho seria interpolar funções com o intuito de atribuir pesos
para cada uma das camadas da rede que resolvessem o problema em questão. A
interpolação seria feita em uma fase de treinamento (100 primeiros frames) e
com isso saberíamos classificar o que era background.
Com isso ganhamos de graça a extração de ruído da cena e grande versatilidade
na escolha da topologia da rede sem grandes mudanças de código. O que
inviabilizou a continuação desta abordagem foi a resposta da rede para o foreground. Como o treinamento era
apenas para o que era fundo, a rede não sabe responder o que não é fundo.
Alguns dos outros problemas encontrados foram falta de bibliografia, algoritmo
não adaptativo e pouco eficiente dependendo da entrada e da topologia da rede.
Maiores detalhes sobre redes neurais pode ser encontrado em [5].
2-
Method for Adaptive: Novel Clustering-Based Background Segmentation
Esta abordagem tinha como idéia
implementar o algoritmo descrito no artigo [6]. Por só termos acesso a uma
apresentação deste artigo, a implementação do código foi dificultada, porém a
idéia básica do algoritmo esta descrita abaixo:
![]()


![]()





Foi
estipulado que os 100 primeiros frames seriam utilizados para a fase de
treinamento. Com todos os pixels armazenados
em memória, transformamos seus valores para o espaço de cores HSV, formando
assim 3*W*H imagens. A primeira imagem contém os valores de H (100 primeiros
frames) para os pixels na posição
(0,0), a segunda os valores de S e a terceira de V. Este processo é feito para
todos os conjuntos de pixels até (w,h). O próximo passo do algoritmo é obter o
histograma de cada uma das imagens e por fim montar um modelo de fundo. A
apresentação do artigo descreve a continuação do algoritmo de forma muito confusa
e não foi possível implementá-lo por completo.
3
- Mediana
Este algoritmo calcula a
mediana de cada um dos pixels na fase
de treinamento a fim de obter um modelo de fundo que possa ser subtraído do
frame a ser classificado. Ou seja, cada pixel x
de um novo frame de entrada Ii(X) deverá sofrer uma
segmentação em relação a mediana representadas por B(x) em relação à um
“threshold” qualquer t, respeitando a equação abaixo:
![]()
Os pixels que satisfaçam
a equação anterior devem pintados de branco, caso contrário deverão ser
pintados de preto. Segue abaixo uma figura com os resultados obtidos:

A janela source da
figura acima mostra a imagem original, a janela Median-Intermediate ilustra a aplicação
do algoritmo de mediana e a janela Median-Segmented mostra o contorno dos
objetos identificados na cena. A janela controls serve apenas como threshold do método e a janela
Background é o modelo de fundo que esta sendo utilizado.
Para que novos elementos
da cena que permanecessem parados por muito tempo fossem incorporados ao modelo
de background, conseguido na fase de
treinamento, foi implementado uma adaptação da seguinte forma:
|
double scale = 0.0015; ref = cvGet2D( _imgMedian, y, x ); ref.val[0] = scale * src.val[0] +
( 1.0 - scale ) * ref.val[0]; ref.val[1] = scale * src.val[1] +
( 1.0 - scale ) * ref.val[1]; ref.val[2] = scale * src.val[2] +
( 1.0 - scale ) * ref.val[2]; cvSet2D( _imgMedian,
y, x, ref ); |
Com
isso o modelo de fundo é atualizado de forma gradativa, dando maior importância
para o plano de fundo obtido na fase de treinamento.
OpenCV
Outra
solução utilizada neste trabalho foi fazer a chamada da função do OpenCV
cvRunningAvg que tem como paramentros:
cvRunningAvg(IplImage*imgY,IplImage*imgU,doublealpha, IplImage* mask)
μt = αy + (1 – α) µt-1
0<α<1
y
– imagem corrente
µt-1- background antigo
μt – novo
background
Esta
função resolve parcialmente o problema de maneira simples e possui a
atualização gradual do modelo de fundo, porem não resolve o problema de noise e sombras. A imagem abaixo mostra
o algoritmo rodando. Pode ser observado na janela Running-Background a
incorporação gradativa do carro ao modelo de background. Caso ele fique muito
tempo parado ele fará parte do modelo de fundo.

Bibliografia:
[1]-
Manual do Opencv, visitado em 10/08/2007 http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf
[2]
– Tutorial desenvolvido para o curso, visitado em 10/08/2007 http://www.tecgraf.puc-rio.br/~malf/opencv
[3]
– Motivação e algoritmos desenvolvidos na área, visitado em 12/08/2007 http://www.tecgraf.puc-rio.br/~malf/tese/mov_apres.ppt
[4]
– Introdução e teoria sobre o trabalho, visitado em 10/08/2007 http://www.tecgraf.puc-rio.br/~malf/tese/mov_doc.pdf
[5]
- Filho, Edson Costa de Barros Carvalho., Modelagem, Aplicações e
Implementações de redes Neurais. Anais da IV Escola Regional de Informática da
SBC Regional Sul, 21 a 27 de abril de 1996. Páginas 36 -
53.
[6] - S. Indupalli and M. A.
Ali and B. Boufama, A Novel Clustering-Based Method
for Adaptive Background Segmentation, CRV '06: Proceedings of the The 3rd Canadian Conference on
Computer and Robot Vision (CRV'06)