No post do primeiro ensaio com a câmera Manta já havia sido feita uma primeira abordagem do algoritmo de detecção da bolinha. O algoritmo utilizado naquela ocasião fazia a subtração da imagem atual com uma imagem modelo e depois o resultado era submetido a outras duas operações: equalizar histograma e suavização de imagem. É claro que até esse ponto o algoritmo ainda não é capaz de detectar a bolinha, o que está sendo feito na verdade é o condicionamento da imagem para que no passo seguinte ocorra uma análise capaz de diferenciar a bolinha do restante da imagem.
Dos conceitos utilizados no primeiro algoritmo apenas a ideia da subtração permaneceu, e junto com ela passou a ser utilizada a operação de limiar (ou threshold). A figura abaixo ajuda a entender o conceito do limiar.
Limiar binário |
Na operação de limiar cada pixel da imagem é testado isoladamente, e se o valor de um determinado pixel for maior ou igual ao valor de limiar, então ele será substituído pelo valor máximo e caso contrário, será substituído pelo valor mínimo. Este tipo de limiar é conhecido como limiar binário, pois o resultado deste processamento gera uma imagem binária, ou seja, com apenas duas cores, no caso: preto e branco.
Atualmente o condicionamento da imagem é realizado conforme o fluxograma abaixo.
Fluxograma do algoritmo de condicionamento da imagem |
Observação: a operação subtração retorna o módulo da subtração, ao invés da subtração propriamente dita.
A sequência de imagens abaixo mostra a imagem modelo, a imagem atual e a imagem resultante, respectivamente. O valor utilizado para o limiar foi de 90, sendo que cada pixel da imagem varia de 0 a 255.
Imagem modelo |
O conceito utilizado para identificar a bolinha consiste em varrer toda a imagem em busca de um quadrado contendo todos os pixels brancos e área inferior à área da bolinha. A bolinha, em uma imagem sem qualquer tipo processamento, tem um raio de aproximadamente 9 pixels, por isso a área escolhida para o quadrado foi de 6x6 pixels, ou 36 pixels². O raio da bolinha pode variar conforme o zoom ajustado na lente, no entanto, acredita-se que a variação não seja significativa a ponto de ser necessário alterar a área do quadrado.
No vídeo abaixo é possível ver o algoritmo em funcionamento. O círculo rosa indica aonde o algoritmo acredita ter encontrado a bolinha, isso significa que nesta área - a que foi marcada com o círculo rosa - existem um ou mais quadrados brancos de 6x6 pixels. Uma vez que os quadrados foram encontrados, o ponto onde a bolinha possivelmente está localizada, em relação ao campo da mesa, é determinado através do cálculo do centro de massa de todos os quadrados.
Pelo que se vê no vídeo conclui-se que o algoritmo funciona muito bem, pois foi possível encontrar a bolinha em quase 100% das vezes em que ela está presente na imagem. Mas apesar do bom funcionamento do algoritmo existe uma situação problemática: quando um outro objeto, no caso uma mão, aparece na imagem o reconhecimento da bolinha fica prejudicado. Todavia, esse fato não foi visto como um problema, pois no momento do jogo real isso não deverá ocorrer.
Certamente a característica mais importante do algoritmo é a sua simplicidade que reflete em um baixo tempo de processamento, que no caso do projeto PeboTron é de vital importância, dado que ele é um sistema de tempo real. O tempo de processamento poderá ser minimizado mais ainda se for aplicada uma técnica conhecida como região de interesse, que inclusive é um dos recursos da câmera Manta G-032.
Por fim, tendo conhecimento das coordenadas da bolinha, calculada em cada imagem adquirida, será possível calcular sua trajetória e estimar onde o goleiro deverá estar posicionado para efetuar a defesa.