Você está na página 1de 19

Sistemas

Electrnicos de Computadores
(2011-2012 1 Semestre)

Instituto Superior Tcnico - Taguspark

Docente: Prof. Francisco Alegria

Acelerao de Algoritmos de Processamento de Imagem com FPGA Digilent S3 com Microblaze Softcore
23 de Dezembro de 2011


Diogo Aguiam 66010 Henrique Carvalho 66013 Tiago Furtado 74087

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

ndice
1. Introduo ........................................................................................................................................................ 3 2. Descrio do Sistema ................................................................................................................................... 4 3. Algoritmo do Histograma .......................................................................................................................... 5 4. Algoritmo de Emboss .................................................................................................................................. 8 5. Algoritmo de Equalizao ........................................................................................................................ 11 6. Visualizao de nmeros ......................................................................................................................... 13 7. Explicao do EDK ...................................................................................................................................... 14 8. Medidas para a anlise do desempenho do sistema .................................................................... 15 9. Anlise Resultados? .................................................................................................................................... 16 10. Concluso do Projecto ............................................................................................................................ 17 7. Bibliografia ..................................................................................................................................................... 18 8. Anexos .............................................................................................................................................................. 18

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

1. Introduo
O segundo projecto da cadeira de Sistemas Electrnicos de Computadores consiste na implementao de algoritmos de processamento de imagem numa placa de demonstrao FPGA Digilent S3. O sistema utiliza o mdulo de uma cmara de telemvel para adquirir imagens e um monitor com entrada VGA que representa essas imagens e a imagem resultante do processamento. O objectivo do projecto verificar as vantagens e as diferenas entre desenvolver estes algoritmos de processamento de imagem em software e em hardware. Por cima da estrutura da FPGA implementou-se o softcore da Microblaze e por cima deste que se desenvolvem os algoritmos em software. Tambm recomendada a implementao de perifricos hardware para melhorar a performance do sistema e verificam-se esses processos. Os algoritmos a implementar so o negativo, que j fornecido, um histograma e um emboss da imagem captada. Estes algoritmos devem ser optimizados pois o sistema deve captar e apresentar a imagem captada e alterada em tempo real. Para alm destes algoritmos, implementou-se tambm um algoritmo de equalizao que permite obter um melhor contraste da imagem e um correspondente emboss mais destacado. No relatrio explicam-se as opes tomadas, as alteraes e as novas implementaes extra que no esto explcitas no enunciado.

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

2. Descrio do Sistema
Neste sistema pretende-se captar imagens com a cmara de vdeo e processa-las em tempo real. Utiliza-se uma placa de demonstrao FPGA cujos perifricos so a cmara e o monitor. A interface entre a FPGA e o monitor VGA e tanto o perifrico de captura de imagens da cmara de vdeo como o da comunicao com o monitor atravs da interface VGA j so disponibilizados juntamente com o enunciado. O foco do projecto , portanto, desenvolver os algoritmos, em software e hardware, de processamento da imagem captada. A imagem captada pela cmara sempre visualizada no monitor sem que o softcore da FPGA intervenha. Paralelamente, a mesma imagem fornecida FPGA atravs da interface com a cmara, processada, e enviada para o perifrico de interface VGA. A imagem processada aparece no monitor por baixo da imagem original. Os algoritmos a desenvolver so o histograma, o emboss e tambm apresentar o negativo da imagem cujo algoritmo j fornecido. Uma das preocupaes do projecto residia em conseguir representar todas os processamentos de imagem sem ter de recorrer a uma recompilao e reprogramao da FPGA. Escolheu-se utilizar os botes j presentes na placa de demonstrao para alternar quais os processamentos de imagem activos num dado momento. Quando um dos botes est activo, o correspondente LED da placa tambm est ligado. Inicialmente desenvolveram-se os algoritmos em C num ambiente separado de modo a se conseguir fazer o debug mais rapidamente, tal como sugerido. Utilizaram-se imagens arbitrrias e no final adaptou-se o algoritmo para a resoluo da imagem captada pela cmara, que de 128x64 pixis de largura por altura. Para alm dos trs algoritmos pedidos no enunciado criou-se tambm um algoritmo de equalizao. Este algoritmo foi introduzido pois verificaram-se valores de rudo muito acentuados na imagem capturada pela cmara e, muitas vezes, o contraste do emboss da imagem era insatisfatrio. A uma pr ou ps equalizao da imagem permitia aumentar grandemente o contraste, resultados que se comprovam ao ligar ou desligar este processamento atravs dos botes. Ter vrios botes activos implica que vrios processamentos so realizados em srie na mesma ordem que apresentados os botes. Os botes da FPGA correspondem a passos de processamento especficos e esto descritos na Tabela 1.
Botes Algoritmo 1 Negativo 2 Pr- Equalizao 3 Emboss 4 Histograma 5 Ps- equalizao 6 Modo FPS ou ciclos

