• Nenhum resultado encontrado

Acelerando algoritmos de baixo nível em visão robótica com hardware reconfigurável

N/A
N/A
Protected

Academic year: 2021

Share "Acelerando algoritmos de baixo nível em visão robótica com hardware reconfigurável"

Copied!
51
0
0

Texto

(1)UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE. U NIVERSIDADE F EDERAL DO R IO G RANDE DO N ORTE C ENTRO DE T ECNOLOGIA P ROGRAMA DE P ÓS -G RADUAÇÃO EM E NGENHARIA E LÉTRICA. Acelerando Algoritmos de Baixo Nível em Visão Robótica com Hardware Reconfigurável. Gianna Rodrigues de Araújo. Orientador: Prof. Dr. Luiz Marcos Garcia Gonçalves. Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Engenharia Elétrica da UFRN (área de concentração: Engenharia de Computação) como parte dos requisitos para obtenção do título de Mestre em Ciências.. Número de ordem PPgEE: M298 Natal, RN, fevereiro de 2011.

(2)

(3) Acelerando Algoritmos de Baixo Nível em Visão Robótica com Hardware Reconfigurável. Gianna Rodrigues de Araújo. Dissertação de Mestrado aprovada em 18 de fevereiro de 2011 pela banca examinadora composta pelos seguintes membros:. Prof. Dr. Luiz Marcos Garcia Gonçalves (orientador) . . . . . . . . . . . DCA/UFRN. Profa . Dra . Raquel Esperanza Patiño Escarcina . . . . . . . . . . . . . . . . . . UCSP, Perú. Prof. Dr. José Alberto Nicolau de Oliveira . . . . . . . . . . . . . . . . . . . . . DEE/UFRN. Prof. Dr. Rummenigge Rudson Dantas . . . . . . . . . . . . . . . . . . . . . . . . . ECT/UFRN.

(4) Aos meus pais e a minha família NatalNet..

(5) Agradecimentos. Ao meu orientador, Prof. Dr. Luiz Marcos Garcia Gonçalves, sou grata pela orientação. Ao Prof. Dr. José Alberto Nicolau de Oliveira, pelo apoio e orientação. Aos colegas Julio Cesar e Renato Gardiman pelas sugestões para minha dissertação. Aos demais colegas de pós-graduação, pelas críticas e sugestões. À minha família, amigos e namorado pelo apoio durante esta jornada. Ao CNPq, pelo apoio financeiro..

(6) Resumo. Um desafio que ainda resta no campo da robótica é como fazer um robô reagir em tempo real a estímulos visuais. Técnicas tradicionais de visão robótica usadas para resolver este problema ainda são muito caras tomando muito tempo quando se usa processadores convencionais. Algoritmos simples com filtragem em imagens ou operações de morfologia matemática podem tomar muito tempo de execução. Pesquisadores têm implementado algoritmos de processamento de imagens em dispositivos de hardware com alto grau de paralelismo, visando diminuir o tempo de processamento nos algoritmos, com bons resultados. Usando técnicas de processamento de imagens implementadas em hardware e um sistema orientado a plataforma que usa o processador Nios II, propomos um método que usa processamento em hardware e programação baseada a eventos, para simplificar sistemas baseados em visão, enquanto que, ao mesmo tempo, conseguimos acelerar algumas partes dos algoritmos usados..

(7) Abstract. A challenge that remains in the robotics field is how to make a robot to react in real time to visual stimulus. Traditional computer vision algorithms used to overcome this problem are still very expensive taking too long when using common computer processors. Very simple algorithms like image filtering or even mathematical morphology operations may take too long. Researchers have implemented image processing algorithms in high parallelism hardware devices in order to cut down the time spent in the algorithms processing, with good results. By using hardware implemented image processing techniques and a platform oriented system that uses the Nios II Processor we propose an approach that uses the hardware processing and event based programming to simplify the vision based systems while at the same time accelerating some parts of the used algorithms..

(8) Sumário. Sumário. i. Lista de Figuras. iii. Lista de Tabelas. iv. 1 Introdução 1.1 Definição do problema . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Principais Contribuições . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1 2 3 4. Lista de Símbolos e Abreviaturas. 1. 2 Estado da Arte. 5. 3 Embasamento teórico 3.1 Dispositivos lógicos Programáveis . . . . . . . . . . . . . . . . 3.1.1 Processadores Digitais de Sinais . . . . . . . . . . . . . 3.1.2 Dispositivos Lógicos Complexos Programáveis . . . . . 3.1.3 A Tecnologia FPGA - Field Programable Gate Array . . 3.2 Programação para FPGA . . . . . . . . . . . . . . . . . . . . . 3.2.1 Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Estudo de Caso: Visão Computacional . . . . . . . . . . . . . . 3.3.1 Algoritmos de Visão Computacional baseado em eventos 3.3.2 Correlação e Filtragem . . . . . . . . . . . . . . . . . . 3.3.3 Transformada de Hough . . . . . . . . . . . . . . . . . 3.3.4 Filtro Média . . . . . . . . . . . . . . . . . . . . . . . 3.3.5 Filtro de Sobel . . . . . . . . . . . . . . . . . . . . . . 3.4 Sistema orientado a plataforma . . . . . . . . . . . . . . . . . . 4 Implementações 4.1 A Tecnologia Field Programable Gate Array 4.2 Simulink . . . . . . . . . . . . . . . . . . . 4.3 Incorporando dispositivos com o SOPC . . 4.4 Quartus II . . . . . . . . . . . . . . . . . . 4.5 NIOS IDE II . . . . . . . . . . . . . . . . . i. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . . . .. . . . . .. . . . . . . . . . . . . . .. 8 8 9 9 10 10 11 12 13 14 16 17 18 19 19. . . . . .. 21 22 24 24 25 25.

(9) 5 Resultados 5.1 Filtro Genérico . . . . . . . . . . . . . 5.2 Mapa de Atenção . . . . . . . . . . . . 5.2.1 Filtro de Sobel . . . . . . . . . 5.2.2 Filtro Média . . . . . . . . . . 5.2.3 Filtro Gaussiano . . . . . . . . 5.2.4 Filtro Laplaciano do Gaussiano 5.2.5 Integração dos resultados . . . .. . . . . . . .. 31 31 32 33 33 34 35 35. 6 Conclusão 6.1 Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 37 38. Referências bibliográficas. 39. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . ..

(10) Lista de Figuras. 3.1 3.2 3.3 3.4 3.5. Estrutura comum dos sistemas de Visão Computacional . . . . Sistema de tratamento de evento do teclado . . . . . . . . . . Módulo de visão modificado . . . . . . . . . . . . . . . . . . Resultado da adição do hardware de visão baseado em eventos Arquitetura comum a sistemas orientados a plataforma . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. 13 15 16 17 20. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8. Arquitetura da plataforma desenvolvida . . . . . . . . . . Vista superior da DE2 . . . . . . . . . . . . . . . . . . . . Esquema da placa FPGA DE2 (diagrama de blocos) . . . . Projeto do Simulink . . . . . . . . . . . . . . . . . . . . . Projeto do NMAC (numerical multiplier and accumulator) Projeto do Mapa Atencional . . . . . . . . . . . . . . . . SOPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . quartus . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. . . . . . . . .. 21 22 23 26 27 28 29 30. 5.1 5.2. FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo . . . . . . . . . . . . . . . . . . . . . . . . Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . Imagem original, Imagem obtida por filtro puramente em software e Imagem obtida pelo dispositivo . . . . . . . . . . . . . . . . . . . . . . . . .. 32. 5.3 5.4 5.5. iii. . . . . . . . .. . . . . . . . .. 33 34 35 36.

(11) Lista de Tabelas. 5.1. Comparação dos resultados usando hardware e puramente em software . .. iv. 31.

