• Nenhum resultado encontrado

4.2 Acelerando o processamento do método SGM

4.2.2 Arquitetura Proposta

4.2.2.1 Fluxo de processamento de disparidade em diagonal

O processamento do custo em um pixel de uma determinada linha da imagem acontece quando uma das FIFOS Onchip despacha um pixel para a FIFO LUT, e a partir desta FIFO os dados são ajustados e enviados para o módulo AD.

O despacho dos pixels de cada linha a partir da FIFO Onchip para a FIFO LUT é controlado pelo módulo Controlador de Leitura da FIFO e a ordem de despacho segue o fluxo mostrado na Figura 49.

De acordo com este fluxo, o módulo divide a imagem em 𝑁𝑠 conjuntos de linhas dado

por 𝑁𝑠 = 𝐻/𝑁𝑟, onde H é altura da imagem e 𝑁𝑟 é o número de linhas que serão pro-

cessadas serialmente). Em cada conjunto de linhas o processamento acontece serialmente em diagonal, e em cada posição 𝑁𝑑, valores de disparidades são processados. Como pode

ser observado, o despacho dos pixels das linhas seguintes, dentro do mesmo conjunto 𝑓 de linhas a serem processadas, são separados por dois pixels horizontais em relação ao pixel da linha anterior. Por exemplo, entre o processamento de C1 e C2, os pixels A1 e B1

já foram processados. Isto é feito para resolver a dependência de custo, disponibilizando com antecedência os custos de caminhos quando o sistema precisar calcular os custos das linhas seguintes.

Figura 49 – Ordem de processamento dos custos de caminho dos pixels na imagem

Este espaçamento entre linhas dá a conotação em diagonal ao fluxo de processamento dos custos de caminho. Assim, o módulo Controlador de Leitura da FIFO primeiro des- pacha três pixels da primeira linha (A1, B1 e C1) para depois despachar o primeiro pixel da segunda linha C2, Em seguida, despacha três pixels da segunda linha para poder des- pachar o primeiro da terceira linha E3 e assim por diante. Este processo é realizado para todas as linhas dentro do mesmo conjunto de linhas e é chamado de etapa de desali-

nhamento dos pixels. Nesta etapa este módulo, espera o tempo necessário para resolver

as dependências quando for processar o próximo pixel da mesma linha da imagem. Este tempo é, na verdade, a quantidade de ciclos de relógio para processar e armazenar um valor do custo no módulo de custo de caminho. Por exemplo, o despacho do pixel B1 só pode acontecer depois que o processamento de A1 já tenha sido finalizado e o resultado

armazenado. Em relação aos pixels cujas dependências já tenham sido resolvidas, estes já podem ser despachados para processamento. Por exemplo, ao despachar o pixel C1, no próximo ciclo, o pixel C2 já pode ser despachado pois os pixels A1 e B1 já foram calculados. No entanto, D1 não pode ser despachado porque o pixel C1 ainda não foi finalizado.

Depois de estabelecidos os espaçamentos entre todas as linhas, então o módulo Con-

trolador de Leitura da FIFO despacha para processamento do algoritmo SGM os pixels de

todas as linhas em diagonal ao longo de toda a imagem, passando por todos os conjuntos

𝑓 = 1, 2, ...𝑁𝑠. Na Figura 49 o processamento normal acontece a partir da diagonal G1

-> G2 -> G3 -> G4. Ao longo de toda a imagem, quando uma determinada linha do conjunto é finalizada, o processamento da próxima diagonal começa na próxima linha do próximo conjunto e em seguida volta para o conjunto anterior para finalizar o restante das linhas. Por exemplo ao terminar a diagonal I1 -> I2 -> I3 -> I4 a próxima diagonal será J1 -> J2 -> J3 -> J4, com J1 localizado no próximo conjunto de linhas 𝑓 = 2, mas J2, J3 e J4 ainda são do conjunto de linhas anterior, 𝑓 = 1, como pode ser visto na Figura 49. De maneira fluida, o processamento passa de um conjunto de linhas para o outro. Essa mudança de conjunto é transparente para o módulo Controlador de Leitura da FIFO como mostrado na Figura 49 pois os pixels das linhas referente aos próximos conjuntos já estão disponíveis nas FIFOS Onchip correspondentes. Por exemplo, na sequência de acesso J1 -> J2 -> J3 -> J4, J1 já está na primeira FIFO embora este pixel seja do próximo conjunto de linhas da imagem.

Figura 50 – Ordem de processamento dos custos de caminho dos pixels na imagem do ponto de vista do módulo

É importante reiterar que, tão logo os pixels a partir das câmeras já estejam disponí- veis, o processamento do custo de caminho já pode ser realizado. O módulo que verifica esta disponibilidade é o Controle de Leitura da FIFO, que só despacha o pixel a partir da FIFO Onchip para FIFO Lut se existir algum pixel disponível na FIFO Onchip, caso con- trário, este módulo espera até que o pixel esteja disponível. A disponibilidade é verificada através da flag de vazio da FIFO Onchip, que quando existe algum pixel armazenado na FIFO, esta flag tem valor zero. Por exemplo, quando o módulo precisar processar o pixel

C2 certamente este pixel ainda não estará disponível pois a câmera ainda está despa- chando os pixels da primeira linha. Assim o módulo espera até que este pixel seja inserido na FIFO Onchip e a flag fique zero para poder despachá-lo.

Figura 51 – Comunicação entre pixels de linhas diferentes na computação do custo de caminho de cada linha

Outro ponto importante, que será também abordado na arquitetura do módulo de custo de caminho, é a comunicação entre os pixels de linhas vizinhas para a computação do custo de caminho. Na arquitetura proposta para computação do custo de caminho, esta comunicação é realizada por meio de FIFOs que armazenam os custos de caminho de cada direção separadamente e que serão utilizados para computação do custo de caminho da linha seguinte como mostrado na Figura 51. Ao garantir as condições para armazenamento do custo de caminho na FIFO que leva em consideração as condições de borda de cada direção, os custos de caminho estarão na ordem correta para acesso na linha seguinte.

Dois pontos importantes sobre as FIFOs para comunicação entre linhas que precisam ser observados. O primeiro ponto é a necessidade de armazenar o custo de caminho de todos os pixels da última linha de um dado conjunto para o início do processamento do próximo conjunto de linhas seriais. Isto é devido ao processamento do próximo conjunto acontecer apenas depois que o processamento do conjunto anterior tenha sido finalizado. O segundo ponto é sobre o tamanho da FIFO para armazenamento do custo entre linhas.

Como o processamento de todas as linhas acontece com o espaçamento de três pixels entre linhas, os resultados de custo que foram armazenados na FIFO serão consumidos em no máximo depois de três pixels de processamento, o que exige espaços para armazenar o resultado de três custos de caminho nas FIFOs intermediárias. Questões de tamanho de FIFO serão detalhados na seção seguinte.