Tabela 1 - Posio dos botes da FPGA e correspondente filtro de processamento de imagem activo.

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

3. Algoritmo do Histograma
Para o processamento do histograma desenvolveu-se o algoritmo em VHDL e em software. Ambos so explicados. 3.1 Histograma em Software O algoritmo do histograma foi primeiramente desenvolvido em software. Um histograma de cinzentos, que o que se pretende neste sistema, um grfico cujo eixo horizontal contm os nveis de cinzentos possveis, neste caso os 256 nveis, e o eixo vertical so o nmero de ocorrncias. Ou seja, este algoritmo l todos os pixis da imagem e para cada um, verifica o seu valor e soma uma ocorrncia posio correspondente no circuito. As consideraes a ter so o tamanho da imagem representada no monitor e o objectivo de representar o histograma escala. A imagem desejada tem um tamanho de 128 pixis de largura e 64 pixis de altura. A largura fcil de escalonar, sendo metade dos 256 nveis de cinzento disponveis, optou-se por agrupar dois nveis adjacentes de cinzento somando as suas ocorrncias. Por seu lado, a altura requer consideraes especiais. Pretende-se que o nvel que contenha mais ocorrncias fique no ponto mximo da imagem, ou seja, v at ao topo da imagem. Os outros nveis e as suas ocorrncias so proporcionais a este. Para criar a escala pela qual todos os valores de ocorrncias so divididos assegura-se o valor mais alto de ocorrncias e cria-se uma escala dividindo esse nmero mximo pelos 64 pixis da altura da imagem e soma-se mais um para assegurar que no existem barras que saiam da imagem. Para cada valor do vector de nveis divide-se pela escala e obtm-se um valor abaixo de 64 e proporcional aos restantes. Aps se obter o vector escala preenche-se a imagem a representar. Para cada pixel verifica-se se a sua linha est acima ou abaixo do nvel correspondente na posio igual coluna da imagem, dentro do vector. Se estiver abaixo ou igual, preenche-se com 0x00, preto, se for acima, preenche-se com branco 0xFF. 3.2 Histograma em VHDL A diferena fundamental entre o histograma escrito em C e o escrito em VHDL que VHDL uma lngua de descrio de hardware e C uma linguagem de programao de software (existem variantes como System C que permitem compilar para RTL). As vantagens que isto proporciona so que VHDL cria hardware dedicado a executar a aco programada enquanto que o C que cria comandos que so interpretados por um processador. O facto do histograma correr em hardware permite executar operaes em paralelo (software executa operaes sequencialmente), e o caminho fsico de dados optimizado pelo compilador enquanto que em software os comandos so optimizados para transferir os dados de forma mais eficiente em caminhos de dados fixos. O Algoritmo para a criao do histograma semelhante ao histograma em C: for(i = 0, i < number_of_pixels; i++) { histogram[pixel_value]++; }
Cdigo 1 - Algoritmo do Histograma

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