(12) Capítulo 1 Introdução. Visão Computacional é uma das áreas da pesquisa científica que cresceu muito nos últimos anos. As técnicas de Visão Computacional estão presentes nos mais diversos campos de aplicação, tais como robótica, automação industrial, sistemas de segurança, cartografia, realidade virtual, e animação, entre outros, e até em campos não tão convencionais tais como medicina, televisão, teatro e dança telemática. Dentro deste universo, é grande o número de aplicações que necessitam de resposta do sistema em tempo real, como exemplo temos as aplicações em visão robótica e dança telemática. Em geral, algoritmos de Visão Computacional são computacionalmente custosos, além de sua alta complexidade, exigindo geralmente uso de grande quantidade de memória, além do tempo substancial de processamento, o que torna difícil, a obtenção de uma resposta em tempo real, para algumas aplicações. Por exemplo, um desafio que ainda permanece nas pesquisas em visão robótica é como construir um sistema que permita a um robô reagir em tempo real a estímulos visuais providos pelo seu ambiente. Um dos principais problemas está relacionado à utilização de algoritmos de visão por computador tradicionais e sua implementação em processadores convencionais, o que os torna caros computacionalmente. Ou seja, operações com alto grau de paralelismo, tidas como de mais baixo nível necessárias nas etapas iniciais desses algoritmos, tais como filtragem de imagens implementada geralmente pelo operador de convolução, ou mesmo operações mais simples de processamento de imagem, tal como o uso de operadores de morfologia matemática, podem demorar muito tempo em um processador seqüencial, conseqüentemente atrasando outras etapas do fluxo de processamento do sistema. Uma solução seria a utilização de imagens pequenas para compensar o tempo alto gasto pelas técnicas convencionais de processamento de imagem, mas isso pode ser inútil para algumas aplicações, como por exemplo, de reconhecimento de padrões onde detalhes podem ser cruciais. A fim de reduzir a maior parte do tempo gasto nos algoritmos de processamento de imagem, pesquisadores os têm implementado em arquiteturas de hardware específico, que possuem dispositivos de hardware com alto grau de paralelismo, obtendo bons resultados Exemplos de tais implementações podem ser vistos na Arquitetura Sonic [Haynes et al. 2000], no Multiplicador de matriz em Processamento de vídeo [Haynes & Cheung 1998] e alguns outros trabalhos que serão discutidas mais adiante neste documento. Apesar de prover respostas em tempo real, essas arquiteturas são conhecidas por terem um valor.

(13) CAPÍTULO 1. INTRODUÇÃO. 2. comercial que as torna inviável quando o quesito principal é minimizar o custo monetário do sistema. Um exemplo também monetariamente caro encontra-se no uso de placas gráficas gráficas específicas que permitem sua programação em linguagens como CUDA, mais conhecidas como Unidades de Processamento Gráfico (do Inglês Graphics Programming Unity - GPU) [Pharr & Fernando 2005]. Placas do tipo GPU estão sendo cada vez mais utilizadas até mesmo na execução de outras tarefas que não sejam específicas da área de processamento gráfico, mas com alto grau de complexidade, tal como execução massiva de cálculos, problemas de otimização, enter outras. Porém, convém ressaltar novamente o custo de tais placas, na casa dos milhares de dólares, para um bom desempenho.. 1.1 Definição do problema Atualmente, é possível encontrar pesquisas das mais diversas em visão robótica, voltadas a aplicações como por exemplo o auxilio à educação [Barrios-Aranibar et al. 2006] ou o mapeamento de áreas [de et al. 2010, Herinque et al. 2009]. Em muitas dessas aplicações, a tomada de decisão a partir das respostas obtidas pelo sistema de visão computacional dos robôs é um fator primordial. Como visto acima, geralmente, os algoritmos de visão computacionais são custosos computacionalmente, por possuírem uma alta complexidade, ocupando assim muito tempo do processador. Isto aliado à espera de resultados para as tomadas de decisões constituem um dos problemas a ser resolvido para fazer com que robôs respondam a estímulos visuais em tempo real. Ou seja, considerando que o sistema executa outras tarefas, estas serão afetadas com um eventual retardo, diminuindo os rendimentos do sistema como um todo. Em face da complexidade e morosidade, vários estudos vêm sendo realizados visando otimização de algoritmos de visão computacional. Alguams dessas pesquisas verificam a eficácia do desenvolvimento de algoritmos de Visão Computacional em hardware, utilizando uma implementação mista (hardware / software) [de Souza & Bianchi 2002]. Em nosso contexto, uma implementação mista é aquela que combina o poder do processamento direto em hardware dedicado com a facilidade de abstração provida pelo nível de software. Ou seja, o que for passível de implemenmtação em hardware sendo controlado dinamicamente pelo software. Uma vez que é complicado mudar o hardware, o máximo possível de flexibilidade deve ser provido em software, sempre tentando minimizar esta flexibilização. Ainda existe um forte nicho de pesquisa quando nos referimos a implementações mistas, uma vez que não existe, ainda, uma definição precisa do que seja esse paradigma de implementação. Estudos que vão desde a utilização de portas de comunicação (paralela ou serial) para acesso externo de computadores até soluções utilizando processadores embarcados com a tecnologia FPGA (Field Programmable Gate Array) tentam resolver o problema com implementações totalmente disjuntas. Alem do problema na definição em si das implementações mistas, ainda existe a forte aversão à utilização de hardware reprogramável pela dificuldade de integração dos mesmos com as linguagens de propósito gerais. Muitos estudos e documentações precisam ser feitos nessas áreas para que novos pesquisadores possam ingressar nessa problemá-.

(14) CAPÍTULO 1. INTRODUÇÃO. 3. tica sem ter tantos problemas com a configuração e utilização dos artefatos e ferramentas inerentes a essa área.. 1.2 Principais Contribuições A contribuição do presente trabalho é o desenvolvimento de um sistema orientado a plataforma usando FPGA no qual agregamos dispositivos que são algoritmos implementados usando programação mista. A idéia é simplificar um sistema de visão robótica tomado como estudo de caso e, ao mesmo tempo, acelerar algumas partes dos algoritmos utilizados. A utilização de uma implementação mista faz com que os algoritmos mais custosos de visão computacional tenham uma significativa diminuição de tempo de processamento, mantendo a mesma precisão. Com isto, esperamos atender os requisitos de algumas aplicações que necessitam de uma resposta em tempo real. Desenvolvemos um conjunto de artefatos visando otimizar alguns algoritmos de Visão Computacional tidos como de baixo nível (etapas iniciais do processamento visual) e, com isso, pudemos contribuir para que outros projetos do Laboratório Natalnet possam ser efetivados. A seguir, destacamos nossas comtribuições mais específicas. Idealizamos e formalizamos a arquitetura que permitiu a implementação mista (software/hardware) de algoritmos de Visão Computacional de baixo nível. Provemos uma plataforma visando integração dos dispositivos (algoritmos e técnicas) desenvolvidos. Cada novo algoritmo pode ser considerado como um novo dispositivo. Assim,etapas posteriores podem ser também implementadas usando este conceito e simplesmente acopladas à plataforma desenvolvida. Realizamos de testes de performance (tempo x precisão) na plataforma, para verificação de funcionamento em tempo real da arquitetura mista desenvolvida. Esses testes serviram de base para validação do modelo proposto e seus resultados foram publicados em veículos relevantes da nossa área. O número de pesquisadores na área de Sistemas Embarcados envolvendo hardware ainda é relativamente pequeno. Assim, com esse trabalho pudemos contribuir na área de pesquisa com o uso de hardware, dentro da UFRN, podendo esse conhecimento ser passado à frente para que outros pesquisadores possam enveredar nessa área. Resumidamente, como contribuições práticas, implementamos algoritmos de visão de baixo nível em hardware e realizamos comparações entre as implementações em software e em hardware. Ainda, comparamos principalmente o tempo de processamento das implementações puras e da implementação mistas, analisando o ganho computacional. Incorporamos os dispositivos desenvolvidos (algoritmos implementados) na plataforma. E, respaldando nossa idéia, conseguimos publicar os principais resultados do presente trabalho em congressos e conferências da área [de ARAÚJO et al. 2009, de ARAÚJO et al. 2010]..

