Segmentação de Escrita
Ricardo Costa
[email protected]
Objetivo
• Receber um vídeo de entrada
• Separar:
– Fundo
– Objetos permanentes (escrita)
– Objetos transitórios
• Exibir apenas a escrita na saída
• Em tempo real
Implementação
• Feito com OpenCV
• Treinamento
– Detecta o fundo
– Fundo = média dos N primeiros quadros do vídeo
• Segmentação
– Assume que a escrita permanece estática por um
tempo maior que os objetos em transição
– Captura apenas as diferenças estáticas em relação
ao fundo
Implementação
• Guarda 25 quadros anteriores numa fila
– Buffer circular (vetor) funcionando como fila
– Podem ser quadros espaçados no tempo (ex.
captura 1 a cada 5 quadros de entrada)
– Para cada canal de cor:
1. Insere novo pixel na fila. Se for igual ao que foi
removido da fila, não faz mais nada.
2. Substitui pixel antigo no buffer de cálculo de mediana.
3. Calcula mediana com algoritmo otimizado.
Algoritmos de Mediana
• Não é necessário ordenar!
– Basta o elemento do meio estar em sua posição
correta
– Algoritmo de Wirth
• 25x mais rápido que usar qsort()
• Outros algoritmos
– Quick select
– Método de Torben
Algoritmo Melhor Ainda
• Versões para 3, 5, 7, 9 ou 25 elementos
• Faz o número mínimo de operações para se
obter a mediana daqueles elementos
• Citado no livro Graphic Gems
typedef float pixelvalue ;
#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); }
#define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }
pixelvalue opt_med5(pixelvalue * p)
{
PIX_SORT(p[0],p[1]) ; PIX_SORT(p[3],p[4]) ; PIX_SORT(p[0],p[3]) ;
PIX_SORT(p[1],p[4]) ; PIX_SORT(p[1],p[2]) ; PIX_SORT(p[2],p[3]) ;
PIX_SORT(p[1],p[2]) ; return(p[2]) ;
}
Segmentação
Se abs(medianaR - fundoR) > threshold
ou abs(medianaG - fundoG) > threshold
ou abs(medianaB - fundoB) > threshold Então
outR = 255 - abs(medianaR - fundoR)
outG = 255 - abs(medianaG - fundoG)
outB = 255 - abs(medianaB - fundoB)
Senão
outR = outG = outB = 255
• Otimizado para quadro branco ou negro
– Gera o maior contraste possível para estes casos
Resultado
Download

Apresentacao - PUC-Rio