Em software cada loop composto por instrues executados sequencialmente. Neste caso um loop composto pela sequncia: 1. ler o valor do iterador 2. testar se iterador i igual a number_of_pixels 3. incrementao do iterador 4. guardar o valor do iterador 5. aceder ao endereo de base mais offset por pixel_value 6. ler o valor 7. incrementar o valor 8. guardar o valor 9. saltar para o inicio do loop Considerando trivialmente que cada uma das instrues representa um ciclo do relgio, e indicando que se tem uma imagem dada com N pixis o histograma demora 9N ciclos do relgio em software. Em hardware a sequncia feita: Incrementar o valor do pixel_value anterior, ler o valor do pixel_value actual e seleccionar novo endereo na memria para o prximo flanco positivo do relgio, verificar endereo mximo do pixis e seleccionar o prximo estado (mesmo estado). A possibilidade de criao de mltiplos processos paralelos em hardware, o processamento de um histograma pode ser concludo em menos tempo que por software, visto que os dados so introduzidos sem atrasos significativos. Utilizando o cdigo j criado no ficheiro camera_interface_histogram.vhd fizeram-se vrias modificaes para garantir que o histograma fosse reduzido em tamanho para uma imagem final de 128 por 64 pixis. Em largura necessrio reduzir os nveis de cinzentos de 256 para 128, operao realizada atravs duma diviso por 2, ou seja, um deslocamento do endereo de uma posio para a direita. Para reduzir o tamanho vertical do mximo da soma para 64 pixis criado um estado para dividir o valor num endereo de memria e o valor mximo por 2 at o valor mximo estar dentro de um limite (dado por 64 pixis + ajuste). O valor de ajuste necessrio para garantir que valores baixos no sejam reduzidos excessivamente. A desvantagem que permite que picos de valores muito altos passem acima dos 64 pixis. O processo de reduo completamente combinatrio implicando que a propagao do sinal deve ser inferior a 20ns (1 ciclo do relgio). Aps a diviso este resultado passado para o FSL que envia os dados do histograma para o processador. Estes dados so depois desenhados para o ecr em software. No foram feitas nenhumas optimizaes aos nmeros de resultados dos valores lidos do FSL (256 valores). Da imagem do histograma resultante possvel verificar que a cmara no captura os dois valores mais pretos nem os dois valores mais brancos, correspondentes aos inteiros 0x00, 0x01 e 0xFE, 0xFF. Com os outros grupos verificou-se que um problema comum.

Figura 1 - Imagem resultante do histograma de uma imagem capturada.

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

Na Figura 2 tem-se um diagrama de estados que corresponde ao cdigo VHDL.


Figura 2 - Diagrama de estados do algoritmo do histograma em VHDL.

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

4. Algoritmo de Emboss 4.1 Convoluo da imagem O algoritmo de emboss corresponde a uma convoluo de uma matriz espacial de duas dimenses, a que corresponde a imagem capturada, com uma matriz de emboss, a que se chama Kernel ou K. No enunciado dada uma funo de convoluo dada por: (4.1.1) !! = ! . ! !! = ! . ! ! = !! !! ! a imagem inicial, ! a imagem final ! a kernel de convoluo, ! a kernel inversa !! a convoluo intermdia (4.1.2) (4.1.3)

Este processo pode ser simplificado juntando os dois kernels, o da convoluo e o inverso, possibilitando realizar a convoluo da matriz imagem uma nica vez. As matrizes finais so apresentadas. (4.1.4) ! = ! (! ! ) 2 2 0 ! = 2 6 0 0 0 0 0 0 0 ! = 0 6 2 0 2 2 2 2 0 !!"#$% = 2 12 2 0 2 2 (4.1.5)

(4.1.6)

(4.1.7)

Na algoritmo de convoluo considerou-se a matriz kernel 3x3 do tipo M. Assume- se que a posio central tem as coordenadas (0,0), tem (-1,-1) e (1,1). Para cada pixel da matriz resultante da convoluo, Y, realiza-se a funo 4.1.9 ! ! ! ! ! ! (4.1.8) ! = ! !
! !! ! !!

! ! ,! =
! !!! ! !!!

! !!!,!!! . ! !,!

(4.1.9)

Y a matriz resultado da convoluo I a imagem original K a matriz kernel final

Nos limites exteriores da imagem original, ou seja, na determinao dos pixis correspondentes as linhas e colunas mais exteriores da imagem pode resultar num erro 8

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