(15) CAPÍTULO 1. INTRODUÇÃO. 4. 1.3 Aplicações O presente trabalho está relacionado diretamente a outros projetos do Laboratório Natalnet, sendo os algoritmos desenvolvidos deverão ser usados em projetos de monitoramento usando robôs, e de mapeamento interno e externo usando também robôs. Os robôs Galatéia(Pioneer), utilizada no projeto GTMV [Dantas et al. 2009] e o Helicóptero NatalGIS, utilizado no projeto de mesmo nome [Herinque et al. 2009], ambos em execução pelo laboratório NatalNet-DCA, podem ter parte do seu sistema de Visão Computacional embarcado e conseqüentemente otimizado. Com isso, o processamento ocioso pode ser usado para outras etapas ou atividades, mais conhecidas como técnicas de pay-load (técnicas que podem ser de processamento on board). Tendo em vista a necessidade de uma resposta mais rápida por parte dos sistemas e os problemas encontrados para conseguir isso, foi que surgiu a idéia de implementarmos algoritmos de Visão Computacional diretamente em dispositivos de hardware programável, no caso, usando FPGA. O uso de hardware dedicado torna possível a paralelização (real e também aparente) dos algoritmos, o que vem a diminuir a sua complexidade. O FPGA permite mais uma flexibilidade, devido à possibilidade de re-configuração. Também, possuem capacidade de processamento maior do que os processadores de sinais digitais (DSP - Digital Signal Processors) específicos e micro-controladores convencionais baseados em arquiteturas mais simples como micro-processadores e processadores ARM e outros. Ressaltamos que a nossa proposta pode ter um cunho mais geral, mas aqui foi desenvolvida com base em um estudo de caso visando encontrar uma solução para a aceleração de algoritmos de visão computacional, que são geralmente usados em aplicações robóticas, em tempo real. A idéia principal é usar o paralelismo, a flexibilidade e a estrutura simples do hardware como meios para reduzir o tempo de processamento. Propomos e desenvolvemos um sistema orientado a plataforma, em que dispositivos são desenvolvidos e alocados a uma plataforma, sendo usados apenas quando necessários. Estes dispositivos são implementações em hardware dos algoritmos de visão computacional..

(16) Capítulo 2 Estado da Arte. Embora tenha se estabelecido uma das área da pesquisa científica muito recentemente se comparada com outras áreas mais tradicionais, com apenas pouco mais de 3 décadas de existência, a área de Visão Computacional é bastante difundida atualmente, sendo as aplicações de suas técnicas e métodos bem diversificadas. Inúmeras pesquisas recentes podem ser encontradas visando o desenvolvimento de novos métodos e técnicas mas também são realizados trabalhos visando otimizar os algoritmos existentes. A busca por tornar os sistemas de visão menos custosos computacionalmente, ou seja, rápidos, e sem perder a qualidade dos dados são temas de muitas pesquisas no mundo todo. Alguns trabalhos explorando implementações em hardware podem ser encontradas na literatura [Haynes et al. 2000, Haynes & Cheung 1998, de Souza & Bianchi 2002, RILLO 1989, de Almeida Nobre 2009, Fredi 2001]. Aqui apresentamos os sistemas que tem um relacionamento mais direto com o nosso visando melhor entender nossa proposta. A arquitetura do sistema Sonic [Haynes et al. 2000] é complexa, permitindo ao usuário configurar o hardware em tempo real, oferecendo, por exemplo, melhor desempenho em filtragem de imagens através da implementação mais eficiente de multiplicadores e acumuladores (convolução) e outras operações. A abordagem é semelhante à nossa no sentido de que um sistema de hardware e/ou software é usado para acelerar o processamento de imagem digital. Porém, o trabalho não prevê um sistema como um todo, com etapas posteriores sendo processadas, como ocorre na área de visão computacional. Sua aplicação nesta área poderia ser viabilizada, tornando o processamento de imagem mais rápido e economizando tempo para outros métodos de processamento de imagem. No trabalho de Haynes [Haynes & Cheung 1998], é implementada uma solução de hardware apenas para acelerar a multiplicação de matrizes, o chamado "Multiplicador de Matriz de Processamento de Vídeo". A flexibilidade do multiplicador de matriz implementada pode tornar 25 vezes mais rápido que uma solução de software. Nas aplicações de visão robótica, a eficiência do sistema de visão computacional é fator decisivo. Um exemplo ocorre no futebol de robôs. Neste caso, numa visão genérica, o sistema geral é composto de um subsistema de visão (percepção), um subsistema de decisão (planejamento) e um subsistema que executa fisicamente (atuação) tarefas, ou seja, move os robôs no campo executando determinadas ações como chute, drible, e passe, entre outras. Neste caso, o subsistema de visão deve fornecer ao subsistema de decisão informação abstraída a partir de dados adquiridos de imagens que são base para o seu planejamento. Sendo assim, é desejável que a reposta do subsistema de visão computacional.

(17) CAPÍTULO 2. ESTADO DA ARTE. 6. seja rápida, para que não afete o desempenho dos demais sistemas. Visando obter um melhor desempenho do sistema de visão computacional,o trabalho proposto por Souza e Bianchi [de Souza & Bianchi 2002] implementa técnicas de processamento de imagem em hardware, utilizando a linguagem de descrição de hardware VHDL. Basicamente, o objetivo principal do trabalho é acelerar a detecção da posição e orientação de objetos importantes no campo, tais como os robôs (colegas e oponentes) e a bola. No trabalho, eles implementam três módulos em hardware, o primeiro é responsável pela binarização da imagem, a partir de um valor limiar de cor. As regiões onde a cor está acima do limiar, é atribuído o valor 1 e as regiões abaixo do limiar é atribuído o valor 0. O segundo módulo é responsável pela extração de bordas da imagem, usando um algoritmo tradicional de detecção de arestas [RILLO 1989]. O terceiro e último módulo é responsável pela vetorização da imagem. Dada uma imagem binária com os contornos definidos, esse módulo determina as regiões da imagem que possuem contornos fechados. Com o uso de hardware, o sistema consegue disponibilizar os dados de saída, após passar pelos três módulos, em cerca de 1,54 ms. Os mesmos módulos, quando implementados em linguagem C e ambiente Linux, necessitam de 21,5 vezes mais tempo do que os implementados em hardware, uma vez que levaria 33ms para os dados estarem disponíveis na saída. A busca por padrões em um imagem é outra tarefa que possui alto custo computacional. Quando o padrão procurado não é invariante a determinadas características, esse custo se torna muito mais elevado. Diversas aplicações necessitam fazer uso da busca por padrões, principalmente em tarefas de vigilância e monitoramento, onde reconhecimento e identificação de objetos pontuais na cena devem ser características essenciais do sistemas. No trabalho de Pires [de Almeida Nobre 2009], é implementado um módulo baseado no método Ciratefi, recentemente proposto [Kim & Araújo 2007a, Kim & Araújo 2007b]. Basicamente, o método realiza uma busca na imagem por uma dada máscara, sendo invariante aos aspectos RSTBC (rotação, escala, translação, brilho e contraste, na tradução do inglês). O processamento ocorre pela aplicação de três filtros em cascata, Cifi, Rafi e Tefi. Os três filtros são invariantes a translação e vão excluindo, sucessivamente, os pixels não pertencentes a imagem da mascára (padrão procurado). O primeiro filtro, Cifi, é invariante a escala e calcula a provavél escala do pixels candidatos ao padrão. O segundo filtro, Rafi, tem como entradas os pixels resultantes do primeiro filtro e é invariante a rotação. Após sua aplicação, é calculado e atribuido para os pixels resultantes, o ângulo de rotação mais adequando. O terceiro filtro, Tefi, é invariante a brilho e contraste e tem como entrada os pixels resultantes do segundo filtro. Ele é o responsável por encontrar a posição mais provável da máscara na imagem dada. Neste trabalho, o filtro Cifi foi implementado em hardware. Com essa implementação em hardware, eles melhoram o tempo de 7 s para 1,367 ms, o que provê um desempenho excelente já que o tempo está abaixo do necessário para sistemas críticos de tempo real, conseguindo alta performance e baixo custo computacional. Em seu trabalho, Fredi [Fredi 2001] propõe uma metodologia de desenvolvimento de hardware e software utilizando soluções baseadas em FPGA’s, linguagem C e DSPs para a aceleração de sistemas de visão computacional. Como estudo de caso, é desenvolvida uma solução para localização e reconhecimento de placas com formato retangulares. A parte do software está localizada em um hardware DSP orientada ao controle do hard-.

