Escolar Documentos
Profissional Documentos
Cultura Documentos
Electrnicos
de
Computadores
(2011-2012
1
Semestre)
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
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
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.
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.
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
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
2
-
Diagrama
de
estados
do
algoritmo
do
histograma
em
VHDL.
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)
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
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
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
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.
11
Da Figura 5 verifica-se um contraste ligeiramente mais acentuado, embora nesta imagem seja difcil verificar melhorias.
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
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
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
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
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
17
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
19