da convoluo. Visto que para cada pixel necessrio saber os valores dos pixis sua volta, nestas posies em que o pixel a determinar no est totalmente rodeado por outros pixis, no possvel realizar uma convoluo correcta. Possveis solues para estas situaes realizar a convoluo somente com os pixis existentes, ou seja, nos limites da imagem ignoram-se os elementos da matriz kernel cuja convoluo seria com pixis fora da imagem original, ou ento ignoram-se estes limites da imagem. A soluo escolhida foi a ltima visto que mesmo que se realizasse a convoluo com os pixis disponveis, resultaria num filtro de emboss errado. Optou-se por ignorar as linhas e colunas exteriores resultando numa imagem de 128 por 64 pixis com uma borda de um pixel a preto a toda a volta, ou seja, 126 por 62 pixis teis. Uma das sugestes utilizar deslocamentos de bits em vez de operaes de multiplicao e diviso por 2. Esta alterao do emboss no afectou melhorias significativas no desempenho do algoritmo. De modo a determinar quais e o nmero de deslocaes a realizar implica uma lgica associada para seleccionar entre o nmero -2, 12 e 0 e o atraso resultante anula as vantagens. O MB est configurado para ter um multiplicador dedicado em hardware. Na configurao do MB utilizado neste projecto (optimizar por espao) uma operao de multiplicao termina em 3 ciclos do relgio. No algoritmo de convoluo com deslocamentos cada if representa uma instruo de branch que demora um ciclo. No caso de multiplicadores negativos, -2, necessrio realizar o complemento para 2. No caso da multiplicao por 12, realizou-se um deslocamento esquerda de 4 posies e uma subtrao de um deslocamento de duas posies: 16*A -4*A = 12*A. 4.2 Escalonamento da imagem O resultado da convoluo um somatrio cujo resultado pode ser muito elevado, no pior caso tem-se 12*255 = 3060. Para representar este valor seriam necessrios 12 bits, 2^12 = 4096. No entanto a matriz imagem uma matriz em que cada posio tem somente 8 bits, ou seja, 256 nveis de cor desde o preto ao branco. O problema pe-se que preciso escalar o valor da convoluo de modo a que todos os valores sejam possveis de representar em 8 bits. Uma soluo verificar que o maior resultado da convoluo , em mdulo, 3060 e que a sua relao com 256 de 11.953, ou seja, o inteiro de escalonamento mximo 12. Este valor sempre arredondado para cima de modo a evitar problemas de saturao. No entanto, na maioria das situaes o resultado da convoluo no alcana o seu valor mximo, ou seja, escalonar o valor obtido da convoluo por 12 implica obter, na maioria dos casos, um contraste muito reduzido. de notar que os valores obtidos da convoluo tm sinal, ou seja, podem ser positivos ou negativos. Uma das alternativas da funo de emboss fazer o clculo da escala ideal para cada resultado da convoluo e aproveitar essa escala para o frame seguinte. Esta escala determinada actualizando, ao longo da convoluo, uma varivel com o valor mximo j obtido na mesma. No final da convoluo realizava-se a funo: (4.2.1) scale = valor_mximo / 256+1 No entanto, devido a problemas de memria, o array de memria utilizado para guardar o resultado da convoluo correspondia j imagem final, cada elemento tinha somente 8 bits. Tentou-se realizar uma matriz intermdia com 32 e at de 16 bits mas o modelo do processador implementado em FPGA no disponibilizava desses recursos. 9

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

Em vez de alterar o processador implementado optou-se por utilizar os recursos disponveis. Esta limitao implica que o escalonamento tenha de ser realizado em simultneo com a convoluo e para cada pixel, ou seja, o valor da escala conhecido antes da convoluo. Neste mtodo de escalonamento, utiliza-se o valor de escala do frame anterior para calcular a frame corrente. O problema pe-se quando, dum frame para o seguinte, o valor ideal da escala se altera e resulta em pontos de saturao no novo frame. Mesmo que tal s ocorra em variaes bruscas do cenrio que se est a capturar, haver pixis saturados no desejvel. A alternativa verificar no final do processamento de cada pixel se a escala calculada para essa imagem diferente da utilizada. Caso haja diferena realiza-se o processamento de novo utilizando a nova escala. Este mtodo evita que alguma vez haja pixis saturados na imagem processada. Por vezes o processamento demora o dobro do nmero de ciclos, mas um trade-off razovel. Os valores obtidos pelo escalonamento situam-se entre -127 e +127. No entanto a matriz imagem um vector cujos elementos tm 8 bits e so positivos. Somando +127 a esse valor obtm-se somente valores positivos.