(18) CAPÍTULO 2. ESTADO DA ARTE. 7. ware de uma placa FPGA. Sua metodologia divide o processamento de imagem em 4 etapas (entrada, pré-processamento, processamento e saída) que pode mudar dependendo da aplicação. A parte do pré-processamento é composta por filtragem da imagem, detecção de bordas e extração de formas (retangulares). Essa etapa é realizada utilizando hardware e software. A etapa de processamento da imagem é dividida em dois blocos, um para a extração de feições e outro para a etapa de classificação. A etapa de extrações de feições foi implementada em software pois a utilização de pontos flutuantes, não seria possivel por causa da capacidades das placas FPGAs utilizadas. Já a etapa de classificação foi feita em hadware, utilizando o paralelismo e permitido a obtenção de alta velocidade de processamento. A principal diferença com o nosso trabalho é que a proposta de Fredi é baseada em um sistemas dedicado em FPGA enquanto que o nosso usa uma arquitetura orientada à plataforma, o que facilitaria o adicionamente de novos componentes a nossa plataforma e nos dar uma maior flexibilidade..

(19) Capítulo 3 Embasamento teórico. Em uma análise mais genérica, nosso trabalho abrange as áreas de processamento digital de imagens, visão computacional e sistemas embarcados usando FPGA. Assim, um melhor entendimento sobre as tecnologias utilizadas no nosso trabalho bem como um embasamento teórico a respeito das ferramentas matemáticas necessárias para o bom entendimento do resto do trabalho se faz necessário. Uma dessas novas tecnologias refere-se aos dispositivos lógicos programáveis. Esses dispositivos, apesar de executarem a maior parte de suas operações em hardware, possuem algum elemento de software que permite realizar a sua programação permitindo execução de tarefas diferentes, no mesmo hardware, usando programações diferentes. Porém, convém ressaltar que, uma vez programados, não permitem alteração de sua programação durante a execução. Geralmente a memória de armazenamento do programa é pequena e sua linguagem de baixo nível não é trivial. Sendo assim, linguagens mais acessíveis surgem naturalmente para sua programação, derivando diversos tipos de hardware para esses dispositivos. Neste contexto, surgem os dispositivos de hardware reconfigurável, mais conhecidos como Field Programmable Gate Arrays (FPGA), que se tornam populares, pois permitem construção e configuração de componentes de hardware de forma declarativa, possibilitando desenvolvimento e estudo de diversas construções de hardware de forma barata e relativamente simples. Para programar tais dispositivos, a linguagem de descrição de hardware conhecida, como VHDL, é usada, que será detalhada mais à frente. Essa linguagem foi utilizada no desenvolvimento de grande parte de nossos componentes de hardware e foi escolhida por sua versatilidade e por possuir uma grande e ativa comunidade de desenvolvedores. Com ela, conseguimos implementar em hardware programável todas as ferramentas matemáticas utilizadas para nossas aplicações. Serão abordados principalmente algoritmos de visão computacional, porém alguns conceitos de processamento digital de imagens são necessários, endereçados a seguir.. 3.1 Dispositivos lógicos Programáveis Um PLD 1 é, basicamente, um componente eletrônico utilizado para se construir circuitos digitais. O PLD foi originalmente projetado baseado em lógica configurável e 1 PLD. - Programmable Logic Device.

(20) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 9. usando flip-flops, que são, unidades básicas de circuitos lógicos, ligados em conjunto com interconexão programável. Um PLD fornece funções específicas, incluindo dispositivo de interface, comunicação de dados, processamento de sinal, display de dados, calendário e operações básicas de controle, e quase todas as outras funções que um sistema de controle robusto deve ter. Assim, podemos entender o PLD como uma combinação de dispositivos logicos e de memória. A memória é usada para guardar o padrão que é dado ao chip durante a programação. Muitos dos métodos usados para armazenar dados no circuito integrado são adaptados para serem usados em PLDs. Isto Inclui: • SRAM • Células EPROM, EEPROM • Memória Flash Dentro dos dipositivos lógicos programáveis abordamos os três tipos mais utilizados nos trabalhos relacionados com o nosso, são eles DSP, CPLD e os FPGA.. 3.1.1 Processadores Digitais de Sinais Os DSP (Digital signal processors) são dispositivos construídos com microprocessadores especializados, especificamente projetados para processamento digital de sinais, desenvolvidos para serem utilizados em aplicações em tempo real. Os DSP também pode ser usados para executar cálculos de propósito geral, mas não são otimizados para essa função. Em comparação aos outros tipos de microcontroladores, os DSP possuem um maior poder de processamento. Tanto podem ser programados usando liguagem de baixo nível, assembly, como também em liguagem de mais alto nível, como "C"padrão.. 3.1.2 Dispositivos Lógicos Complexos Programáveis Os CPLD Complex Programmable Logic Devices são circuitos integrados (CI) que possibilitam executar aplicações para implementar hardware digital, tais como telefones celulares. Os CPLD podem suportar projetos significativamente maiores do que os dispositivos simples lógicos programáveis (SPLD), mas fornecem menos lógica do que os FPGA. Abaixo listamos algumas características dos CPLD. • Os CPLD não permitem configuração da sua memória volátil. A configuração externa da ROM (Random Access Memory) não é necessária, e os CPLD podem funcionar imediatamente após a inicialização do sistema. • Possuem grande número de portas disponíveis. Os CPLD têm tipicamente o equivalente a milhares de portas lógicas, permitindo a implementação de dispositivos de processamento de dados moderados. • Os CPLD possuem algumas disposições para lógica mais flexíveis do que expressões de soma de produtos, incluindo caminhos feedback complicados entre as células macro e a lógica especializada para implementar várias funções comumente usadas, tais como aritmética de inteiros..

