The Vision Subsystem

lens

As mentioned earlier, during the course of the project we will further deepen the explanation given on each of the blocks shown in the “Overview”, and today it’s the Vision Subsystem turn.

A possible functioning for the vision subsystem is shown below:

Overview_Vision

The ambient light is received on each of the cameras, which translates the distribution of incoming light into its sensor in an array of pixels (for more information on the digital representation of images visit: http://www.stanford.edu/class/cs101/image-introduction.html). This matrix of pixels undergoes a process called thresholding, which acts much like a filter, accepting the color values you choose and rejecting the others. It is then generated a binary image, where pixels that have passed the color test are given value ‘1 ‘and all other pixels receive the value ‘0’.

Two threshold examples are given below:

thresholding_example_thresholded

The left image is the original, and the right one is the image after a threshold, where only a few shades of blue are accepted. The pixels shown in white have value ‘1 ‘.

In the ping-pong scenario we would see something like this:

threshold_pingpongball

We will use a thresholding to isolate the ball from the rest of the image (therefore only the accepted orange hues consistent with the ball and lighting conditions will be accepted).

After the binary image has been generated it is then used by an algorithm to estimate the coordinates (in pixels) of the center of the ball. Joining the coordinates of where the ball was found in the image from camera 1 (Xc_1, Yc_1) with the ones from camera 2 (Xc_2, Yc_2) we can reconstruct the 3D scene, and then find the three-dimensional position of the ball (Stereo Vision block).

In each block discussed above exists an error insertion (quantization error of the cameras, inaccuracy in the output of the image recognition algorithm, imprecision in the positioning of cameras, etc …) and so the final measure of three-dimensional position of the ball ( Xn, Yn, Zn) is intrinsically corrupted with random errors, (hence comes the subscript ‘n’ in each of the coordinates – meaning noise). That’s where the last block of the drawing, the Kalman filter, comes in. To give us a better estimate of the position of the ball it also takes into account the physical description of its movement, and in each iteration it makes a “weighted average” from where the previous subsystem thinks the ball is and where the physical model predicts that the ball should be. The output of the Kalman filter is also the output of the vision subsystem.

————————————————————————————————————————————————————————————

Tradução para o português:

Como mencionado anteriormente, ao longo do decorrer do projeto iremos aprofundar mais a explicação dada sobre cada um dos blocos mostrados no post “Overview”, e hoje é a vez do subsistema de visão.

Um possível funcionamento para o subsistema de visão está desenhado à seguir:

Overview_Vision

A luz do ambiente é recebida em cada uma das câmeras, que traduz a distribuição de luz recebida em seu sensor em uma matriz de pixels (para mais informações sobre a representação digital de imagens acesse: http://www.stanford.edu/class/cs101/image-introduction.html). Essa matriz de pixels passa por um processo chamado thresholding, que atua praticamente como um filtro, deixando passar os pixels com valores de cor desejados e rejeitando os outros. É gerada então uma imagem binária, onde os pixels que passaram no teste de cor recebem valor ‘1’ e todos os outros pixels recebem valor ‘0’.

Dois exemplos de threshold são dados à seguir:

thresholding_example_thresholded

À esquerda está a imagem original, e a direita está a imagem depois de passar por um threshold, onde somente alguns tons de azul são aceitos. Os pixels mostrados em branco tem valor ‘1’.

No caso do ping-pong teríamos o seguinte threshold:

threshold_pingpongball

Utilizaremos o threshold para isolar a bolinha do resto da imagem (portanto só serão aceitos tons de laranja condizentes com a bolinha e as condições de iluminação).

Após a imagem binária ter sido gerada ela é passada por um algoritmo que estima as coordenadas (em pixels) de onde está o centro da bolinha. Juntando-se as coordenadas em que a bolinha foi achada na imagem da câmera 1 (Xc_1 , Yc_1) com as da câmera 2 (Xc_2 , Yc_2) é possível reconstruir a cena 3d, para então encontrar a posição tridimensional da bolinha (Sistema de visão estéreo mostrado na figura).

Em cada um dos blocos discutidos acima existiu uma inserção de erro (erro de quantização das câmeras, imprecisão no algoritmo de reconhecimento de imagem, imprecisão no posicionamento das câmeras, etc…) e por isso a medida final da posição tridimensional da bolinha (Xn , Yn, Zn) está intrínsicamente corrompida com erros aleatórios, (daí que vem o subscrito ‘n’ em cada um das coordenadas – noise). É aí que entra o último bloco do desenho, o filtro de Kalman. Para nos dar uma estimativa melhor da posição da bolinha ele leva em conta também a descrição física do movimento dela, sendo que em cada iteração ele faz uma “média ponderada” entre, onde o subsistema anterior acha que a bolinha está, e onde o modelo físico prevê que a bolinha deveria estar. A saída do filtro de Kalman é também a saída do subsistema de visão.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s