Figura 3 - Exemplo de um emboss comparada com a imagem original.

10

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

5. Algoritmo de Equalizao
A equalizao de uma imagem entende-se como a redistribuio de intensidade (cor) de pixis utilizando o cumulativo do histograma como funo de transferncia. Utilizando a curva cumulativa possvel determinar a densidade de cada intensidade pelo gradiente da curva, e possvel redistribuir a densidade de ocorrncias de forma igual. Em termos visuais isto interpretado como um aumento do contraste porque cada ocorrncia presente na imagem transformada apresenta a mesma densidade. ! !"#$"%&'('$ ! = ! ! = !! ! ! !! (5.1) !! o nmero de pixis a intensidade ! ! nmero total de pixis for ( i=0; i < HISTOGRAM_SIZE; ++i ) { sum += histogram[i]; cumulative_histo[i] = sum* MAX_INTENSITY / pixelCount; } for ( i = 0; i < pixelCount; ++i ) { outImage[i] = cumulative_histo[image[i]]; }
Cdigo 2 - Rotina de criao do histograma de equalizao e rotina de equalizao.

O algoritmo utiliza uma tabela de histograma j produzida a partir de uma imagem e acumula todos os valores. A escala depois ajustada para que o valor se situe dentro dos limites da intensidade e nmero de pixis. A transformao da imagem inicial aplicada utilizando o valor antigo de intensidade como ndice na tabela produzindo uma imagem equalizada. Uma comparao entre os resultados pode ser feita nas Figuras 4 a 6.

Figura 4 - Imagem sem nenhum filtro activo.

11

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

Figura 5 - Imagem processada com filtro de equalizao.

Da Figura 5 verifica-se um contraste ligeiramente mais acentuado, embora nesta imagem seja difcil verificar melhorias.

Figura 6 - Imagem processada com filtro de pr-equalizao e histograma activos.

Da Figura 6 possvel destacar a distoro do histograma resultante da equalizao. Neste sistema optou-se por introduzir duas opes de equalizao. Uma antes e outra depois do filtro de emboss. Introduzir a equalizao permite aumentar o contraste da imagem, pelo que a existncia deste filtro antes de realizar o emboss permite obter linhas mais detalhadas. No entanto, tambm se optou por introduzir uma ps equalizao, aps o emboss, permitindo alterar a imagem que se obtinha simplesmente com o emboss. de notar que realizar a pr e a ps equalizao sem nenhum outro filtro activo igual a realizar somente uma dessas equalizaes, no entanto isso no se verifica quando se tem o emboss activo.

12

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

6. Visualizao de nmeros
Tanto no debugging como no final do projecto para ter mais informao visvel na imagem processada realizaram-se rotinas que introduzem nmeros sobrepostos imagem. Esta opo foi a escolhida apesar de se ter ponderado utilizar os LEDs da FPGA, ou um perifrico UART que liga a FPGA ao computador. Esta ltima soluo implicava ter duas fontes de informao, o monitor contendo a imagem e o computador para receber as mensagens de debug, e devido a existirem somente 8 LEDs, implicando valores at 256 optou-se por representar os valores directamente no monitor sobrepostos imagem. No processo de desenvolvimento foi decidido usar blocos individuais de sprites de 16*16 pixis de forma a permitir a representao de um nmero 8 dgitos e facilitar a diviso de resoluo horizontalmente. Os nmeros foram desenhados num programa grfico e exportados sob a forma de arrays do tipo char. Cada dgito tem 256 bytes e existem dez dgitos, 0-9. A rotina comea por fazer a converso do inteiro a representar para string. Este string ento utilizado para criar um array com ponteiros a cada sprite correspondente ao digito na string. O desenho do nmero inteiro feito com a deslocao absoluta de cada sprite mapeada a coordenadas absolutas da imagem base. Na iterao o valor (dado pelo valor no sprite) do pixel absoluto escrito por cima da imagem base com Bitwise AND para permite visualizao de zonas transparentes.


Figura 7 - Representao do nmero de ciclos do filtro do negativo.


Figura 8 - Representao dos FPS do filtro do negativo.

13

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