(21) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 10. 3.1.3 A Tecnologia FPGA - Field Programable Gate Array Dispositivos FPGA implementam conexões entre vetores (arrays) lógicos e registradores que permitem, através de uma linguagem de descrição, que dispositivos de hardware sejam construídos e integrados. Dessa forma, é possível utilizar um dispositivo FPGA para aplicações de prototipagem ou teste a fim de produzir ou melhorar resultados de forma mais barata. É uma tecnologia muito utilizada na área acadêmica, pois facilita o o ensino de disciplinas como eletrônica, programação e arquiteturas híbridas. É também muito utilizado em pesquisas aplicadas da engenharia, pois facilita o desenvolvimento de dispositivos e protótipos. Um dispositivo FPGA, ao invés de estar restrito a uma função de hardware prédeterminada, permite que os recursos do seu programa e, consequentemente, as funções do produto possam ser modificados e adaptadas às novas normas. Ou seja, se necessário, o hardware pode ser reconfigurado, via software, para aplicações específicas, mesmo depois que o produto tenha sido instalado numa dada planta, daí o nome field-programmable. Pode-se usar um dispositivo FPGA para implementar qualquer função lógica que um circuito integrado de aplicação específica (ASIC) poderia realizar. Sua capacidade de atualizar, incluindo a funcionalidade de navegação, após, oferece vantagens para muitas aplicações. Ao contrário da geração anterior dos FPGA E/S (utilizando entrada e saída), hoje, os FPGA são compostos por várias combinações de SRAM embutidas configurávelmente, incluindo transceptores de alta velocidade, alta velocidade de entrada e saída (I/O) de blocos, lógica e roteamento. Especificamente, um FPGA contém componentes lógicos programáveis chamados elementos lógicos (LES) e uma hierarquia de interconexões reconfiguráveis que permitem que o LES possa estar fisicamente ligado. É possível configurar LES para executar funções complexas combinadas, ou apenas portas lógicas simples, como AND e XOR. Na maioria dos FPGA, os blocos lógicos também incluem elementos de memória, flip-flops, que podem ser simples ou mais blocos completos de memória. Entre as principais vantagens para se projetar e desenvolver com um FPGA podemos incluir: • • • •. Prototipagem rápida Tempo mais curto para o mercado Capacidade de reprogramar no campo para depuração Ciclo de vida do produto mais longo para reduzir o risco de obsolescência. 3.2 Programação para FPGA Para definir o comportamento do dispositivo FPGA, o usuário fornece instruções usando uma linguagem de descrição de hardware (HDL Hardware Description Language) ou um desenho esquemático. O uso de HDL é mais adequado para trabalhar com grandes estruturas, pois é possível especificá-los apenas numericamente ao invés de ter que desenhar cada pedaço à mão. No entanto, a entrada esquemática pode ser utilizada para facilitar a visualização de um projeto de sistema como um todo..

(22) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 11. Em seguida, utilizando uma ferramenta de automação de design eletrônico (EDA Electronic Design Automation), um netlist é gerado. O netlist é uma descrição logicamente equivalente consistindo apenas de primitivas lógicas elementares (AND, OR, NOT, flip-flops, etc) que estão disponíveis em uma tecnologia VLSI específica. O netlist pode ser configurado para a arquitetura real do FPGA, geralmente realizada por um software proprietário da empresa fornecedora do FPGA. O usuário irá validar o mapa, o local e os resultados da rota através da análise de tempo, simulação e outras metodologias de verificação. Uma vez que o design e processo de validação forem concluídos, o arquivo binário gerado (usando também software fornecido pela empresa do FPGA) é utilizado para reconfigurar o FPGA. As linguagens de descrição de hardware mais comuns são o VHDL e Verilog. Começamos descrevendo esta última.. 3.2.1 Verilog Verilog é uma linguagem de descrição de hardware usada para modelar sistemas eletrônicos. Verilog não deve ser confundida com VHDL, sendo esta mais comumente usada no projeto, verificação e implementação de chips de lógica digital, a nível de transferência de registos (RTL) da abstração. Ela também é usada na verificação de circuitos analógicos e de sinal misto. Linguagens de descrição de hardware como o Verilog diferem das linguagens de programação de software, porque incluem maneiras de descrever a propagação de tempo e as dependências do sinal (sensibilidade). Há dois operadores de atribuição, a atribuição de bloqueio (=), e atribuição de não-bloqueio (<=). A atribuição de não-bloqueio permite que os projetistas possam descrever uma atualização da máquina de estados sem a necessidade de declarar e usar variáveis de armazenamento temporário. Uma vez que estes conceitos fazem parte da semântica da linguagem Verilog, os designers podem escrever rapidamente as descrições dos circuitos de grande porte, de uma forma relativamente compacta e concisa. Quando foi introduzido na comunidade (1984), o Verilog representou um enorme aumento de produtividade para os projetistas de circuito que já estavam usando o software de captura esquemática e programas de softwares gráficos, especialmente escritos para documentar e simular circuitos eletrônicos. Os projetistas da linguagem Verilog queriam uma linguagem com sintaxe similar à linguagem de programação C, que já era amplamente utilizada no desenvolvimento de software de engenharia. Verilog é case-sensitive, tem uma base de pré-processamento (embora menos sofisticado do que a de ANSI C e C ++), e palavras-chave equivalentes de controle de fluxo tais como if e else, for, while, case etc, e possui compatibilidade com operadores de precedência. Um projeto Verilog consiste de uma hierarquia de módulos. Os módulos são encapsulados no projeto de forma hierárquica e se comunicam com outros módulos através de um conjunto declarado de portas de entradas e de saída de modo bidirecional. Internamente, um módulo pode conter declarações de variáveis (register, integer, etc), concorrente, declaração seqüencial e instâncias de outros módulos (sub-hierarquias). instruções seqüen-.

(23) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 12. ciais são colocadas dentro de begin/end do bloco e executadas em ordem seqüencial dentro do bloco. Mas os próprios blocos são executados simultaneamente, qualificando o Verilog como uma linguagem dataflow. O conceito de Verilog, de ’fio’, é composto por dois valores de sinal (4 estado: 1, 0, flutuante, undefined), e as forças (forte, fraca, etc). Este sistema permite a modelagem abstrata do sinal de linhas compartilhadas, onde vários fontes de unidade de uma rede comum. Quando o fio tem vários drivers, o valor do fio (legível) é resolvida por uma função da fonte de condutores e seus pontos fortes. Um subconjunto de instruções na linguagem Verilog são sintetizados. Os módulos Verilog que atendem a sintetização do estilo de codificação, conhecido como RTL (Register Transfer Level), pode ser realizado materialmente por software de síntese. Isto transforma a fonte Verilog em um netlist, uma descrição logicamente equivalente consistindo apenas de primitivos lógica elementar (AND, OR, NOT, flip-flops, etc) que estão disponíveis em uma específica tecnologia VLSI.. 3.2.2 VHDL A sigla VHDL é a abreviação de VHSIC Hardware Description Language (VHSIC é a abreviação de Very High Speed Integrated Circuits). VHDL é uma linguagem de descrição de hardware com foco em circuitos integrados de alta velocidade, que pode ser usada para modelar um sistema digital, desde uma simples porta lógica até um sistema digital completo. A necessidade de uma padronização de liguagem de descrição de hardware surgiu no Departamento de Defesa Americano. Por possuir vários fornecedores de CIs e cada um com sua própria liguagem, o departamento ficava preso a empresa fornecedora de CIs. Não sendo possível a continuação de um projeto por outra empresa, por não existir uma padronização de linguagem. Somente em 1986 o IEEE adotou a liguagem para padronização. Por causa da grande necessidade de padronizar linguagem, após a linguagem ter sido apresentada. O projetista pode usar três tipos de modelagens para implementar o sistema. Os três tipos são: o método de Fluxo de Dados, o método Comportamental (Behavioral), e o método Estrutural. No método de Fluxo de Dados o projetista define declarações Booleanas que são atribuídas a sinais. Essas declarações são executadas concorrentemente e são usadas para implementar funções Booleanas simples, que dependem de um ou vários sinais binários. O método Comportamental descreve os componentes por entradas e saídas. As declarações dentro de um processo são executadas consecutivamente e trabalham da mesma maneira que qualquer programa escrito em uma linguagem procedimental, como C . Dentro de um processo podemos usar estruturas de controles de fluxos, como if e else, for, while, case etc. No método Estrutural o projetista descrever os componentes em componentes mais primitivos. É usado para definir a interconexão lógica dos componentes de circuito. Os três tipo de modelagens podem fazer parte de um mesmo projeto. Cada parte de uma projeto pode ser utilizada a modelagem mais adequada..

