Na fase de segmentação utilizamos o algoritmo de segmentação Virtual Wall definido na Seção 2.8.3 para segmentar as mãos como sendo quaisquer objetos que ultrapassem a barreira virtual definida a frente do usuário.
Para definir a posição desta barreira virtual precisamos definir uma distância conhecida do usuário a câmera que pode ser calculada a cada novo frame possibilitando assim que a barreira virtual esteja sempre a frente do usuário mesmo que ele se movimente.
Duas possibilidades serão exploradas aqui: Uma seria utilizar a distância da câmera até a face do usuário para definir a posição da barreira virtual, que não pode ser adotada devido a problemas de instabilidade no rastreamento da face; Outra seria calcular a distância do centro de massa do usuário até a câmera.
Nosso sistema adota a segunda opção por problemas encontrados no rastreamento da face. Ambos serão descritos nas subseções a seguir.
3.8.3.1 Reconhecimento e rastreamento da face
Para utilizar a face do usuário como referência para a barreira virtual, propusemos o seguinte algoritmo:
1. Detectar a face utilizando a imagem colorida da câmera RGB do Kinect, utilizar a região que contém a face como entrada para o algoritmo de rastreamento;
2. Obter no mapa de profundidade a localização da região que contém a face detectada e calcular a média de profundidade dos pixels da face, definindo a distância da face até o Kinect;
3. A cada nova imagem capturada recalcular a distância com a nova posição da face.
Para detectar a face utilizamos o algoritmo de detecção de objetos proposto por Viola e Jones [VIOLA et al., 2001] que utiliza Haar-Like Features para encontrar regiões que podem conter uma face. Este algoritmo pode ser executado a cada novo
frame, porém dependendo dos parâmetros utilizados e da resolução da imagem seu custo computacional pode inviabilizar o requisito de tempo real deste processo.
Para contornar este problema utilizamos um algoritmo de rastreamento por características em tempo real chamado Camshift (Continuous Adaptative Mean Shift) [BRADSKI, 1998]. Este método utiliza Mean Shift e Histogram Backpropagation no espaço de cor HSV para encontrar a região que contém o padrão de entrada.
O problema deste algoritmo de rastreamento (tracking) é que ele se baseia nas características de cor da face e no contexto da Libras oclusões entre as mãos e a face são recorrentes. Quando este tipo de oclusão ocorre o algoritmo pode deixar de rastrear a região da face e passar a rastrear a mão, como exemplificado na Figura 22. Na figura a) mostramos o resultado da estimação após detecção da face e início do Camshift. Em b), c) e d) mostramos exemplos de problemas de estimação que ocorreram após o movimento da mão sobre a face. Ao término da oclusão o Camshift considera a mão como parte da região em b) e c) e opta erroneamente por eliminar a face e rastrear somente as mãos em d).
Figura 22 - Problemas no rastreamento da face utilizando Camshift. a) estimação correta; b), c) e d) falhas de estimação após movimentar a(s) mão(s) sobre a face.
Outro problema está na necessidade de uma iluminação controlada no ambiente onde o sistema for utilizado, pois este algoritmo captura a imagem da câmera RGB do Kinect. Esta câmera é de baixa resolução e possui um digitalizador CMOS (Complementary Metal–Oxide–Semiconductor) de baixo custo que gera
ruídos de digitalização, além de todos os seus parâmetros (tempo de exposição, balanceamento de cores, ganho, etc) serem constantemente ajustados, sem a possibilidade de controle por software, para melhorar a qualidade da imagem, ocasionando assim vários problemas já discutidos no Capítulo 2.
Devido à falta de confiabilidade deste algoritmo em caso de oclusões, optamos por não utilizá-lo no sistema final.
3.8.3.2 Centro de Massa do usuário
Através do PrimeSense NITE podemos obter a máscara de pixels ( correspondente a cada usuário a frente do dispositivo e assim podemos calcular o Centro de Massa ( ) do usuário da seguinte forma:
∑
∑ ∑
Onde retorna a profundidade do pixel p e (função presente no framework da PrimeSense) retorna a conversão da posição discreta do pixel na imagem para a posição deste ponto no mundo real, definindo assim < > como um ponto no espaço 3D correspondente ao centro de massa do usuário.
A fórmula de definição do algoritmo Virtual Wall deve ser alterada para passar a ser calculada dinamicamente, utilizando o centro de massa do usuário, da seguinte forma:
{
Onde é a coordenada do centro de massa correspondente à profundidade e é um deslocamento fixo para eliminar parte da face ou do torso que podem vir a transpassar a barreira virtual.
Utilizar o centro de massa do usuário torna a estimação da distância da barreira virtual invariante a problemas de oclusão, mas o centro de massa é suscetível a variação devido a constante movimentação dos braços durante a execução dos gestos da Libras.
Para solucionar este problema recalculamos o centro de massa eliminando desta vez todos os pixels do usuário que ultrapassaram a barreira virtual posicionada com o centro de massa previamente calculado. A Figura 23 mostra os pixels do usuário em amarelo e os pixels a serem eliminados do cálculo em branco. Sendo assim obtemos um centro de massa sem as partes movéis da cena que no contexto dessa aplicação são os braços do usuário.
Figura 23 - Máscara de pixels do usuário (amarelo) sem as partes móveis (branco) que ultrapassaram a barreira virtual.
A Figura 24 mostra uma comparação da coordenada z do centro de massa com e sem partes móveis. Estes dados foram coletados com o usuário aproximando e afastando as duas mãos do Kinect repetidamente. Pode-se notar que o (vermelho) com as partes móveis evidencia os movimentos do usuário apresentando subsequentes picos de distância. Já o novo algoritmo (azul) que remove as partes móveis foi bem mais tolerante a estes movimentos.
Figura 24 - Gráfico da variação da coordenada Z do Centro de Massa (CM) do usuário com e sem partes móveis.
1050 1100 1150 1200 1250 1300 1350 1400 Pr o fun d id ad e (m m ) Tempo