7. Explicao do EDK
As ferramentas do EDK permitem juntar ao processador microblaze blocos funcionais adjuntos para serem implementados directamente em hardware. Os blocos base so as de memria local de dados (dlmb) e de de instruo (ilmb) com os associados controladores (_cntlr), a RAM (bram), o gerador de relgio (clock_generator), reset do sistema (proc_sys_reset) e o barramento local do processador (mb_plb). A interface de VGA e da camera anexado ao projecto e comunica atravs dos fast simplex link (camera2mb e mb2vga). Esta implementao adicionalmente junta mais blocos funcionais para facilitar funes adjuntas no software: GPIO: dois blocos de GPIO foram instanciados. Um barramento de 8 bits de saida para os 8 LEDs (leds_output_pio). O segundo bloco de GPIO de 8 bits de entrada correspondendo aos botes dip na placa de desenvolvimento (sw_input_0). Os GPIOs esto ligados ao processador a partir do mb_plb com acessos externos adicionados ao mb.ucf . Os registos associados aos GPIOs so configurados em software a partir do API de programao do Microblaze. Timer: O timer/counter foi instanciado para a facilitar leituras de performance dos algoritmos sem afectar o fluxo principal de cada algoritmo. A leituras so feitas directamente ao registo do contador, permitindo ter uma contagem do nmero de ciclos passados entre incio da contagem e leitura.

14

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

8. Medidas para a anlise do desempenho do sistema


Uma forma de analisar o desempenho do sistema comparar, por exemplo, os ciclos que cada processamento de imagem demora a ser realizado. Para medir este nmero foi criado um timer que iniciado a partir de 0 no loop principal. Este registo lido no nicio de cada processamento e mais uma vez no final, sendo a diferena entre estes valores o nmero de ciclos que ocorreram durante o processamento. while (true) { Timer_Start(); read_image(); start_time=Timer_Get_Value(); DoFilters(); end_time = Timer_Get_Value(); time = (end_time - start_time - Calibration); Show_Time(time); write_image(); Timer_Stop(); }
Cdigo 3 - Pseudo-cdigo da determinao do nmero de ciclos

Segundo o pseudo-cdigo descrito, o tempo contado no inclui o tempo de leitura e escrita da imagem nem o tempo demorado a calcular e escrever os nmeros. O valor de calibrao serve para contabilizar o tempo demorado a fazer a leitura do registo (12 ciclos). A seco DoFilters() aplica um atraso de 15 ciclos mesmo com todas as funes desactivadas. Estes valores devem ser tidos em conta na anlise do sistema. Uma outra informao tambm muito importante de apresentar e que serve como base de comparao do desempenho com os outros grupos implementar o clculo do framerate do processamento. Ou seja, o nmero de frames por segundo que se consegue obter com este processamento. Este processador apresenta uma frequncia de clock de 50 MHz, implicando um perodo de clock de 20 ns. Multiplicando o perodo de ciclo pelo nmero de ciclos que cada processamento demora obtm-se essa framerate, cuja apresentao no ecr pode ser escolhida utilizando o boto correspondente, em alternncia com o nmero de ciclos.

15

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

9. Anlise Resultados?
importante no projecto analisar as vrias alternativas ao nosso dispor que podem afectar a performance do nosso sistema. Um desses parmetros a optimizao ao nvel do compilador. Recorreu-se aos instrumentos desenvolvidos para o debugging, como o caso do nmero de ciclos representados no monitor, para verificar o desempenho do sistema consoante o nvel de optimizao escolhido, O-0 a O-2. Os valores dos ciclos para cada filtro e para cada optimizao esto representados na Tabela 2. O-0 O-1 O-2 Seleco filtros Negativo Equalizao Emboss Histograma Tudo 31 2.655.013 466.005 18.527.457 1.163.504 20.888.512 15 82.842 202.527 6.900.777 354.945 7.744.879 11 82.706 218.902 5.446.622 Software: 356.590 VHDL: 195.234 7.421.675

Tabela 2 - Optimizaes das compilaes e correspondente nmero de ciclos para cada um dos filtros de processamento.