(24) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 13. 3.3 Estudo de Caso: Visão Computacional A área de Visão Computacional (VC) surgiu recentemente, tendo sido estabelecida como uma das áreas da pesquisa científica. Hierarquicamente, podemos incluí-la como uma das sub-áreas da grande área de Ciência da Computação. Resumidamente, a área de VC usa, entre outras, técnicas de processamento de imagem, específicas da área, para extrair informação importante de imagens ou vídeos. Os resultados destas operações (informação codificada) são geralmente usados em fases posteriores de sistemas mais complexos, tais como os sistemas de monitoramento e vigilância. Técnicas de visão tradicionalmente usadas em computadores são desenvolvidas com o objetivo de dar apoio aos sistemas maiores que precisam de alguma informação advinda das imagens. A parte física de um sistema de Visão Computacional é geralmente composta de dispositivos de captura e digitalização de imagens (câmeras e placas capturadas) e de um computador que processa e retira a informação essencial a uma determinada tarefa. Esses sistemas podem estar acoplados a sistemas mais complexos, como por exemplo um sistema de controle de uma planta (termo usado na engenharia para representar a parte física de um sistema), como por exemplo um sistema de controle de vazão. A estrutura geral dos algoritmos de Visão Computacional tradicionais é mostrada na figura 3.1. Em primeiro lugar, na fase de aquisição, as imagens do ambiente de trabalho são adquiridas e transformadas em dados digitais. Em seguida, a imagem é processada através de algumas técnicas de processamento de imagem que extraem dados da imagem. Esses dados são considerados brutos e precisam ainda ser processados visando realçar determinadas feições ou características, de acordo com a aplicação desejada.. Figura 3.1: Estrutura comum dos sistemas de Visão Computacional O resultado (apenas dados relevantes) é processado novamente por outros métodos, visando extrair a informação essencial à realizaçõao da tarefa específica. Esses métodos de pós-processamento podem se utilizar de técnicas exatas ou de técnicas de Inteligência Artificial, não sendo esta etapa relevante ao escôpo de nosso trabalho. Por fim, o resultado (dados transformados em informação relevante) pode ser usado por um bloco específico.

(25) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 14. que finalmente realiza o trabalho para o qual o sistema foi concebido (apanhar um objeto, ativar uma válvula, prover o desvio de um obstáculo, ligar uma bomba, entre outras atividades físicas no mundo real). Algoritmos em hardware podem ser idealizados para executarem na fase de aquisição de imagens, utilizando o hardware para fornecer melhores imagens para a fase posterior de processamento de imagem, que, conseqüentemente, poderá necessitar de menos filtragem do que os exigidos por muitos algoritmos de visão de baixo nível. Claramente, vemos que uma grande parte do tempo de execução do sistema é dispendido na fase de processamento de imagem. Por exemplo, a realização de uma filtragem em imagens com 640x480 pixels pode demorar até centenas de milissegundos, dependendo da área ou do diâmetro do filtro. Isso pode ser um fator impeditivo em algumas aplicações. Por exemplo, considere um sistema de rastreamento que precisa seguir um determinado objeto em uma seqüência de imagens como a acima. Numa solução simples para este problema, a cada vez, o sistema precisa verificar toda a imagem à busca do objeto. Isto envolve realização de filtragens na imagem para extrair características (padrões) e verificar, para cada posição da imagem, se os padrões extraídos nesta posição batem com os padrões do objeto em questão (conhecido a priori), consequentemente determinando sua posição no quadro corrente. Se o objeto for encontrado, o sistema efetivamente consegue realizar o trabalho de rastreamento. Numa execução em tempo real, o problema é que o sistema precisa verificar toda a imagem em menos de 33 ms, a fim de ser capaz de restrear a 30 quadros por segundo (fps), sendo esta uma taxa de aquisição comum, para encontrar o objeto rastreado. A realização de filtragem na imagem toda certamente pode reduzir a velocidade de todo o sistema. Convém ressaltar que a extração de informação para uma dada análise geralmente toma menor tempo e algoritmos mais eficazes existem para resolver o problema mencionado.. 3.3.1 Algoritmos de Visão Computacional baseado em eventos Para entender melhor a aplicação da abordagem proposta no presente trabalho, vejamos o sistema de tratamento de evento de teclado, como mostrado na figura 3.2. O processador principal está executando algum outro trabalho quando uma determinada interrupção é ativada, dando o alerta de que um evento de teclado chegou na fila de eventos. Assim, o processador chama uma rotina pré-configurado para lidar com este evento. Essa rotina agora pode obter os parâmetros do evento e em seguida passar para outras aplicações que podem estar esperando por esse tipo de evento. Podemos inserir um sistema de visão computacional numa abordagem semelhante, como uma fonte de eventos, podendo de alguma maneira avisar o processador sobre a ocorrência de algum tipo de evento. Desta forma, podemos, por exemplo, modularizar a parte do bloco de processamento de imagem reduzindo o tempo de processamento de todo o sistema de visão computacional. A Figura 3.3 mostra como o sistema de eventos ficaria com um módulo de visão que pode processar eventos em imagens e avisar o processador que alguns eventos ocorreram. Com a nossa abordagem, os sistemas de visão computacional podem se tornar mais simples e mais rápido porque num hardware paralelo fica o processamento de imagem, e em.

(26) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 15. Figura 3.2: Sistema de tratamento de evento do teclado outro hardware o controle, a fim de gerar eventos, e apenas quando tais eventos ocorrem os métodos de processamento de imagem são chamados. Um problema com essa abordagem é a especialização do sistema, isto é, a definição de eventos de imagem pode mudar de uma aplicação para outra. Isto significa que o que é considerado um evento para um sistema de rastreamento, que tem que seguir uma bola em uma imagem, pode não ser considerado em outro sistema, tal como como um robô automatizado que está programado para evitar obstáculos. Isto significa que o sistema que é o processamento das imagens tem de ser reconfigurado com base na aplicação em que está sendo utilizado. Na arquitetura projetada, encontramos uma boa solução para este problema. Uma vez que estamos falando de soluções integradas de hardware e software, é fácil definir alguns dos parâmetros de hardware para o aplicativo antes de iniciar o trabalho, tornando o sistema flexível, aplicável a mais de um propósito, incluindo mais de um caso. A implementação de um módulo de eventos em um sistema de processamento de visão pode afetar diretamente o modelo apresentado na figura 3.1. Isso acontece porque o modelo dessa figura tem que bloquear o processador durante o tempo que o bloco de processamento de imagem está funcionando. Com a nossa abordagem, isso não acontece porque muitos dos processamento é feito em um módulo de hardware, em paralelo. Isto levou-nos a um outro modelo que é mostrado na figura 3.4. O bloco de hardware é apresentado como o antigo bloco de processamento de imagem. A diferença é que ele não precisa bloquear o processador, a fim de executar. Outro bloco que está conectado com o bloco de aquisição de imagem, chamado processamente de imagem específico, foi adicionado a fim de tornar o modelo mais genérico. Este bloco é necessário no caso de algoritmos novos ou experimentais de processamento que não são implementadas direto no módulo de hardware, mas necessários para execução do.

(27) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 16. Figura 3.3: Módulo de visão modificado sistema. Este pode ser o pior caso do sistema, quando ele funciona de forma semelhante ao primeiro modelo, mas ainda assim o nosso modelo é mais rápido porque ele poupa muito tempo de computação nos módulos de hardware. Alguns métodos e/ou técnicas que podem ser implementados segundo nosso modelo são descritos a seguir.. 3.3.2 Correlação e Filtragem A técnica conhecida como correlação é muito usada em algoritmos de visão computacional, geralmente quando se deseja verificar a similaridade entre padrões ou conjuntos de dados. Esta técnica pode ser implementada através do uso do operador matemático conhecido como convolução, em suas várias formas (minimização ou maximização). Geralmente, o modelo mais utilizado é a função de correlação cruzada normalizada, que pode ser facilmente derivada usando o teorema de Cauchy-Schuartz ou a desigualdade entre vetores [Anton & Busby 2003] e a média dos valores de cada conjunto de dados (template e região considerada na imagem). Neste modelo, a correlação é definida no intervalo de -1 a +1 , sendo que o máximo desta função significa a maior semelhança entre os dois padrões. A filtragem de imagens é outra técnica que também se utiliza do operador de convolução. Basicamente, a idéia é definir empiricamente os valores de uma máscara (filtro), com a qual a imagem é convoluída. Na prática, implementar a filtragem para toda a imagem é calcular, para cada posição, o produto interno entre dois vetores, um definido pelos valores de uma certa vizinhança da posição da imagem considerada e outro definido pelos valores dados pela máscara, num espaço cuja dimensão é definida pelo tamanho da máscara e da região da imagem, que devem ser o mesmo. Dependendo dos valores atribuídos a cada posição da máscara, o efeito da filtragem pode ser diferente. Operações geralmente conhecidas como "achar a média"(filtro média), "realçar arestas"(filtro gradiente),.

