SEGMENTAÇÃO DE IMAGENS APLICADA A JOGOS Thiago Peres ATAIDE; Renata Corrêa PIMENTEL Faculdade de Engenharia de Sorocaba RESUMO O presente trabalho apresenta um estudo sobre a área da computação gráfica com foco na segmentação de imagens e sua aplicação a jogos, mostrando que é possível desenvolver um software onde o jogador exerce controle utilizando o próprio corpo frente a uma câmera. Computação gráfica; segmentação de imagens; jogos. Introdução Computação gráfica, de acordo com Gonzalez e Woods (2000), é a área da computação que manipula conteúdo visual. É definida por Gomes e Velho (2003) como um conjunto de métodos e técnicas para relacionar dados e imagens. A computação gráfica pode ser dividida em quatro grandes áreas: a modelagem geométrica, que descreve estruturas de dados geométricos; a síntese de imagens, que transforma dados em imagens; a análise de imagens, que transforma imagens em dados; e o processamento de imagens, que recebe, transforma e produz imagens. Petrou e Bosdogianni (1999) afirmam que a segmentação de imagens representa uma área de pesquisa importante do processamento de imagens. Segmentar consiste em verificar cada ponto da imagem para dividila em regiões que correspondem a objetos ou partes de objetos. Essas regiões são formadas por pontos que contém características comuns, como cor, por exemplo, indicando que formam um mesmo objeto ou parte. O objetivo da segmentação de imagens é extrair informações da imagem de entrada para formar uma imagem de saída que contenha menos informações, mas que essas informações sejam mais relevantes do que todo o conteúdo descartado. A segmentação de imagens possui diversas aplicações práticas, como equipamentos de tomografia, cirurgia guiada por computador, localização de objetos em imagens de satélite, radares de trânsito e reconhecimento facial. Uma área que ainda explorou pouco as diversas possibilidades que a segmentação de imagens pode oferecer é a de jogos. Segundo Marques (2006), o crescente desenvolvimento dos jogos fez com que o jogador deseje não ficar preso ao teclado ou controlador. Para aumentar a interatividade e imersão, o futuro dos jogos está em oferecer maior controle ao jogador, diminuindo a necessidade de apertar botões para utilizar formas mais intuitivas de controlar o jogo. Uma dessas formas é a interação através de uma câmera, que adquire a imagem do jogador para que seus movimentos controlem o jogo. O trabalho tem como objetivo o estudo da segmentação de imagens e sua aplicação em jogos através do desenvolvimento de uma aplicação onde o jogador exerce controle sobre uma aeronave utilizando o próprio corpo, inclinando seus braços abertos, que representam as asas da aeronave, para movimentá-la na tela. O artigo está organizado da seguinte maneira: inicialmente são apresentados os fundamentos de segmentação de imagens, seguidos pela abordagem do processo de segmentação de imagens por subtração de fundo. Em seqüência, o desenvolvimento da aplicação é detalhado, seguido dos testes realizados para chegar às conclusões. Fundamentos de Segmentação de Imagens Segundo Pratt (2001), a segmentação de imagens consiste na divisão de uma imagem em regiões de atributos similares, indicando que eles formam um objeto ou uma mesma parte de um objeto. Os atributos básicos para segmentação são a diferença de tons em imagens monocromáticas e a diferença dos componentes de cores em imagens coloridas. Bordas de objetos também são consideradas um bom artifício para realização da segmentação. Para Gonzalez e Woods (2000), a segmentação subdivide uma imagem em suas partes ou objetos constituintes. Para Russ (1998), a divisão da imagem ocorre em apenas duas regiões: o plano de fundo e o plano de frente, que normalmente consiste na área de interesse da imagem, o que faria o processo de segmentação se concentrar em apenas uma característica e descartar todas as demais. Quando é escolhida uma característica para ser utilizada em um processo de segmentação de imagens, ela deve atender a dois critérios: “ser de fácil identificação” e “permitir a diferenciação entre vários tipos de superfícies” (BELLON, 1997). Gomes e Velho (2003) definem a segmentação como um tipo de processamento de imagens, recebendo uma imagem como entrada e fornecendo outra imagem na saída. Mas, conforme Pratt (2001) relata, a segmentação, como forma de processamento de imagens, é amplamente utilizada como parte de uma operação maior, a análise de imagens. Nesse caso, as regiões de propriedades comuns na imagem são isoladas pela segmentação e então analisadas individualmente com algum objetivo específico. Em um processo de segmentação de imagens não há limite determinado para parar (GONZALEZ; WOODS, 2000). O nível até o qual essa subdivisão da imagem deve ser realizada depende do problema que está sendo resolvido, ou seja, a segmentação deve parar quando os objetos de interesse na aplicação tiverem sido isolados. Por exemplo, em aplicações de aquisição autônoma aérea de alvos terrestres, o interesse reside, entre outras coisas, na identificação de veículos em uma estrada. O primeiro passo é a segmentação da estrada na imagem, seguida da segmentação dos elementos de tamanhos correspondentes a veículos em potencial. Não se deve realizar segmentação abaixo dessa escala, tampouco além dos limites da estrada. Em geral, a segmentação é uma das tarefas mais complexas em processamento de imagens. Esse passo determina o eventual sucesso ou fracasso na análise, pois enquanto um bom resultado na segmentação favorece o sucesso no reconhecimento, o contrário também é verdadeiro. Existem diversas técnicas de segmentação de imagens, mas não existe um método único que seja funcional para todas as aplicações (PRATT, 2001). Podem ser citados como exemplos de técnicas tradicionais: a limiarização, que separa os pontos da imagem em dois grupos de acordo com um limiar; o crescimento de regiões, que agrupa pontos com características semelhantes; e a detecção de bordas, que identifica mudanças bruscas entre pontos vizinhos. Em alguns casos, a melhor forma de aplicação da segmentação de imagens foge dos meios tradicionais. Um dos meios não tradicionais, a subtração de fundo, foi escolhida para utilização no presente trabalho devido a suas características apresentadas a seguir. Segmentação de Imagens por Subtração de Fundo Segundo Forsyth e Ponce (2002), para a detecção de objetos em movimento em uma cena com fundo estático, pode-se utilizar o método da subtração de fundo, desde que se tenha uma imagem inicial do ambiente sem a presença dos objetos a identificar, o que constitui o fundo. A idéia da subtração de fundo é subtrair da imagem atual uma imagem inicial de referência e considerar que qualquer ponto que não pertença à primeira imagem (fundo), é de interesse. Dessa forma, é possível utilizar o método em planos de fundo não uniformes, o que o torna abrangente quanto aos ambientes de utilização. Horprasert, Harwood e Davis (2000) explicam que o algoritmo deve comparar cada ponto da imagem atual com o ponto de mesma posição na imagem inicial e classificá-lo como fundo ou objeto em movimento. Para desconsiderar pequenas mudanças da imagem, como a compensação automática da iluminação que as câmeras fazem, deve ser utilizada uma tolerância, que define quão diferente o ponto deve ser na imagem atual para que não faça parte do fundo. A figura 1 mostra a segmentação de imagens por subtração de fundo, com a imagem do fundo na esquerda, a imagem atual no meio e o resultado da segmentação na direita. Figura 1 – Segmentação de imagens por subtração de fundo Aplicação O trabalho visa o desenvolvimento de um jogo onde o usuário exerce controle sobre uma aeronave utilizando o próprio corpo, inclinando seus braços abertos, que representam as asas da aeronave, para movimentá-la na tela enquanto passa por dentro de anéis para ganhar pontos. A aplicação foi desenvolvida utilizando a linguagem C# e a biblioteca gráfica OpenGL. Seu funcionamento é um ciclo de quatro atividades: a imagem é adquirida, a imagem adquirida é segmentada para extrair o jogador, a imagem segmentada é analisada para identificar a posição dos braços do jogador e a aeronave no jogo é movimentada de acordo com a posição identificada dos braços. A figura 2 mostra um ciclo de execução da aplicação. Figura 2 – Ciclo de execução da aplicação Com a imagem adquirida através da câmera, a aplicação realiza a segmentação de imagens por subtração de fundo. Para fazer a comparação entre os pontos são utilizados seus componentes de cor RGB (vermelho, verde e azul). A figura 3 mostra o algoritmo de segmentação de imagens por subtração de fundo, onde “fundo” representa a imagem de fundo previamente adquirida, “imagem” representa a imagem atual, e “jogador” representa o resultado da segmentação onde os pontos identificados como fundo são marcados em branco e os identificados como jogador em preto. para cada ponto ‘i’ na horizontal da imagem para cada ponto ‘j’ na vertical da imagem rf = componente vermelho do fundo[i,j] gf = componente verde do fundo[i,j] bf = componente azul do fundo[i,j] ri = componente vermelho da imagem[i,j] gi = componente verde da imagem[i,j] bi = componente azul da imagem[i,j] diferença = |rf - ri| + |gf - gi| + |bf - bi| se diferença < tolerância jogador[i,j] = cor branca fim se senão jogador[i,j] = cor preta fim senão fim para fim para Figura 3 – Algoritmo de segmentação de imagens por subtração de fundo Com a imagem segmentada, é possível analisá-la para identificar a posição dos braços do jogador. O tamanho das imagens utilizadas é de 160 por 120 pontos, portanto o braço do jogador deve ser encontrado entre o ponto 0 e 119 de altura, e nas faixas laterais que vão do ponto 0 a 39 do lado direito e 120 a 159 do lado esquerdo, pois na faixa do meio considera-se que está o tronco do jogador. Procura-se os braços a partir da borda dos dois lados, para localizar a altura máxima e mínima, que serão sempre as mais próximas das extremidades da imagem. Se o braço não for encontrado nessa faixa de 40 pontos de cada lado, considera-se que ele está abaixado, com altura 0. O primeiro ponto preto encontrado na busca é considerado a extremidade do braço do jogador. A figura 4 mostra o algoritmo de análise da imagem para identificação da posição dos braços. para i = 0 até 39 com incremento 1 para j = 119 até 0 com decremento 1 se jogador[i,j] = cor preta esquerda = j interrompe para fim se fim para fim para para i = 159 até 120 com decremento 1 para j = 119 até 0 com decremento 1 se jogador[i,j] = cor preta direita = j interrompe para fim se fim para fim para Figura 4 – Algoritmo de análise da imagem para identificação da posição dos braços Com a posição dos braços encontrada, resta fazer a aeronave se movimentar de acordo com ela, definindo um deslocamento lateral e um ângulo de inclinação para a aeronave. O deslocamento lateral ocorre acumulando o movimento da aeronave nessa iteração à sua posição no eixo X. Já o ângulo de inclinação não é cumulativo, é determinado a cada instante a partir da posição dos braços na iteração atual. Se o braço esquerdo está mais alto que o direito, a aeronave deve se deslocar para a direita, o que significa um incremento em sua posição no eixo X e um ângulo de inclinação positivo. Se o braço direito está mais alto que o esquerdo, a aeronave deve se deslocar para a esquerda, o que significa um decremento em sua posição no eixo X e um ângulo de inclinação negativo. A figura 5 mostra o algoritmo de determinação do movimento da aeronave no jogo. se esquerda > direita se esquerda - direita < 60 x = x + 0.01 fim se senão x = x + 0.02 fim senão ângulo = + (esquerda - direita) / 2 fim se senão se direita - esquerda < 60 x = x - 0.01 fim se senão x = x - 0.02 fim senão ângulo = - (direita - esquerda) / 2 fim senão Figura 5 – Algoritmo de determinação do movimento da aeronave no jogo Com a posição da aeronave determinada, os objetos do jogo são desenhados na tela, finalizando um ciclo de execução que se repetirá novamente a partir da aquisição da próxima imagem do jogador. No jogo, o jogador deve controlar a aeronave para passar entre os anéis e ganhar pontos. À medida que avança, o intervalo entre os anéis diminui, exigindo movimentos mais rápidos e precisos. A figura 6 contém uma imagem do jogo. Figura 6 – Imagem do jogo Testes Foram realizados testes supervisionados com mais de trezentos jogadores em ambientes variados. Os ambientes de teste incluíram planos de fundo uniformes e não uniformes, com iluminação forte e fraca. Os testes mostraram que, independente do plano de fundo, em um ambiente com boa iluminação é possível conseguir uma boa resposta dos movimentos desejados no jogo, com a aeronave se movendo de acordo com a posição dos braços do jogador, atingindo assim o objetivo do trabalho. Em um ambiente mal iluminado, porém, a identificação pode falhar. Os jogadores habituais que participaram dos testes mostraram-se empolgados com essa forma de controlar o jogo, até então desconhecida pela maioria, e conseguiram controlar a aeronave instantaneamente. Entre os participantes não familiarizados com videogames, a maioria também conseguiu controlar a aeronave desde o início, o que não costuma acontecer com jogos controlados de forma tradicional, que trazem uma curva de adaptação e aprendizado maior para realizar o mesmo procedimento. Conclusões O presente trabalho apresentou uma aplicação que permite ao usuário controlar uma aeronave utilizando o próprio corpo, inclinando seus braços, que são identificados através da captura, segmentação e análise de sua imagem. A aplicação foi construída sobre a base de um algoritmo de segmentação de imagens por subtração de fundo que, a partir de uma imagem inicial do plano de fundo, é capaz de extrair o usuário das imagens subseqüentes para identificar a posição de seus braços. O propósito do trabalho foi a demonstração de como é possível desenvolver uma interface corporal com jogos através de uma câmera, utilizando computadores convencionais e câmeras acessíveis, sem a necessidade de equipamentos e marcadores no corpo do usuário ou utilização restrita à ambientes específicos. Jogos controlados de forma mais interativa e imersiva possuem grande poder de atração tanto sobre jogadores habituais quanto sobre aqueles que não são familiarizados com videogames. A interface de fácil acesso é atrativa a pessoas de todas as idades, e evita o sedentarismo normalmente atrelado aos videogames, estimulando o movimento na hora de jogar. O presente trabalho é bom exemplo prático de como a segmentação de imagens pode ser utilizada em aplicações variadas. A utilização de dispositivos de captura de imagens em outros tipos de software ou aparelhos eletrônicos poderia tornar sua utilização mais simples e justificaria pesquisas em interfaces digitais que não requerem dispositivos intermediários de interação. Em videogames, ela pode evoluir e mudar a forma de jogar. Pesquisas futuras envolvendo o presente trabalho podem ser realizadas para permitir maior controle sobre o jogo, possibilitando ao jogador definir altura e velocidade da aeronave e, ainda, identificar gestos que correspondem a ações, como atirar um míssil em um jogo de caça. A representação gráfica pode ser aperfeiçoada, com a utilização de um modelo de aeronave mais complexo, efeitos e texturas para aumentar o realismo. Referências Bibliográficas BELLON, Olga R P. Imagens de Profundidade: Segmentação e Representação por Superfícies Planares. Campinas: Universidade Estadual de Campinas, 1997. 180p. FORSYTH, David A; PONCE, Jean. Computer Vision: A Modern Approach. 1.ed. Upper Saddle River: Prentice Hall, 2002. 720p. GOMES, Jonas; VELHO, Luiz. Fundamentos da Computação Gráfica. 1.ed. Rio de Janeiro: IMPA, 2003. 603p. GONZALEZ, Rafael C; WOODS, Richard E. Processamento de Imagens Digitais. 1.ed. São Paulo: Edgard Blücher, 2000. 528p. HORPRASERT, Thanarat; HARWOOD, David; DAVIS, Larry S. A Robust Background Subtraction and Shadow Detection. Computer Vision Seminar, 1. 2003. 6p. MARQUES, Renato. O Futuro do Entretenimento. 2006. Disponível em: <http://www.universiabrasil.net/materia/materia.jsp?materia=12693>. Acesso em: 02 dez. 2006. PETROU, Maria; BOSDOGIANNI, Panagiota. Image Processing: The Fundamentals. 1.ed. New York: John Wiley & Sons, 1999. 354p. PRATT, William K. Digital Image Processing. 3.ed. New York: John Wiley & Sons, 2001. 758p. RUSS, John C. The Image Processing Handbook. 3.ed., Raleigh: CRC Press, 1998. 771p.