O histograma em software com optimizaes normais (O-2) executa a funo do histograma em 356590 ciclos, com o histograma pr calculado em hardware a funo executa 195234 ciclos isto representa uma melhoria de aproximadamente 1.8. Cada nvel de optimizao apresenta melhorias na performance dos algoritmos. O delta das melhorias apresenta-se maior entre compilao sem optimizao e optimizao baixa (O-1). Entre O-1 e O-2 os algoritmos mais simples como o negativo e histograma no apresentam melhorias significativas enquanto que o ganho em performance dos mais complexos bastante reduzido. Em termos qualitativos e com base nas imagens obtidas do processamento possvel chegar a algumas concluses sobre o desempenho do sistema. A qualidade do emboss devido falta de contraste da imagem base. Isto pode ser corrigido com a equalizao. O histograma no apresenta uma curva completamente representativa da imagem porque a imagem s tm uma resoluo horizontal de 128 pixis. A interpolao reduz cada barra a ser a soma de duas intensidades adjuntas. O rudo na imagem afecta os resultados a equalizao criando zonas de contraste artificiais.

16

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

10. Concluso do Projecto


Neste projecto desenvolveram-se as bases de um sistema de captura e processamento de imagem em tempo real. Destacam-se algumas concluses e limitaes de sistemas deste tipo e consoante o hardware utilizado. Verifica-se que o microblaze no o processador indicado para fazer operaes de clculo pesados. A vantagem que traz a facilidade de interligar blocos de processamento dedicados como o caso do histograma. Como o nome da aplicao implica o MB serve s como um processador embebido destinado a controlo de funes e lgica. No propsito deste sistema, que a realizao do filtro emboss, destacou-se uma forte influncia da baixa qualidade das imagens capturadas pela cmara na qualidade da imagem processada. A existncia de muito rudo e de um baixo contraste na imagem capturada implica que no filtro de emboss esses defeitos sejam acentuados. A baixa resoluo da imagem utilizada, somente 128x64, limita muito aquilo que se observa. Tambm associado ao depth of field da cmara, difcil discernir exactamente o que se est a capturar quando os objectos esto muito prximos da cmara. Acreditamos que para se obter um melhor filtro de emboss vantajoso utilizar operaes de vrgula flutuante para calcular a convoluo e consequente escala. Utilizar uma escala inteira impede obter uma resoluo precisa do resultado da convoluo e um contraste de emboss reduzido. No caso do histograma verificou-se que a cmara no apresenta todos os nveis de cinzento. Os dois valores mais pretos e os dois valores mais brancos no so capturados. Uma das alteraes possveis de se realizar no histograma permitir que nveis de cinzento que tenham um nmero reduzido de ocorrncias e muito inferiores ao nmero mximo de ocorrncias no sejam cortadas. Deve ser sempre repreentado um trao para o correspondente nvel caso existam pixis que contenham esse nvel de cinzento. Devido ao escalonamento no histograma, que faz com que o valor mximo toque no limite superior da imagem, pode ocorrer que um nvel de cinzentos onde haja pouca ocorrncia de pixis nem seja representado na imagem. de notar que as figuras apresentadas neste relatrio so fotografias retiradas do sistema em funcionamento com a cmara apontada para uma projeco da imagem frequentemente utilizada para demonstrao de filtros a funcionar. Estas figuras no apresentam a melhor qualidade de imagem que os algoritmos implementados conseguem apresentar, no entanto as imagens so genunas. Esta baixa qualidade deve- se reduzida qualidade tanto da cmara que captura as imagens para processamento como da cmara fotogrfica utilizada.

17

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

7. Bibliografia
Microblaze Reference Guide Datasheet do Xilinx Spartan 3 FPGA Teoria sobre as convolues: http://fourier.eng.hmc.edu/e161/lectures/convolution/index.html http://www.songho.ca/dsp/convolution/convolution.html Exemplos de matrizes de convoluoo: http://docs.gimp.org/en/plug-in-convmatrix.html Documentao dos drivers para o software Xilinx: http://www.cs.washington.edu/education/courses/csep567/04sp/pdfs/xilinx_ drivers.pdf

8. Anexos
Como anexo enviado por email um ficheiro zip com o projecto do sistema. Est includo o executvel para o Xilinx contendo a descrio hardware da FPGA e o software para o processador criado.

18

Sistemas Electrnicos de Computadores Processamento de Imagem com FPGA

Esta pgina foi deixada intencionalmente em branco

19