(28) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 17. Figura 3.4: Resultado da adição do hardware de visão baseado em eventos "suavizar"(filtro gaussiano), "achar texturas"(filtro laplaciano) podem ser implementadas através deste artifício. Então, podemos peceber que a convolução é um operador básico, que pode e deve ser implementado diretamente em hardware. A convolução é implementada computacionalmente através da multiplicação e acumulação (soma) dos valores dos pixels de uma imagem em uma determinada vizinhança, seja por uma máscara (filtragem) ou por um template (ou pequena região) de outra imagem ou modelo (correlação). Geralmente esta função possui um suporte local limitado, ou seja, a função é limitada a uma vizinhança pequena da imagem.. 3.3.3 Transformada de Hough A transformada Hough é uma técnica para extração de características de uma imagem. Inicialmente a transformada só detectava linhas, mas posteriormente passou a ser usada também para identificação de outras formas geométricas parametrizáveis. A idéia da transformada de Hough é transformar a imagem do espaço x,y para o espaço dos parâmetros que descrevem a curva que se deseja encontrar na imagem. Para isto, este espaço dos parâmetros é discretizado e representado na forma de uma matriz de inteiros, onde cada posição da matriz corresponde a um intervalo no espaço real dos parâmetros. Há várias parametrizações possíveis para o espaço de linhas. Hough usou a equação declive-intercepte, definida por y = a.x + b, como representação paramétrica de uma linha, o que conduziu a dificuldade prática de um espaço de parâmetro ilimitado para linhas que são paralelas ao eixo y. Como solução, é melhor utilizar coordenadas polares para a representação das linhas. Linhas poderiam ser completamente parametrizadas usando o comprimento, r , e a orientação, q, do vetor normal para a linha da imagem original (figura 3). Usando esta parametrização, todo o ponto (x,y) na linha satisfará a equação r.

(29) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 18. = x . cos ( q ) + y . sin ( q ). O algoritmo de Hough requer um acumulador de dimensão igual ao número de parâmetros desconhecidos na equação da família de curvas que são buscadas. Por exemplo, achar segmentos de linhas usando a equação y = ax + b requer achar dois parâmetros para cada segmento: a e b.As duas dimensões da matriz acumuladora para esta família correspondem aos valores ’quantizados’ para a e b. Assim, usando uma matriz acumuladora A, o procedimento de Hough examina cada pixel e calcula os parâmetros da curva (equação) especificada que passa pelo pixel. Caso esteja analisando uma imagem que não foi pré-processada com algoritmo de detecção de bordas, fato incomum na transformada de Hough, será examinado o pixel e sua vizinhança na imagem, para determinar se há evidência de extremidade naquele pixel. Somente se houver realizar-se-á o calculo dos parâmetros. Após calculados os parâmetros de um determinado pixel, eles são ’quantizados’ para um valor correspondente a e b, e o acumulador A(a , b) é incrementado. Quando todos pixels tiverem sido processados, é procurado no acumulador A os maiores valores (picos). Eles indicam os parâmetros de prováveis linhas na imagem. Um limiar pode ser utilizado quando procura-se o(s) máximo(s) no acumulador, a fim de determinar um valor mínimo de pontos colineares. Se o valor do acumulador não for superior ao do limiar então será considerado um ruído. As detecções de outras formas utilizando a transformada de Hough usam o mesmo princípio, há somente alteração no número de parâmetros da equação que será empregada, e em conseqüência na dimensão do acumulador.. 3.3.4 Filtro Média Ao convoluir uma imagem com o filtro da média, obtém-se uma suavização de ruído na imagem, sendo este filtro muito usado no pré-processamento da imagem. Segundo Trucco [Trucco & Verri 1998]; sendo I uma imagem N x M, m um número impar menor que N e M, e A a matriz de filtro linear, uma máscara m x m. A imagem filtrada Ia da imagem I para cada pixel (i,j) é dada pela convolução discreta: m 2. IA(i, j) = I ∗ A =. m 2. ∑−m ∑−m A(h, k)I(i − h, j − k). (3.1). h= 2 k= 2. sendo m/2 uma divisão inteira(i.e 3/2=1). Se todas as entradas A são positivas, o filtro realiza uma suavização média. Essa simples suavização é o filtro da média, que substitui os valores de cada pixel pela média deles com suas respectivas vizinhanças.   1 1 1 1 AM edia =  1 1 1  9 1 1 1.

(30) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 19. 3.3.5 Filtro de Sobel O filtro de Sobel é um operador matemático que convoluido com uma imagem extrai os contornos da imagem. Por também se tratar de um filtro linear, assim como o filtro da média, a imagem filtrada também é obtida a partir de uma convolução discreta. Suas máscaras de convolução são divididas em duas, uma para os contornos verticais e outra para os contornos horizontais.   −1 0 1 ASobelx =  −2 0 2  −1 0 1   1 2 1 0 0  ASobely =  0 −1 −2 −1 Portanto a magnitude e a direção do gradiente são dadas por: q ASobel = 2 (A2sobelx + A2sobely ) θ = tan −1(. Ay ) Ax. 3.4 Sistema orientado a plataforma Nas pesquisas em hardware re-configurável, é comum o uso de modelagem a nível de transferência de registro (RTL) para projetar máquinas de estados e outras construções que estão diretamente relacionadas com o hardware. Esse tipo de construção é normalmente utilizado em conjunto com as FPGA que possuem uma função específica comumente desempenhada totalmente pelo hardware. Sistemas desse tipo são bastante comuns porém possuem problemas no que se diz respeito a parametrização e reusabilidade o que normalmente leva os desenvolvedores a refazer boa parte do sistema quando se deparam com a adição de novas funcionalidades ou a necessidade de alguma atualização do mesmo. Visando resolver esse tipo de problema em sistemas embarcados, surge o modelo de sistema baseado em plataforma. Este tipo de sistema possibilita a utilização de vários sub-componentes de hardware que são controlados por um ou mais processadores, integrados através de um barramento comum. Esta característica facilita os processos de atualização, gerenciamento e integração desses dispositivos, provendo assim um sistema mais complexo e de forma segura. Em geral, os sistemas baseados em plataforma não têm apenas componentes de hardware, que os tornaria estáticos e voltados completamente a um único tipo de aplicação. Normalmente, tais sistemas permitem que mudanças no tipo de aplicação possam ser realizadas em software, suportando a execução de códigos escritos por desenvolvedores em linguagens imperativas que podem ser utilizados para o controle, gerenciamento e execução de tarefas. Esta possibilidade de programação do hardware via software dá mais.

(31) CAPÍTULO 3. EMBASAMENTO TEÓRICO. 20. flexibilidade e capacidade de configuração, principalmente na resolução de problemas que possuem muitas variáveis e parâmetros.. Figura 3.5: Arquitetura comum a sistemas orientados a plataforma A Figura 3.5 mostra a arquitetura básica de um sistema orientado a platafoma contendo um processador e outros dispositivos. Se fosse usada a modelagem clássica de hardware embarcado, teríamos que integrar todos os dispositvos através de entradas e saídas fornecidas pelos mesmos, além de nos preocupar com a sincronização entre os diferentes tipos. Com o uso do modelo de sistemas orientados a plataforma, essa sincronização e ligação entre os componentes é realizada através de um código escrito alguma linguagem de alto nível. Embora o funcionamento de alto nível dos sistemas baseados em plataforma seja mais lento porque o software precisa interagir com os processadores através de uma interface de barramento compartilhado, a parte específica de processamento em hardware compensa isto. Isto é, funções antes realizadas em software agora podem ser realizadas em hardware, aumentando em dezenas de vezes a velocidade de processamento em muitas situações e casos. A flexibilidade deste tipo de sistema permite um ganho considerável, por exemplo, na área de visão computacional, onde muitas aplicações podem ser implementadas em hardware paralelo ou de processamento vetorial (array processors) para diminuir enormemente o trabalho sequencial em software. A Figura 3.5 mostra a arquitetura básica de sistemas orientados a platafoma, contendo um processador e outros dispositivos, usando modelagem clássica de hardware embarcado teríamos que integrar todos os dispositvos através de entradas e saídas fornencidas pelos mesmos, além de nos preocupar com a sincronização entre os diferentes tipos. Com sistemas orientados a plataforma essa sincronização e ligação entre os componentes é feita através de um código escrito alguma linguagem de auto nível. Embora os sistemas baseados plataforma sejam mais lentos porque precisam interagir com os processadores através de um interface de barramento compartilhado, em muitas situações e casos, a flexibilidade deste tipo de sistema é necessária, como na área de visão computacional onde muitas aplicações podem ser implementadas em hardware para simplificar o trabalho em software..

(32) Capítulo 4 Implementações. A fim de testar e validar a nossa idéia, partimos para a implementação em hardware do modelo proposto, construindo e inserindo componentes com a finalidade de observar a eficiência do sistema orientado a plataforma. Planejamos e implementamos um procedimento de atenção visual que é um dos comportamentos considerados como essenciais em sistemas de visão robótica [Gonçalves et al. 2000]. Basicamente, um mapa atencional (ou mapa de saliências) é construído a partir de características extraídas de imagens adquiridas de um ambiente onde se encontra o sistema visual, que pode, por exemplo, estar em um robô. O sistema deve combinar as características extraídas e calcular, segundo alguma função, o local para onde o robô deve voltar sua atenção. Como este não é o foco principal deste trabalho, aqui usamos simplesmette a função somátorio. Assim, o resultado do sistema é um mapa (matriz 2D) onde cada posição é um somatório dos resultantes dos filtros gaussianio, de Sobel, do laplaciano do gaussiano, do Gaussiano e da Média. Com este mapa de saliências, o robô consegue decidir para qual região ou local do ambiente ele deve voltar sua atenção ou se locomover, dependendo de sua tarefa. Então, em nosso procedimento simples de teste, as imagens capturadas em tempo real são os dados de entrada para nossa plataforma, sendo este tipo de sistema considerado massivo em processamento. Dentro do componente do mapa de atenção, foi também implementado os filtros anteriormente citados. A arquitetura, incluindo componente de filtragem, na plataforma, pode ser vista na figura 4.1. Nas implementações, usamos componentes disponíveis na ferramenta bem como planejamos e desenvolvemos componentes específicos, úteis para nossas aplicações de visão computacional, incluindo componentes de filtragem e um integrador. Esses componentes foram desenvolvidos usando o DSP Builder e programados em hardware usando uma placa FPGA Altera DE2.. Figura 4.1: Arquitetura da plataforma desenvolvida No desevolvimento do projeto, escolhemos o VHDL como linguagem de discrição.

(33) CAPÍTULO 4. IMPLEMENTAÇÕES. 22. de hardware. Além de ser uma linguagem de descrição com a qual já possuíamos uma familiarização, justificamos a sua escolha por ser uma das mais populares, tendo vasta documentação e fóruns de discussões que nos foram de grande valia na detecção e correção de erros. No nosso sistema de teste, usamos programação mista, software/hardware. Uma parte foi desenvolvida usando discrição em hardware (VHDL) e outra foi implementada em C padrão. Usamos a linguagem de programação C para fazer a interface com os componentes, incluindo o controle de todos eles.. Figura 4.2: Vista superior da DE2. 4.1 A Tecnologia Field Programable Gate Array Em nosso trabalho, utilizamos FPGA para a prototipagem dos componentes de hardware que implementarão funções parciais ou totais de algoritmos de visão computacional. Para esse desenvolvimento utilizamos uma placa específica a DE2, do fabricante Altera. A Altera DE2 é uma placa que foi desenvolvida para fins educacionais, visando implementação e teste de circuítos lógicos e circuítos integrados (prototipagem de placas) em áreas do ensino como Engenharia Elétrica, Eletrônica e Computação. Ela tem vários componentes acoplados que podem ser vistos na figura 4.2 e são melhores descritos no seu manual de usuário [ALTERA 2006]. Os componentes disponíveis na placa DE2 são: • • • • •. Dispositivo Altera Cyclone II 2C35 FPGA Altera Dispositivo de Comunicação Serial - EPCS16 USB blaster 512-Kbyte SDRAM 8-Mbyte SDRAM.

(34) CAPÍTULO 4. IMPLEMENTAÇÕES. • • • • • • • • • • • • • • • •. 23. 4-Mbyte Memória Flash Entrada para cartão SD 4 pushbutton switches 18 toggle switches 18 LEDs vermelhos 9 LEDs verdes Osciladores de 50-MHz e 27-MHz para servirem como clock CODEC áudio de 24-bits com qualidade de CD com line-in, line-out, e microfonein VGA DAC (10-bit high-speed triple DACs) com conector VGA-out Decodificador de TV (NTSC/PAL) e conector TV-in Controlador ethernet 10/100 Ethernet Controlador USB Host/Slave com conectores USB do tipo A e B RS-232 transceiver e conector de 9 pinos Conector de mouse e teclado PS/2 IrDA transceiver Dois espaços para de 40 pinos para expansão com proteção à base de diodos. Figura 4.3: Esquema da placa FPGA DE2 (diagrama de blocos) Dos componentes acima listados, nem todos são utilizados nas nossas aplicações, porém alguns elementos são extremamente importantes para nossas implementações como.

Referências

Documentos relacionados

em efeitos superiores, contudo, considerando-se a realização do experimento apenas no Rio Grande do Sul e as particularidades de cada região produtiva, a extrapolação dos

GUILHERME TORRES AFFONSO LUCAS ALMEIDA GONÇALVES MATEUS PEREIRA DOS SANTOS RICARDO LAURINDO PEREIRA ALEXANDRE DE SOUZA FERREIRA RICARDO SILVA PEREIRA DA CRUZ FELIPE GARCIA DOS

Licenciatura e mestrado em Engenharia Eletrotécnica e de Computadores, área científica de Sistemas de Energia, pela Faculdade de Engenharia da Universidade do Porto. Doutoramento

Consulte a Secção 11 para obter informações pormenorizadas sobre sintomas e efeitos na saúde.. Classificação conforme Regulamentação (EC) 1272/2008 [CLP/GHS] SECÇÃO

a) O candidato que desejar interpor recursos contra os gabaritos oficiais preliminares das provas objetivas disporá de 48 (quarenta e oito) horas ininterruptas, iniciando-se

Atividades nematicidas e antifúngicas de acetogeninas isoladas de Annonaceas foram demonstradas, sendo consideradas fontes de moléculas para novos nematicidas e

RESUMO - O trabalho objetivou avaliar a qualidade das sementes de arroz utilizadas pelos agricultores em cinco municípios (Matupá, Novo Mundo, Nova Guarita, Alta Floresta e Terra

Com esta actividade vai-se estudar o crescimento de um fago numa cultura bacteriana, determinando-se a taxa de multiplicação (“Burst size”) e o período de latência,