Post on 09-Jan-2019
CENTRO UNIVERSITÁRIO POSITIVO
NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
ENGENHARIA DA COMPUTAÇÃO
HARDWARE PARA PROCESSAMENTO
DIGITAL DE IMAGENS
Rodrigo Marcel Ribeiro
Monografia apresentada à disciplina de Projeto Final como requisi to parcial à conclusão
do Curso de Engenharia da Computação, orientada pelo Prof. Alessandro Zimmer
UNICENP/NCET
Curitiba
2007
TERMO DE APROVAÇÃO
Rodrigo Marcel Ribeiro
Hardware para Processamento Digital de imagens
Monografia aprovada como requisito parcial à conclusão do Curso de Engenharia da
Computação do Centro Universitário Positivo, pela seguinte banca examinadora:
Prof. Alessandro Zimmer
Prof. Adriana Cursino Thomé
Prof. Valfredo Pilla Jr
Curitiba, 15 de Dezembro de 2007
AGRADECIMENTOS
Agradeço à Deus por ter tornado possível o desenvolvimento deste projeto e feito com que
apesar das dificuldades o sucesso tenha sido obtido . Não posso deixar de agradecer à minha
noiva Juliana Serafim da Silva , por todo o apoio durante os anos anteriores de curso e a
motivação, disciplina, paciência e carinho durante o desenvolvimento deste projeto. Agradeço
também à Luis Fabiano Canteri por me motivar nos momentos em que pensei em desistir e pelas
dicas valiosas de como resolver os principais problemas. Finalmente agradeço à meus pais por
me apoiar durante todo este tempo e patrocinar este sonho de me tornar Engenheiro da
Computação.
RESUMO
Este documento apresenta um sistema baseado em hardware para o processamento digital
de imagens. Entre as operações que o sistema é capaz de realizar estão: limiarização, aplicação
de máscaras e filtros de suavização.
O desenvolvimento é baseado em uma FPGA ( Field Programmable Gate Array ) que
recebe as imagens através de uma int erface paralela e realiza o processamento necessário,
retornando o resultado através da mesma interface.
A motivação para desenvolver tal sistema, uma vez que existem inúmeras soluções
baseadas em software, é justamente a inexistência de sistemas baseados em hardware, que
podem ser muito úteis no campo da visão computacional.
Palavras chave: Processamento de imagens, FPGA, VHDL, Filtros de Convolução
DIGITAL IMAGE PROCESSING HARDWARE
ABSTRACT
This document introduces a hardware based syste m to digital image processing. Some of
the operations that the system is capable to perform are: thresholding, mask application and
smoothing filters.
The development is based on a FPGA (Field Programmable Gate Array) who receives the
images through a parallel interface and do the processing, returning the result by the same
interface.
The motivation to develop this system, once there are a lot of software-based solutions is
this lack of hardware-based systems, wich can be very useful in the computer vision field.
Key words: Image processing, FPGA, VHDL, Convolution Filters
SUMÁRIO
Lista de Tabelas................................ ................................ ................................ .......................... 7Lista de Equações ................................ ................................ ................................ ....................... 8Lista de Siglas ................................ ................................ ................................ ............................ 9Lista de Figuras ................................ ................................ ................................ ........................ 10Capítulo 1 – Introdução ................................ ................................ ................................ ............ 12Capítulo 2 – Fundamentação Teórica ................................ ................................ ........................ 14
2.1 Processamento de Imagens ................................ ................................ ............................. 142.1.1 Histórico................................ ................................ ................................ ................. 142.1.2 Fundamentos de Imagens Digitais ................................ ................................ ........... 172.1.3 Transformadas de Imagens ................................ ................................ ..................... 182.1.4 Realce de Imagens ................................ ................................ ................................ .. 192.1.5 Segmentação de Imagens ................................ ................................ ........................ 23
2.2 Hardware Reconfigurável ................................ ................................ ............................... 242.2.1 VHDL (VHSIC Hardware Description Language) ................................ .................. 252.2.2 Série Cyclone de FPGAs ................................ ................................ ........................ 272.2.3 Arquitetura da Família Cyclone ................................ ................................ .............. 28
Capítulo 3 – Especificação do Projeto ................................ ................................ ....................... 343.1 Módulo de Software ................................ ................................ ................................ ....... 343.2 Módulo de Hardware ................................ ................................ ................................ ...... 36
3.2.1 Prococolo de Comunicação ................................ ................................ ..................... 373.2.2 Unidade de Controle ................................ ................................ ............................... 373.2.3 Operações de Processamento ................................ ................................ .................. 373.2.4 Memória Interna ................................ ................................ ................................ ..... 37
3.3 Operações e Algoritmos de Processamento de Imagens ................................ .................. 373.3.1 Processamento Espacial ................................ ................................ .......................... 37
Capítulo 4 – Projeto do Sistema................................ ................................ ................................ 394.1 Requisitos do Sistema ................................ ................................ ................................ .... 394.2 Módulo Software – Interface com o Usuário ................................ ................................ .. 39
4.2.1 Funcionalidades ................................ ................................ ................................ ...... 404.2.2 Projeto da Aplicação Cliente ................................ ................................ ................... 41
4.3 Módulo de Hardware ................................ ................................ ................................ ...... 464.3.1 Protocolo de Comunicação ................................ ................................ ..................... 484.3.2 Unidade de Controle ................................ ................................ ............................... 524.3.3 Controlador de Acesso à Memória ................................ ................................ .......... 534.3.4 Operação NOT ................................ ................................ ................................ ....... 554.3.5 Operação Limiarização ................................ ................................ ........................... 574.3.6 Operação Filtro de Convolução ................................ ................................ ............... 584.3.7 Operação Filtro de Mediana ................................ ................................ .................... 59
Capítulo 5 – Validação e Resultados ................................ ................................ ......................... 615.1 Operação NOT ................................ ................................ ................................ ............... 615.2 Operação de Limiarização ................................ ................................ .............................. 625.3 Operação Filtro Passa-Baixa ................................ ................................ .......................... 635.4 Operação Filtro Passa-Alta................................ ................................ ............................. 645.5 Operação Filtro Mediana ................................ ................................ ................................ 66
Capítulo 6 – Conclusão................................ ................................ ................................ ............. 68Capítulo 7 – Referências Bibliográficas ................................ ................................ .................... 69APÊNDICE A – CRONOGRAMA DO PROJETO ................................ ................................ .. 70
7
LISTA DE TABELAS
Tabela 1 – Recursos do Dispositivo (Adaptado de Cyclone Device Handbook) ........................ 27Tabela 3 – Sinais de Controle: Módulo de Comunicação ................................ .......................... 51Tabela 4 – Códigos de Operações ................................ ................................ ............................. 52Tabela 5 – Sinais de Controle: Unidade de Controle ................................ ................................ . 53Tabela 6 – Sinais de Controle: Controlador de Acesso à Memória ................................ ............ 54Tabela 7 – Sinais de Controle: Operação NOT ................................ ................................ .......... 56Tabela 8 – Sinais de Controle: Operação Limiarização ................................ ............................. 57Tabela 9 – Sinais de Controle: Operação Filtro de Convolução ................................ ................. 58Tabela 10 – Sinais de Controle: Operação Filtro de Mediana ................................ .................... 60Tabela 11 – Operação NOT: Matriz de pixels original ................................ .............................. 61Tabela 12 – Operação NOT: Matriz de pixels resultado via hardware ................................ ....... 61Tabela 13 – Operação NOT: Matriz de pixels resultado esperada ................................ .............. 61Tabela 14 – Operação Limiarização: Matriz de pixels original ................................ .................. 62Tabela 15 – Operação Limiarização: Matriz de pixels resultado via hardware ........................... 62Tabela 16 – Operação Limiarização: Matriz de resultado esperada ................................ ........... 63Tabela 17 – Filtro Passa-Baixa: Máscara de entrada ................................ ................................ . 63Tabela 18 – Filtro Passa-Baixa: Matriz de pixels original ................................ ......................... 64Tabela 19 – Filtro Passa-Baixa: Matriz de pixels resultado via hardware ................................ .. 64Tabela 20 – Filtro Passa-Baixa: Matriz de pixels resultado calculada ................................ ........ 64Tabela 21 – Filtro Passa-Alta: Máscara de entrada ................................ ................................ .... 65Tabela 22 – Filtro Passa-Alta: Matriz de pixels original ................................ ............................ 65Tabela 23 – Filtro Passa-Alta: Matriz de pixels resultado via hardware ................................ ..... 65Tabela 24 – Filtro Passa-Alta: Matriz de pixels calculada ................................ ......................... 65Tabela 25 – Filtro de Mediana: Matriz de pixels original ................................ .......................... 66Tabela 26 – Filtro de Mediana: Matriz de pixels resultado via hardware ................................ ... 66Tabela 27 – Filtro de Mediana: Matriz de pixels calculada ................................ ........................ 67
8
LISTA DE EQUAÇÕES
Equação 1 – Matriz de Pixels................................ ................................ ................................ .... 17Equação 2 – Armazenamento de Imagens Digit alizadas................................ ............................ 18Equação 3 – Vizinhança de 4 de um Ponto ................................ ................................ ............... 18Equação 4 – Vizinhança de 8 de um Ponto ................................ ................................ ............... 18Equação 5 – Tranformada de Fourier ................................ ................................ ........................ 19Equação 6 – Transformada Discreta de Fourier ................................ ................................ ......... 19Equação 7 – Transformada Espacial ................................ ................................ ......................... 20Equação 8 – Transformada de Freqüência ................................ ................................ ................. 20Equação 9 – Teorema da Convolução ................................ ................................ ....................... 38
9
LISTA DE SIGLAS
FPGA – Field Programmable Gate Array
DFT – Discrete Fourier Transform – Transformada Discreta de Fourier
FFT – Fast Fourier Transform – Transformada Rápida de Fourier
HDL – Hardware Description Language – Linguagem de Descrição de Hardware
VHDL – VHSIC Description Language – Linguagem de Descrição de Hardware VHSIC
PC – Personal Computer – Computador Pessoal
IOB – Input / Output Block – Blocos de Entrada e Saída
CLB – Configuration Logic Blocks – Blocos Lógicos Configuráveis
ASIC – Application-Specific Integrated Circuit – Circuito Integrado de Aplicação Específica
LAB – Logic Array Blocks – Arranjo de Blocos Lógicos
LE – Logic Elements – Elementos Lógicos
M4K RAM – Bloco de Memória RAM de uma FPGA Cyclone
IOE – Input Output Elements – Elementos de Entrada e Saída
PLL – Phase-Lock Loop – Alterador de Fase de um Sinal
LUT – Lookup Table – Tabela de Procura
E/S – Entrada / Saída
RAM – Random Access Memory – Memória de Acesso Aleatório
ROM – Read-Only Memory – Memória de Somente Leitura
FIFO – First In, First Out – Primeiro a Entrar, Primeiro a Sair
ACK – Acknowledge - Conhecimento
SR – Send Request – Solicita Envio
ROK – Receice OK – Envio Ok
EOF – End Of File – Final de Arquivo
EPP – Enhanced Parallel Port
BMP – Bitmap – Mapa de Bits
JPG – Joint Photographics Experts Group – Formato de Compressão de Imagens
10
LISTA DE FIGURAS
Figura 1 – Diagrama em Blocos do Sistema ................................ ................................ .............. 13Figura 2 – Aplicação do Filtro de Médias em uma imagem com ruído FONTE: GONZALEZ(1992)................................ ................................ ................................ ................................ ....... 14Figura 3 – Sistema Bartlane de Transmissão de Imagens FONTE: GONZALEZ (1992) ........... 15Figura 4 – Melhoramento do Contraste de uma Imagem FONTE: GONZALEZ (1992) ............ 16Figura 5 – Melhoramento do Contraste de uma Imagem FONT E: GONZALEZ (1992) ............ 16Figura 6 – Alargamento de Contraste FONTE: CASTLEMAN (1996) ................................ ...... 21Figura 7 – Imagem Original................................ ................................ ................................ ...... 22Figura 8 – Imagem após um Filtro Passa -Baixa ................................ ................................ ........ 22Figura 9 – Filtro Passa-Alta no Sentido Horizontal ................................ ................................ ... 22Figura 10 – Filtro Passa-Alta ................................ ................................ ................................ .... 22Figura 11 – Fluxo de Projetos em VHDL FONTE: D’AMORE (2005) ................................ ..... 25Figura 12 – Circuito Lógico Comparador. Saída O=1 para A=B e O=0 para A!=B ................... 25Figura 13 – Diagrama em Blocos da Família Cyclone FONTE: ALTERA (2007) ..................... 28Figura 14 – Estrutura dos LABs da Família Cyclone FONTE: ALTERA (2007) ....................... 29Figura 15 – Sinais de Controle dos LABs FONTE: ALTERA (2007) ................................ ....... 29Figura 16 – LE do Cyclone FONTE: ALTERA (2007) ................................ ............................. 30Figura 17 – LE em Modo Normal FONTE: ALTERA (2007) ................................ ................... 31Figura 18 – LE em Modo Aritmético Dinâmico FONTE: ALTERA (2007) .............................. 32Figura 19 – Conexões de Interconnect FONTE: ALTERA (2007) ................................ ............ 32Figura 20 – Sinais de Controle do Bloco M4K RAM FONTE: ALTERA (2007) ...................... 33Figura 21 – Relação de Linhas do LAB com blocos M4K RAM FONTE: ALTERA (2007) ..... 33Figura 22 – Diagrama em Blocos do Sistema ................................ ................................ ............ 34Figura 23 – Fluxograma de Operação de Software ................................ ................................ .... 35Figura 24 – Módulo de Hardware ................................ ................................ ............................. 36Figura 25 – Protótipo de Tela de Controle do Sistema ................................ .............................. 40Figura 26 – Arquitetura do Módulo de Hardware................................ ................................ ...... 47Figura 27 – Esquema de Funcionamento da Porta Paralela ................................ ....................... 48Figura 28 – Ciclo de Envio de um Byte ................................ ................................ .................... 49Figura 29 – Ciclo de Recebimento de um Byte ................................ ................................ ......... 49Figura 30 – Diagrama Esquemático: Módulo de Comunicação ................................ ................. 50Figura 31 – Diagrama Esquemático: Unidade de Controle ................................ ........................ 52Figura 32 – Diagrama Esquemático: Controlador de Acesso à Memória ................................ ... 54Figura 33 – Diagrama Esquemático: Operação NOT ................................ ................................ 56Figura 34 – Diagrama Esquemático: Operação Limiarização ................................ .................... 57Figura 35 – Diagrama Esquemático: Operação Filtro de Convolução ................................ ........ 58Figura 36 – Diagrama Esquemático: Operação Filtro de Mediana ................................ ............. 60Figura 37 – Imagem Original ................................ ................................ ................................ .... 62Figura 38 – Imagem Resultado ................................ ................................ ................................ . 62Figura 39 – Imagem Original ................................ ................................ ................................ .... 63Figura 40 – Imagem Resultado ................................ ................................ ................................ . 63Figura 41 – Imagem Original ................................ ................................ ................................ .... 64Figura 42 – Imagem Resultado ................................ ................................ ................................ . 64Figura 43 – Imagem Original ................................ ................................ ................................ .... 66Figura 44 – Imagem Resultado ................................ ................................ ................................ . 66Figura 45 – Imagem Original ................................ ................................ ................................ .... 67Figura 46 – Imagem Resultado ................................ ................................ ................................ . 67
12
CAPÍTULO 1– INTRODUÇÃO
Processamento de imagem é qualquer forma de processamento de dados no qual a entr ada
e a saída são imagens tais como fotografias ou quadros. A maioria das técnicas envolve o
tratamento da imagem como um sinal bidimensional, no qual são aplicados padrões de
processamento de sinal. O resultado deste processamento não precisa ser necessar iamente uma
imagem, mas pode ser uma instância de certas características desta imagem.
O interesse em métodos de processamento de imagens digitais decorre de duas áreas
principais de aplicação: melhoria de informação visual para a interpretação humana e o
processamento de dados de cenas para percepção automática através de máquinas [GONZALEZ,
1992].
Embora os computadores estejam cada vez mais velozes [TANENBAUM, 2001], o
processamento digital de imagens exige muito poder de processamento e hardware especializado
é bastante utilizado para este fim.
Este documento apresenta um sistema de processamento digital de imagens baseado em
hardware reconfigurável implementado em uma FPGA, que é um dispositivo semicondutor
largamente utilizado para o processamento de informações digitais e pode ser programado de
acordo com as aplicações do usuário (programador).
Para definir o comportamento da FPGA o usuário (programador) pode optar por fazer
utilizando uma linguagem de descrição de hardware (HDL), como VHDL, ou um desenho
esquemático. Então usando uma ferramenta de automação de desenho eletrônico esta lógica é
aplicada à arquitetura da FPGA.
O sistema proposto envolve um microcomputador PC (Personal Computer) para a leitura
e pré-processamento da imagem. Esta imagem é enviada através de uma interface paralela à
FPGA que aplicará operações, filtros e transformadas sobre ela, de acordo com o que o usuário
desejar.
Este documento foi redigido em seis seções distintas, considerando esta como seção
introdutória. Na segunda seção encontra-se uma revisão da literatura. Nela é apresentada a base
teórico-conceitual, oferecendo um panorama da tecnologia utilizada e uma visão geral dos
estudos nessa área. Na terceira seção é apresentada a especificação técnica de software e
hardware, objetivos de cada módulo do projeto e funcionamento de cada um deles. Na quarta
seção encontra-se o projeto de desenvolvimento do sistema, software rodando no PC e hardware
(módulo de comunicação e módulo de processamento na FPGA).
13
As demais seções detalham os resultados obtidos, mostrando o funcionamento de cada
módulo, como resultados obtidos nos testes de cada um e resultado do sistema completo em
funcionamento. Também são apresentadas as conclusões obtidas com o desenvolvimento deste
projeto, bem como as limitações e direcionamento para futuras implementações.
A Figura 1 apresenta o diagrama em blocos contendo o funcionamento básico do sistema
proposto.
Figura 1 – Diagrama em Blocos do Sistema
14
CAPÍTULO 2 – FUNDAMENTAÇÃO TEÓRICA
2.1 Processamento de Imagens
Processamento de imagem é qualquer forma de processamento de dados no qual a entrada
e a saída são imagens tais como fotografias ou quadros. Ao contrário do tratamento de imagens,
que se preocupa somente na manipulação de figuras par a sua representação final, o
processamento de imagens é um estágio para novos processamentos de dados tais como
aprendizagem de máquina ou reconhecimento de padrões. A maioria das técnicas envolve o
tratamento da imagem como um sinal bidimensional, no qual são aplicados padrões de
processamento de sinal. O resultado deste processamento não precisa ser necessariamente uma
imagem, mas pode ser uma instância de certas características desta imagem.
Processamento digital de imagens é a utilização de algoritmos c omputacionais para
aplicar processamento de imagens em imagens digitais. O processamento digital de imagens tem
as mesmas vantagens sobre o processamento analógico de imagens que o processamento digital
de sinais tem sobre o processamento analógico de sina is: possibilita uma gama muito mais ampla
de algoritmos que podem ser aplicados na entrada e pode -se evitar problemas como ampliação
de ruído e distorção do sinal durante o processamento. [GONZALEZ, 1992]
Figura 2 – Aplicação do Filtro de Médias em uma imagem com ruídoFONTE: GONZALEZ (1992)
2.1.1 Histórico
O interesse em métodos de processamento de imagens digitais decorre de duas áreas
principais de aplicação: melhoria de informação visual para a interpretação humana e o
15
processamento de dados de cenas para percepção automática através de máquinas. Uma das
primeiras aplicações de técnicas de processamento de imagens foi o melhoramento de imagens
digitalizadas para jornais, enviadas por meio de cabo submarino de Londres para New York no
início dos anos 20. Um equipamento especializado em impressão codificava as imagens para
transmissão a cabo, as quais eram então reconstruídas numa impressora telegráfica contendo
apenas caracteres para a simulação de padrões de tons intermediários. A Figura 3 apresenta o
resultado obtido.
Figura 3 – Sistema Bartlane de Transmissão de ImagensFONTE: GONZALEZ (1992)
Melhoramentos nos métodos de processamento para transmissão de figuras digitais
continuaram a ser feitos ao longo dos 35 anos que se seguiram. Entretanto, foi necessária a
combinação do surgimento de computadores digitais de grande porte com o programa espacial
para chamar a atenção ao potencial dos conceitos de processamento de imagem. O e mprego de
técnicas de computação para o melhoramento de imagens produzidas por uma sonda espacial
iniciou-se no Jet Propulsion Laboratory (Pasadena, California) em 1964, quando imagens da
Lua, transmitidas pelo Ranger 7, foram processadas por um computador para corrigir vários tipos
de distorção de imagem inerentes à câmera de televisão a bordo. Essas técnicas serviram de base
para métodos melhorados no realce e restauração de imagens das missões Surveyor para a Lua, a
série Mariner, de missões para Marte, os vôos tripulados da Apolo para a Lua e outros.
De 1964 até hoje a área de processamento de imagens vem crescendo vigorosamente.
Além de aplicações no programa espacial, técnicas de processamento digitais são atualmente
utilizadas para resolver uma variedade de problemas. Embora frequentemente não relacionados,
esses problemas comumente requerem métodos capazes de melhorar a informação visual para
análise e interpretação humanas. Em medicina, procedimentos computacionais melhoram o
contraste ou codificam os níveis de intensidade em cores, de modo a facilitar a interpretação de
imagens de raios X e outras imagens biomédicas. Geógrafos usam técnicas similares para estudar
16
padrões de poluição em imagens aéreas ou de satélites. Em arqueologia, métodos de
processamento de imagens têm restaurado com sucesso, figuras fotografadas borradas, que eram
os únicos registros disponíveis de artefatos raros perdidos ou danificados. Em Física e áreas
relacionadas, técnicas computacionais rotineiramente realçam imagens de exp erimentos em áreas
como plasmas de alta energia e microscopia eletrônica. [GONZALEZ, 1992]
Figura 4 – Melhoramento do Contraste de uma ImagemFONTE: GONZALEZ (1992)
A Figura 5 mostra uma imagem onde houveram problemas no processo de aquisição e
sua devida correção após a aplicação da Transformada rápida de Fourier.
Figura 5 – Melhoramento do Contraste de uma ImagemFONTE: GONZALEZ (1992)
17
2.1.2 Fundamentos de Imagens Digitais
2.1.2.1 Modelo Simples de uma Imagem
O termo imagem refere-se a uma função de intensidade luminosa bidimensional,
denotada por f(x,y), em que o valor ou amplitude de f nas coordenadas espaciais (x,y) dá a
intensidade (brilho) da imagem naquele ponto.
As imagens que as pessoas percebem em atividades visuais corriqueiras consistem de luz
refletida dos objetos. A natureza básica de f(x,y) pode ser caracterizada por dois componentes:
(1) a quantidade de luz incindindo na cena sendo observada e (2) a quantidade de luz refletida
pelos objetos da cena. [CASTLEMAN, 1996]
2.1.2.2 Amostragem e Quantização
Para ser adequada para processamento computacional, uma função f(x,y) precisa ser
digitalizada tanto espacialmente quanto em amplitude. A digitalização das coordenadas espaciais
(x,y) é denominada amostragem da imagem e a digitalização da amplitude é chamada
quantização em níveis de cinza.
Suponhamos que uma imagem contínua f(x,y) é aproximada por amostras igualmente
espaçadas, arranjadas na forma de uma matriz NxM como mostrado na Equação 1.
)1,1(...)1,1()0,1(
............
)1,1(...)1,1()0,1(
)1,0(...)1,0()0,0(
),(
MNfNfNf
Mfff
Mfff
yxf
Equação 1 – Matriz de Pixels
O lado direito da equação representa o que é normalmente chamado de imagem digital.
Cada elemento da matriz denomina -se um elemento de imagem, ou pixel. O processo de
digitalização de imagens envolve decisões a respeito dos valores para N, M e o número de níveis
de cinza permitidos para cada pixel. O número de bits (b) necessários para armazenar uma
imagem digitalizada é obtido pela Equação 2, onde m é o número de bits necessários para
representar os níveis de cinza. Por exemplo, uma imagem de 128x128 com 256 níveis de cinza,
requer 128x128x8 = 131072 bits para armazenamento.
18
B=NxMxm
Equação 2 – Armazenamento de Imagens Digitalizadas
2.1.2.3 Relacionamento entre Pixels
Um pixel p nas coordenadas (x,y) possui quatro vizinhos horizontais e verticais, cujas
coordenadas são dadas por:
(x+1,y),(x-1,y),(x,y+1),(x,y-1)
Equação 3 – Vizinhança de 4 de um Ponto
Esse conjunto de pixels, chamado vizinhança -de-4 de p, é representado por N4(p). Cada
pixel está a uma unidade de distância de (x,y), sendo que alguns dos vizinhos de p ficarão fora da
imagem digital se (x,y) estiver na borda da i magem. Os quatro vizinhos diagonais de p possuem
como coordenadas:
(x+1,y+1), (x+1,y-1), (x-1,y+1), (x-1,y-1)
Equação 4 – Vizinhança de 8 de um Ponto
E são denotados por ND(p). Esses pontos, juntos com a vizinhança -de-4, são chamados
de vizinhança-de-8 de p, representada por N8(p).
2.1.3 Transformadas de Imagens
2.1.3.1 Introdução à Transformada de Fourier
A Transformada de Fourier é uma transformada integral que expressa uma função em
termos de funções de base sinusoidal, como soma ou integr al de funções sinusoidais
multiplicadas por coeficientes (“amplitudes”). Existem diversas variações diretamente
relacionadas desta transformada, dependendo do tipo de função a transformar.
Nos campos relacionados com o processamento de sinal, a transformad a de Fourier é
tipicamente utilizada para decompor um sinal nas suas componentes em freqüências e suas
amplitudes. [SWOKOWSKI, 1995]
Seja f(x) uma função contínua de uma variável real x. A tranformada de Fourier de f(x) é
definida pela Equação 5:
19
dxuxjxfuF ]2exp[)()(
Equação 5 – Tranformada de Fourier
2.1.3.2 Transforma Discreta de Fourier (DFT)
Para uso em computadores, seja para aplicações científicas ou processamento digital de
sinais, é preciso ter valores xk discretos. Para isso existe a versão da transformada para funções
discretas.
1
0
]/2exp[)(1
)(N
x
NuxjxfN
uF
Equação 6 – Transformada Discreta de Fourier
2.1.3.3 Transformada Rápida de Fourier (FFT)
O número de multiplicações e adições co mplexas necessárias para implementar a
Transformada Discreta de Fourier é proporcional a N2. Isto é, para cada um dos N valores de u, a
expansão do somatório requer N multiplicações complexas de f(x) por e N -1 adições dos
resultados. Os termos de podem s er computados uma vez e armazenados numa tabela para todas
as aplicações subsequentes. Por essa razão, a multiplicação de u por x nestes termos não é
usualmente considerada uma parte direta da implementação.
O algoritmo mais comum de FFT é o Cooley -Tukey, que recursivamente divide a DFT de
tamanho N=N1N2 em muitas DFTs menores de tamanhos N1 e N2. O uso mais comum é dividir
a transformada em 2 pedaços de tamanho N/2 a cada passo. [GONZALEZ, 1992]
2.1.4 Realce de Imagens
O objetivo principal das técnicas de realc e é processar uma imagem, de modo que o
resultado seja mais apropriado para uma aplicação específica do que a imagem original. As
abordagens discutidas nesta seção dividem -se em duas grandes categorias: métodos no domínio
espacial e métodos no domínio da f requência. O domínio espacial refere -se ao próprio plano da
imagem, e as abordagens nesta categoria serão baseadas na manipulação direta dos pixels das
imagens. Técnicas de processamento no domínio da frequência são baseadas na modificação das
transformadas de Fourier da imagem. [CASTLEMAN, 1996]
20
2.1.4.1 Métodos no Domínio Espacial
O termo domínio espacial refere -se ao agregado de pixels que compõem uma imagem, e
métodos no domínio espacial são procedimentos que operam diretamente sobre estes pixels.
Funções de processamento de imagens no domínio espacial podem ser expresas como :
g(x,y) = T[f(x,y)]
Equação 7 – Transformada Espacial
A abordagem principal para definir uma vizinhança em torno de (x,y) consiste em usar
uma subimagem quadrada ou retangular, centrada em (x,y). O centro da subimagem é movido de
pixel a pixel, aplicando o operador para cada posição (x,y) para obter g naquela posição.
A forma mais simples de T envolve uma vizinhança de 1x1 em que g depende apenas do
valor de f em (x,y) e T torna-se uma função de transformação de níveis de cinza. Vizinhanças
maiores permitem uma variedade de funções de processamento que vão além do simples realce
de imagens.
Independente da aplicação específica, a abordagem geral é fazer os valores de f de uma
vizinhança pré-estabelecida de (x,y) determinar o valor de g em (x,y). Uma das principais
abordagens nessa formulação baseia -se no uso das denominadas máscaras. Basicamente uma
máscara é uma pequena matriz bidimensional, na qual os valores dos coeficientes determinam a
natureza do processo, tal como o aguçamento de imagens. Técnicas de realce baseadas nesse tipo
de abordagem frequentemente são denominadas processamento por máscara ou filtragem.
2.1.4.2 Métodos no Domínio da Freqüência
O fundamento das técnicas no domínio da frequência é o teorema da convolução. Seja
g(x,y) uma imagem formada pela convolução de uma imagem f(x,y) e um operador linear
invariante com a posição h(x,y), então do teorema da convolução a seguinte relação no domínio
da frequência é verificada:
G(u,v) = H(u,v) F(u,v)
Equação 8 – Transformada de Freqüência
em que G, H e F são as transformadas de Fourier de g, h e f respectivamente. Muitos
problemas de realce de imagens podem ser expressos na forma da equ ação acima.
21
2.1.4.3 Alargamento de Contraste
A idéia por trás do alargamento de contraste consiste no aumento da escala dinâmica dos
níveis de cinza na imagem sendo processada. A Figura 6 exemplifica o processo de alargamento
de constraste.
Figura 6 – Alargamento de ContrasteFONTE: CASTLEMAN (1996)
2.1.4.4 Filtragem Espacial
O uso de máscaras espaciais para processamento de imagens é usualmente chamado
filtragem espacial e as máscaras espaciais, chamadas filtros espa ciais.
Os filtros passa-baixas atenuam ou eliminam os componentes de alta frequência no
domínio de Fourier, enquanto deixam as frequências baixas inalteradas. Os componentes de alta -
frequência caracterizam bordas e outros detalhes finos de uma imagem, de f orma que o efeito
resultante da filtragem passa-baixas é o borramento da imagem.
Do mesmo modo, filtros passa -alta atenuam ou eliminam os componentes de baixa -
frequência. Como esses componentes são responsáveis pelas características que variam
lentamente em uma imagem, tais como o contraste total e a intensidade média, o efeito resultante
da filtragem-passa-altas é uma redução destas características, correspondendo a uma aparente
agudização das bordas e outros detalhes finos.
Um terceiro tipo de filtragem, denominado filtragem passa -banda, remove regiões
selecionadas de frequências entre altas e baixas frequências. Esses filtros são usados para
restauração de imagens e raramente são interessantes para realce de imagens.
22
Figura 7 – ImagemOriginal
Figura 8 – Imagem apósum Filtro Passa-Baixa
Figura 9 – Filtro Passa-Alta no Sentido
Horizontal
Figura 10 – Filtro Passa-Alta
FONTE: CASTLEMAN (1992)
Filtros de suavização são usados para borramento e redução de ruído. O borramento é
utilizado em pré-processamento, tais como remoção de pequenos detalhes de uma imagem antes
da extração de objetos, e conexão de pequenas descontinuidades em linhas e curvas. A re dução
de ruídos conseguida pelo borramento com filtro linear assim como por filtragem não -linear.
Existem também os filtros de aguçamento, cujo objetivo principal é enfatizar detalhes
finos numa imagem ou realçar detalhes que tenham sido borrados, em conse quência de erros ou
como efeito natural de um método particular de aquisição de imagens. Os usos de aguçamento de
imagens são variados, incluindo aplicações desde impressão eletrônica e imagens médicas até
inspeção industrial e detecção automática de alvos em armas inteligentes.
2.1.4.5 Filtragem no Domínio da Freqüência
O realce no domínio da frequência é imediato, simplesmente computamos a transformada
de Fourier da imagem a ser realçada, multiplicamos o resultado por uma função de filtro de
transferência e tomamos a transformada inversa para produzir a imagem realçada.
As idéias de borramento, através da redução do conteúdo de alta frequência ou do
aguçamento através do aumento da magnitude dos componentes de alta -frequência relativamente
aos componentes de baixa-frequência, originam-se dos conceitos diretamente relacionados à
transformada de Fourier.
Na prática, pequenas máscaras espaciais são mais frequentementes usadas do que a
transformada de Fourier, por causa da sua simplicidade de implementação e velocidad e.
Entretanto, uma compreensão dos conceitos do domínio da frequência é essencial para a solução
de muitos problemas que não são facilmente tratáveis por técnicas espaciais.
23
2.1.5 Segmentação de Imagens
Geralmente, o primeiro passo em análise de imagens é a seg mentação da imagem. A
segmentação subdivide uma imagem em suas partes ou objetos constituintes. O nível até o qual
essa subdivisão deve ser realizada depende do problema sendo resolvido. Ou seja, a segmentação
deve parar quando os objetos de interesse na a plicação tiverem sido isolados.
Os algoritmos de segmentação para imagens monocromáticas são geralmente baseados
em uma das seguintes propriedades básicas de valores de níveis de cinza: descontinuidade e
similaridade. Na primeira categoria, a abordagem é p articionar a imagem baseado em mudanças
bruscas nos níveis de cinza. As principais áreas de interesse nessa categoria são a detecção de
pontos isolados e detecção de linhas e bordas na imagem. As principais abordagens da segunda
categoria baseiam-se em limiarização, crescimento de regiões e divisão e fusão de regiões.
2.1.5.1 Detecção de Bordas
Uma borda é o limite entre duas regiões com propriedades relativamente distintas de
nível de cinza. O objetivo da detecção de bordas é marcar os pontos onde a intensidade l uminosa
muda bruscamente. Essas mudanças bruscas geralmente refletem eventos importantes e
mudanças nas propriedades da cena.
A detecção de borda reduz drasticamente a quantidade de informação e filtra o que é
menos relevante em uma imagem, preservando sua s propriedades estruturais. Existem diversos
métodos para detecção de borda, porém podem ser agrupados em duas categorias: baseadaem
busca e baseada em cruzamento de zeros. Os métodos de busca funcionam procurando pelos
máximos e mínimos na derivada primei ra de uma imagem, enquanto os métodos de cruzamento
de zeros procuram por cruzamentos de zeros na derivada segunda da imagem.
2.1.5.2 Limiarização
Limiarização é uma das mais importantes abordagens para a segmentação de imagens.
Supondo uma imagem composta por ob jetos iluminados sobre um fundo escro, de maneira que
os pixels do objeto e os do fundo tenham seus níveis de cinza agrupados em dois grupos
dominantes, uma maneira óbvio de extrair os objetos do fundo é através da seleção de um limar
T que separe os dois grupos. Então, cada ponto (x,y) tal que f(x,y) > T é denominado um ponto
do objeto, caso contrário é denominado um ponto do fundo.
24
2.2 Hardware Reconfigurável
Uma FPGA é um dispositivo semicondutor que é largamente utilizado para o
processamento de informações digitais. Foi criador pela Xilinx Inc. e teve o seu lançamento no
ano de 1985 como um dispositivo que poderia ser programado de acordo com as aplicações do
usuário (programador) [WIKIPEDIA, 2007]. O FPGA é composto basicamente por três tipos de
componentes: blocos de entrada e saída (IOB), blocos lógicos configuráveis (CLB) e chaves de
interconexão (Switch Matrix). Os blocos lógicos são dispostos de forma bidimensional, as chaves
de interconexão são dispostas em formas de trilhas verticais e horizontais e ntre as linhas e as
colunas dos blocos lógicos.
CLB (Configuration Logic Blocks ): Circuitos idênticos, construídos pela reunião
de 2 a 4 flip-flops e utilizando lógica combinacional. Utilizando os CLBs, um
usuário pode construir elementos funcionais lógico s.
IOB (Input/Output Block): São circuitos responsáveis pelo interfaceamento das
saídas provenientes das saídas das combinações de CLBs. São basicamente
buffers, que funcionarão como um pino bidirecional de entrada e saída do FPGA.
Switch Matrix (Chaves de interconexões): Trilhas utilizadas para conectar os
CLBs e IOBs. O terceiro grupo é composto pelas interconexões. Os recursos de
interconexões possuem trilhas para conectar as entradas e saídas dos CLBs e IOBs
para as redes apropriadas. Geralmente, a conf iguração é estabelecida por
programação interna das células de memória estática, que determinam funções
lógicas e conexões internas implementadas no FPGA entre os CLBs e os IOBs. O
processo de escolha das interconexões é chamado de roteamento.
O FPGA é um chip que suporta a implementação de circuitos lógicos relativamente
grandes. Consiste de um grande arranjo de células ou blocos lógicos configuráveis contidos em
um único circuito integrado. Cada célula contém capacidade computacional para implementar
funções lógicas e realizar roteamento para comunicação entre elas.
Para definir o comportamento da FPGA o usuário pode optar por fazer utilizando uma
linguagem de descrição de hardware (HDL), como VHDL, ou um desenho esquemático. Então
usando uma ferramenta de automação de desenho eletrônico esta lógico é aplicada à arquitetura
da FPGA.
25
2.2.1 VHDL (VHSIC Hardware Description Language)
A VHDL foi originalmente desenvolvida sob o comando do Departamento de Defesa dos
Estados Unidos, em meados da década de 80, para doc umentar o comportamento de ASICs que
compunham os equipamentos vendidos às Formas Armadas americanas [YALAMANCHILI,
1998].
A VHDL, bem como outras linguagens, seguem um fluxo de projeto bem definido,
composto de sete etapas, como apresenta a Figura 11: Especificação de Requisitos,
Modelamento, Síntese de Alto Nível, Mapeamento Tecnológico, Implementação e ou
Fabricação, Testes e Simulação. O tempo e o custo de cada etapa dentro de um projeto é bastante
variável, dependo da tecnologia utilizada para implementar o sistema. [D'AMORE, 2005]
Figura 11 – Fluxo de Projetos em VHDLFONTE: D’AMORE (2005)
Projetos em VHDL possuem duas seções principais: ENTITY, que define as portas de
entrada e saída e ARCHITETURE, que define o funcionamento do projeto. Uma architecture
pode ser desenvolvida em três modos: fluxo de dados, funcional e estrutural. A Figura 12 mostra
o circuito lógico de um comparador, e abaixo uma descrição dos três modos de linguagem com
um exemplo para implementar o comparador.
Figura 12 – Circuito Lógico Comparador. Saída O=1 para A=B e O=0 para A!=B
26
Declaração da entity para o comparador, à qual pode -se utilizar qualquer uma das
architectures apresentadas a seguir:
Library ieee;
Use ieee.std_logic_1164.all;
Entity comparador is port (
A, B: in std_logic_vector (1 downto 0);
O: out std_logic;
);
end comparador;
A declaração entity do comparador define A e B como entradas de dois bits e O com o
saída de um bit. As duas primeiras linhas definem a biblioteca necessária para o tipo de dados
das entradas e saídas: std_logic e std_logic_vector. A funcionalidade do comparador pode ser
implementada em qualquer um dos três modos, descritos a seguir:
Fluxo de dados: Define as relações entre as entradas e saídas. As instruções não
são executadas de forma seqüencial como em linguagens de programação de
software. Cada saída tem seu valor alterado após um evento (mudança de valor)
em um sinal de entrada da qual seja dependente (ou sensistivo).
architecture fluxo_de_dados of comparador is
begin
0 <= ‘1’ when (A=B) else ‘0’;end fluxo_de_dados;
Funcional: Nesse modo, é feita a descrição da funcionalidade da entity por meio
de uma representação algorítmica, seme lhante a uma linguagem de programação
de software. A descrição funcional é definida por uma instrução process, que
possui uma lista das entradas pelas quais o process é sensistivo, ou seja, as
entradas que iniciam a execução após uma mudança no seu valor ( evento).
architecture funcional of comparador is
begin
process (A,B)
begin
if A=B then
C <= ‘1’;else
C <= ‘0’;
27
end if;
end process;
end funcional;
Estrutural: Nesse modo, o projeto é implementado pela declaração das portas
lógicas e componentes do projeto , e as suas interligações. A declaração dos
componentes está na linha use work.comportas.all e indica que xnor2 e and2
estão no mesmo local do projeto. Por meio da declaração signal definem-se as
ligações entre os componentes.
use work.comportas.all;
archicterure estrutural of com is
signal x: std_logic_vector (0 to 1);
begin
U0: xnor2 port map (a(0), b(0), x(0);
U1: xnor2 port map (a(1), b(1), x(1));
U2: and2 port map (x(0), x(1), x);
end estrutural;
2.2.2 Série Cyclone de FPGAs
A FPGA utilizada neste projeto é EP1C20F400C7 da família Cyclone, os dispositivos
desta família contém uma arquitetura bidimensional de linhas e colunas. Esta arquiterura é
composta por LABs (Logic Array Blocks), onde cada LAB contém 10 LEs (Logic Elements). As
linhas e colunas são inte rconectadas com velocidades que variam provendo interconexão
eficiente entre LABs e LEs.
Na Tabela 1, os blocos de memórias M4K RAM são agrupados nas colunas entre os
LAB’s. Na parte externa é possível ver os IOEs (elementos de en trada / saída) da FPGA, que
suportam diferentes padrões de E/S (entrada/saída). O número de blocos M4K RAM, PLLs,
linhas e colunas variam para cada dispositivo da família.
Tabela 1 – Recursos do Dispositivo (Adaptado de Cyclone De vice Handbook)
Device Columns Blocks PLLs LABColumns
LAB Rows
EP1C3 1 13 1 24 13EP1C4 1 17 2 26 17EP1C6 1 20 2 32 20EP1C12 2 52 2 48 26EP1C20 2 64 2 64 32
28
Figura 13 – Diagrama em Blocos da Família CycloneFONTE: ALTERA (2007)
2.2.3 Arquitetura da Família Cyclone
Cada LAB consiste em agrupamentos de 10 LEs, sinais de controle dos LABs,
interconexões locais, uma tabela de LUT ( Lookup Table), possuem interconexões por linhas e
colunas, apresentado na Figura 14.
As conexões locais de link direto ( Direct Link Connection) minimizam o uso das linhas e
colunas, provendo maior performance e flexibilidade. Existe uma ligação direta de cada LE que
o conecta a outros 30 LEs através de uma conexão de link direto.
Cada LAB possui uma lógica para dirigir sinais de controle a seus L Es. Os LABs contém
os seguintes sinais de controle: dois clocks, dois sinais de habilitação de clock, dois
asynchronous clears, synchronous clear, asynchronous preset/load, synchronous lo ad e sinais de
controle de soma/subtração, mostrados na Figura 15.
29
Figura 14 – Estrutura dos LABs da Família CycloneFONTE: ALTERA (2007)
Figura 15 – Sinais de Controle dos LABsFONTE: ALTERA (2007)
O LE é a menor unidade da lógica na arquitetura do Cyclone. O LE é compacto e fornece
características avançadas para utilização eficiente da lógica. Cada LE contém uma LUT de
quatro entradas, para que possa executar qualquer funçã o de quatro variáveis. Além disso, cada
LE contém um registrador programável e carry (selecionado). [ALTERA, 2007]
O LE possui os seguintes tipos de interconexão: local, linha, coluna, registrador
programável e link direto. Duas saídas da LE são direcionad as para roteamento de coluna ou
30
linha, uma para link direto e uma para interconexão local. Isso permite que a LUT e o registrador
programável trabalhem paralelamente.
Essas características são chamadas de Register Packing, que melhoram a utilização do
dispositivo, pois este dispositivo pode utilizar a LUT e o registrador em funções não
relacionadas. A estrutura do LE do Cyclone é apresentada na Figura 16.
Figura 16 – LE do CycloneFONTE: ALTERA (2007)
Os LES possuem uma característica de somador/subtrator dinâmico, que livra recursos
lógicos de usar um conjunto de LES para implementar ambas as operações. Essa característica é
controlada pelo sinal de controle addnsub, que coloca o LAB para realizar tanto A+B quando A-
B.
O dispositivo Cyclone possui dois modos de operação dos L ES: modo normal e modo
aritmético dinâmico. Cada modo usa os recursos do LE diferentemente.
Em cada modo, oito entradas são disponíveis para a LE (quatro dados de entrada da
interconexão local da LAB, carry-in0 e carry-in1 da LE anterior, o carry-in do LAB e a conexão
da cadeia de registradores), que são direcionadas para diferentes destinos para implementar a
função lógica desejada.
31
O modo normal é apropriado para aplicações de lógic a gerais e funções combinatórias. O
sinal addnsub só é permitido no modo normal se o LE está no final de uma cadeia de
somador/subtrator. Este modo é apresentado na Figura 17.
O modo aritmético dinâmico é ideal para implementar so madores, contadores,
acumuladores, funções de paridade e comparadores.
Um LE no modo aritmético usa quatro LUTs de duas entradas configuradas como um
somador ou subtrator dinâmico. O modo aritmético dinâmico é apresentado na Figura 18.
Figura 17 – LE em Modo NormalFONTE: ALTERA (2007)
Na arquitetura Cyclone, os LEs, blocos de memória M4K e dispositivos de E/S são
providos por uma estrutura de interconexão Multitrack. A interconexão Multitrack consiste de
linhas contínuas roteadoras e de performance otimizada de diferentes velocidades usadas para
realizar conexões inter e intra blocos. Simplifica o estágio de integração de projetos baseados em
blocos, eliminando os ciclos de re -otimização que geralmente geram mudanças de projeto.
Consiste de interconexões de linha e coluna com distâncias ficas. Linhas dedicadas
interconectam sinais roteados de e para LABs, PLLs, blocos de memória M4K dentro de uma
mesma linha. Essas linhas incluem (1) interconexões de lin ks diretos entre LABs e blocos
adjacentes e (2) R4 Interconnect (Row4) que liga quatro blocos ( Figura 19).
32
Figura 18 – LE em Modo Aritmético DinâmicoFONTE: ALTERA (2007)
Figura 19 – Conexões de InterconnectFONTE: ALTERA (2007)
A interconexão de colunas opera similarmente a interconexão de linhas. Colunas
dedicadas interconectam sinais roteados de e para LABs, PLLs, blocos de memória M4K
verticalmente. Essas colunas incluem: cadeias de LUTs dentro de uma LAB, cadeias de
registradores programáveis dentro de um LAB, C4 interconecta quatro blocos.
A memória embarcada do Cyclone consiste em colunas de blocos da memória M4K.
Cada bloco de M4K pode executar vários tipos de memória com ou sem paridade. Incluindo
dual-port verdadeiro, dual-port simples e single-port de RAM (Random Access Memory), ROM
33
(Read-Only Memory) e FIFO (First In First Out). A Figura 20 apresenta os sinais de controle dos
blocos de memória e a Figura 21 mostra a relação entre linhas dos LABs com os blocos de
memória do M4K.
Figura 20 – Sinais de Controle do Bloco M4K RAMFONTE: ALTERA (2007)
Figura 21 – Relação de Linhas do LAB com blocos M4K RAMFONTE: ALTERA (2007)
34
CAPÍTULO 3 – ESPECIFICAÇÃO DO PROJETO
Este capítulo tem por objetivo descrever os principais componentes e funcionalidades do
hardware e do software que compõem o sistema. A seguir na Figura 22 – Diagrama em Blocos
do Sistema, segue a visão geral e a descrição funcional de cada módulo do sistema.
Figura 22 – Diagrama em Blocos do Sistema
O sistema apresentado consiste em um hardware dedicado ao processamento de imagens
digitais, que acoplado ao um computador PC, poderá efetuar diversas operações e aplicar alguns
filtros sobre imagens.
Há um software que é executado no PC e que faz a pré-leitura destas imagens,
fornecendo ao usuário uma lista com as operações disponíveis. Este software também faz a
comunicação paralela com o hardware, enviando a imagem selecionada e a operação desejada.
O módulo de hardware é composto de uma FPGA, que executa todo o processamento da
imagem e uma memória interna onde são armazenados temporariamente as imagens e os
resultados das operações.
3.1 Módulo de Software
Foi desenvolvido um software em linguagem Java, que rodará em plataforma Windows e
necessariamente terá as seguintes funcionalidades:
35
Função para o usuário selecionar a imagem a ser tratada
Exibição da imagem selecionada, antes do processamento
Área para usuário selecionar quais operações deseja aplicar à imagem
Função para envio da imagem ao módulo de hardware
Exibição da imagem após o processamento
Função para salvar a imagem tratada ou aplicação de novas operações
A Figura 23 – Fluxograma de Operação de Software apresenta o fluxograma de utilização
do software de controle.
Figura 23 – Fluxograma de Operação de Software
36
3.2 Módulo de Hardware
O coração do sistema é a FPGA, que funciona como uma unidade de processamento
gráfico. Todas as operações são realizadas através dela, que por sua vez será dividida em 4
módulos:
Protocolo de Comunicação
Unidade de Controle
Memória Interna
Operações de Processamento
Figura 24 – Módulo de Hardware
37
3.2.1 Prococolo de Comunicação
Foi desenvolvido um protocolo para comunicação com o computador PC e o software já
citado no item 3.1. A ligação física entre os co mponentes se dará através de um cabo de 1 4
pinos, sendo 6 pinos para controle de controle de conexão e 8 pinos para transmissão de dados .
3.2.2 Unidade de Controle
Um módulo dedicado ao controle do bloco de operações, passando os parâmetros
necessários a cada uma das operações. Após o processamento ser concluído, envia um sinal
indicando ao módulo de comunicação que a imagem está pronta a ser transferida de volta.
3.2.3 Operações de Processamento
Neste módulo, foram implementados os seguintes algoritmos de processame nto de
imagens:
Operação Lógica NOT.
Limiarização.
Filtro de Convolução.
Filtro de Mediana.
3.2.4 Memória Interna
O sistema trabalha com a memória interna da FPGA . No caso do chip Cyclone II, são
aproximadamente 7 Kilobytes de memória RAM. Como as imagens serã o transferidas sem
compactação, teremos que seguir a limitação de imagens de no máximo 72x72 pixels.
3.3 Operações e Algoritmos de Processamento de Imagens
Neste tópico serão apresentados os algoritmos de processamento de imagens disponíveis
no módulo de hardware.
3.3.1 Processamento Espacial
A Binarização é uma operação simples que exige um parâmetro Limiar, e é aplicada
ponto a ponto em todos os pixels da imagem. Qualquer ponto cujo valor esteja acima deste limiar
38
é passado ao valor máximo 255 e qualquer ponto c ujo valor esteja abaixo deste limiar é passado
ao valor mínimo 0. O resultado é uma imagem preto e branco com as regiões branca e preta,
sendo formadas de acordo com o limiar informado.
A Aplicação de Máscara é o resultado prático do Teorema da Convolução. Recebe
como parâmetro uma Máscara, que é uma matriz de tamanho n x n que é aplicada ponto a ponto
na imagem. O valor de cada pixel é calculado pela convolução dos pixels ao seu redor: Digamos
que a máscara desejada seja a apresentada a seguir:
w1 w2 w3w4 w5 w6w7 w8 w9
De acordo com o teorema da convolução, o valor do pixel seria dado por:
R= w1*z1 + w2*z2 + w3*z3 + ... + w9*z9 onde zn é o valor atual do pixel.
Equação 9 – Teorema da Convolução
O Filtro Passa-Baixa é um filtro de suavização que exige como Máscara de entrada,
uma matriz onde todos os valores sejam positivos. O valor de cada pixel é calculado em função
da média de seus vizinhos.
O Filtro por Mediana também é um filtro de suavização. O valor de cada pixel é
substituído pela mediana de seus vizinhos, ordenados primeiramente de maneira crescente ou
decrescente. Não há parâmetros para esta operação.
O Filtro Passa-Alta também é uma operação que recebe uma Máscara como parâmetro
e esta máscara é aplicada a todos o s pixels da imagem. A diferença desta operação é que a
máscara fornecida deve conter o valor w5 positivo e todos os outros como negativos, resultando
em um aguçamento das bordas, sobre um fundo bastante escuro.
39
CAPÍTULO 4 – PROJETO DO SISTEMA
Neste capítulo será apresentada uma descrição detalhada de todos com componentes que
compõem o sistema, assim como a maneira como estes componentes interagem entre si para o
funcionamento adequado do sistema.
O sistema é composto por um módulo de software rodando em um PC, que controla um
módulo de hardware que executa o processamento de imagens. A comunicação entre estes dois
módulos é feita através da porta paralela do microcomputador.
É através do módulo de software que o usuário seleciona a imagem desejada, escolhe a
operação a ser aplicada na imagem e após o processamento, é dada a opção para salvar a imagem
resultante.
4.1 Requisitos do Sistema
O sistema requer um computador PC, rodando sistema operacional Microsoft Windows
XP, dotado de uma porta paralela funcionando no mod o EPP. Também é necessário que esteja
instalado a Java Virtual Machine v1.6.
4.2 Módulo Software – Interface com o Usuário
A Figura 25 – Protótipo de Tela de Controle do Sistema é a tela principal do sistema.
Nela é possível visualizar os elementos que fazem todo o controle do hardware.
40
Figura 25 – Protótipo de Tela de Controle do Sistema
4.2.1 Funcionalidades
Carregar Imagem: Usuário é capaz carregar de alguma de suas unidades de
armazenamento, uma imagem nos f ormatos BMP ou JPG que será o alvo das operações
desejadas. A imagem escolhida é convertida para 255 níveis de cinza.
Escolher Operação: As operações que o sistema é capaz de executar são divididas entre
básicas pixel a pixel e os filtros espaciais. Estas operações serão descritas mais
detalhadamente em tópicos futuros, porém é através do módulo de software que o usuário
escolhe a função que será aplicada à imagem.
Definir Parâmetros: Cada operação possui parâmetro específicos que influenciam
diretamente no resultado final da imagem. Após selecionar a operação, é dada a opção ao
usuário de fazer esta parametrização.
Processar: Ao executar esta função o usuário confirma as opções selecionadas
anteriormente e envia a imagem ao módulo de hardware, juntamente co m os parâmetros
necessário ao processamento. Após a finalização do processamento, é retornada a
imagem resultada para exibição na tela.
41
Salvar Imagem: Uma vez a imagem resultante esteja na tela, é através desta opção o
usuário pode salvar esta imagem em di sco para uso futuro.
Salvar Log: O sistema grava um log com todas as ações efetuadas pelo usuário. Através
desta opção o usuário pode salvar este log em diso para posterior análise.
4.2.2 Projeto da Aplicação Cliente
Como já citado anteriormente, a aplicação cl iente foi desenvolvida em linguagem Java e
alguns conceitos de engenharia de software foram diretamente aplicados. A aplicação foi
desenvolvida inteiramente orientada a objetos, com utilização da arquitetura em camadas, o que
facilitaria a manutenção e substituição de qualquer componente no futuro.
O projeto de software foi dividido em três pacotes:
br.com.engcomputacao.dip.Imaging: Contendo as classes para manipulação,
leitura e persistência das imagens
br.com.engcomputacao.dip.Interface: Contendo as class es para a interação com o
usuário e controle dos demais módulos.
br.com.engcomputacao.dip.Transfer: Contendo as classes para comunicação com
o módulo de hardware.
jnpout32: Contendo as classes que abstraem o acesso ao hardware e fornecem
métodos para escrita e leitura das portas de comunicação do computador.
4.2.2.1 Diagrama de Classes
Image.java: Classe utilizada para manipular imagens.Atributos:bitmap Matriz de pixels da imagem.img Abstrai a imagem a ser manipulada.
Métodos:Image Construtor da classe, reponsável por ler a
imagem do disco.@param filename
printMatrix Imprime a matriz de pixels da imagemcarregada.
saveImage Salva a imagem carregada.@param filename: Nome do arquivo a sersalvo.@param formato: Formato da imagem: JPEG,BMP, GIF, PNG
saveMatrix Salva a matriz de pixels da imagemcarregada em um arquivo: matriz.txt
toGrayscale Converte uma imagem colorida para niveisde cinza.
42
A cada pixel é atribuído um valor de 0 a255.
ImageOperations.java: Classe que define as constantes de cada operação. A FPGA conhece cadaconstante definida aqui e seus valores não podem mudar.
Atributos:Cada atributo é uma constante acessada demaneira estática pelas outras classes .
DipTransferController.java: Classe controladora da transferência PC FPGA.Atributos:imageFile Imagem a ser transferidaLPT1 Abstração da porta paralela.stateMachine Máquina de estados que controla a
transferência
Métodos:DIPTransferController
Construtor da classe, reponsávelpor instanciar os atributosprivados.
jumpAddress Método para pular posicões dememoria e incrementar ponteiro daFPGA. Apenas é simulado orecebimento de um byte.@param num: Numero de posicoes aser pulado
receiveByte Método para receber um byte daFPGA.@return byte recebido
receiveHeaders Método de recebimento doscabeçalhos da imagem e parametros .
receiveImage Método para receber uma imagemapós processamento na FPGA.
sendByte Método para enviar um byte do PCp/ FPGA.@param value: byte a ser enviado
sendHeaders Método de envio dos cabeçalhos daimagem e parametros.
sendImage Método para enviar uma imagem paraprocessamento na FPGA.@param filename: arquivo a serenviado à FPGA
waitProcessing Aguarda resposta da FPGA.
43
EPPControl.java: Classe utilizada para controlar o funcion amento da porta paralela no modoEPP.
Atributos:controlAddress Endereço dos pinos de controle da portadataAddress Endereço dos pinos de dados da porta .portValue Valor atual da porta.pp Abstração de uma porta de comunicação.statusAddress Endereço dos pinos de status da porta.
Métodos:EPPControl Construtor da classe, responsável por
instanciar os atributos privados.pinInterrupt Recupera o valor atual do pino de
interrupção da porta.@return 1 ou 0
pinWait Valor atual do pino de espera da port a.@return 1 ou 0
read Método para ler da porta paralela.@param address: endereço a qual o dadoserá enviado@return value: valor atual do endereço
readControl Método para ler o valor dos pinos decontrole.@return value: valor atual dos pinos
readData Método para ler o valor dos pinos dedados.@return value: valor atual dos pinos
readStatus Método para ler o valor dos pinos destatus.@return value: valor atual dos pinos
write Método para escrever na porta paralela.@param value: valor a ser enviado
writeControl Método para escrever nos pinos decontrole.@param value: valor a ser enviado
writeData Método para escrever nos pinos dedados.@param value: valor a ser enviado
writeStatus Método para escrever nos pinos destatus.@param value: valor a ser enviado
44
TransferMachine.java: Classe utilizada para definir o comportamento da máquina de estadosprojetada para controlar a transferência de dados entre o PC e a FPGA .
Atributos:estadoAtual Estado em que a máquina se encontra
no instante atual.mode Define a direção da transferência,
envio ou recebimento.BEGIN_PROCESSING
Constante que informa à FPGA que atransferência foi concluída e oprocessamento pode ser iniciado.
RECV_* Constantes que definem o valor de umestado de recebimento. A FPGA possuios mesmos valores para controle damáquina interna.
RESET Estado inicial da máquina, reiniciatodos os processos.
SEND_* Constantes que definem o valor de umestado de envio. A FPGA possui osmesmos valores para controle damáquina interna.
Métodos:beginProcessing Seta o estado atual da máquina com a
constante BEGIN_PROCESSING.nextStep Seta o estado atual da máquina com a
próxima constante do processo.resetTransfer Seta o estado atual da máquina com a
constante RESET.setMode Seta a direção de transferência,
envio ou recebimento.
45
Aplicacao.java: Classe principal, responsável pelo gerenciamento do hardware e interação com ousuário.
Atributos:dip Controlador da Tranferência.
Métodos:Aplicação Construtor da classe,
responsável por instanciar osatributos privados.
addLog Adiciona o último evento najanela de log.@param line: linha a seradicionada
clickCarregarImagem
Abre uma janela para escolha daimagem a ser processada.
clickClearLog
Limpa a janela de log.
clickDefinirParametros
Abre janela para entrada dosparâmetros da operaçãoselecionada.
clickProcessar
Faz as verificações necessáriase inicia o processo deenvio/recebimento da imagem.
clickSalvarImagem
Abre uma janela para gravaçãoda imagem processada.
clickSaveLog
Abre uma janela para gravaçãodo arquivo de log.
displayImageOnPanel
Atualiza a imagem no painel devisualização.
getIntegerValue Abre uma janela para entrada deum valor inteiro.@return value: valor de 0 a255.
getMatrix3x3 Abre uma janela para entrada deuma matriz 3x3.@return value[9]: matriz 3x3 deinteiros
getOperationValue Retorna o valor da operaçãoselecionada na tela.@return opcode: constante daoperação selecionada
getParams Retorna os parâmetros daoperação.@return Object: parâmetro daoperação
hardwareProcessing Efetua o processo deenvio/processamento/recebimentoda imagem.
imageLoaded Retorna se existe uma imagemcarregada no painel devisualização.@return true ou false
main Método inicial do aplicativo,mostra a tela principal.
showConfirmBox Exibe uma janela deconfirmação.
showErrorBox Exibe uma janela de erro.showInfoBox Exibe uma janela de informação.
46
4.2.2.2 Características da Aplicação
Ao se iniciar a aplicação, é exibida a tela ao usuário, mostrada na Figura 25 – Protótipo
de Tela de Controle do Sistema . Uma vez selecionada a imagem desejada o sistema executa um
processo de converter esta imagem para uma matriz de pixels. Esta matriz é que será enviada à
FPGA, juntamente com as dimensões da imagem e parâmetros de operação.
Cada vez que a imagem é atualizada, tanto na abertura de uma nova imagem quanto no
recebimento do resultado do processamento, a matriz de pixels também é atualizada. Esta matriz
é salva em um arquivo ‘matriz.txt’ que pod e ser utilizado para validação dos resultados e
conferência do valor de cada pixel.
A aplicação oferece ao usuário a possibilidade de escolher entre duas operações básicas
de processamento de imagens: Operação lógica NOT e Binarização. Além da possibilidad e de
aplicar Filtros de Convolução: Passa -Alta e Passa-Baixa e também um Filtro de Mediana.
Outras opções estão desabilitadas na interface pois durante a implementação do projeto
tais operações se mostraram inviáveis de serem desenvolvidas principalmente d evido à sua
complexidade, são elas as operações de domínio da frequência.
4.3 Módulo de Hardware
Para implementação deste módulo foi escolhida uma FPGA Altera da família Cyclone. O
principal motivo para escolha deste chip foi a disponibilidade de kits de dese nvolvimento nos
laboratórios do Unicenp, assim como também ferramentas eficientes para o projeto.
Como estamos trabalhando com imagens a principal limitação na escolha deste hardware
foi a pequena quantidade de memória RAM interna, o que nos limitou a trab alhar com imagens
de no máximo 72x72 pixels. Esta característica já havia sido levantada durante a especificação
do projeto, porém como o objetivo maior é mostrar a viabilidade de implementar estes
algoritmos em hardware não é um fator impeditivo.
A opção de projeto foi desenvolver o módulo todo baseado em componentes individuais
que mais tarde pudessem ser acoplados aos outros de forma a montar a arquitetura mostrada na
Figura 26 – Arquitetura do Módulo de Hardware . Esta arquitetura também permite que mais
algoritmos possam ser implementados futuramente, uma vez que cada operação é um bloco
individual e todas as operações não invadem os outros blocos.
47
Figura 26 – Arquitetura do Módulo de Hardware
O módulo de hardware foi desenvolvido inteiramente em linguagem VHDL e como já
apresentado na Figura 26 – Arquitetura do Módulo de Hardware , os principais componentes são:
Protocolo de Comunicação: É a camada do hardware que se comunica com o
microcomputador e armazena os dados recebidos na memória interna.
Unidade de Controle de Operações: Esta unidade faz a leitura da memória para
verificar qual operação foi escolhida e os parâmetros necessários para sua
aplicação. Após a leitura destes dados, ativa uma das unidades de processamento
de acordo com a operação.
Controlador de Acesso de Memória: É o componente que faz o controle da
memória RAM interna. Como são diversos componentes compartilhando o
mesmo recurso, é responsável por multiplexa r o acesso.
48
Memória de Trabalho: Interna à FPGA é uma memória de acesso rápido para
efetuar as operações e aplicar os algoritmos em cada um dos pontos que
compõem a imagem. Composta dos blocos M4K RAM já citados anteriormente.
Operação NOT: Componente que efetua a operação lógica NOT em imagens.
Mais detalhes serão fornecidos ainda neste capítulo.
Operação Limiarização: Componente que efetua a operação de binarização em
imagens. Mais detalhes serão fornecidos ainda neste capítulo.
Operação Filtro Convolução: Componente que aplica filtros de convolução em
imagens. Mais detalhes serão fornecidos ainda neste capítulo.
Operação Filtro de Median: Componente que aplica um filtro de mediana em
imagens. Mais detalhes serão fornecidos ainda neste capítulo.
4.3.1 Protocolo de Comunicação
O módulo de software faz o envio e recebimento da imagem à FPGA através da porta
paralela do microcomputador. Esta porta é composta de 25 pinos, dos quais 13 pinos estão
disponíveis para a comunicação. A Figura 27 – Esquema de Funcionamento da Porta Paralela
apresenta o funcionamento desta porta.
Figura 27 – Esquema de Funcionamento da Porta Paralela
49
O protocolo de comunicação estabelecido, possui 2 modos de operação: Escrita, que faz o
envio de dados à FPGA para armazenamento em memórias auxiliares e o de Leitura que recebe
dados da FPGA para visualização no módulo de software.
O ciclo de escrita é apresentado na Figura 28 – Ciclo de Envio de um Byte .
Figura 28 – Ciclo de Envio de um Byte
O ciclo de leitura é apresentado na Figura 29 – Ciclo de Recebimento de um Byte .
Figura 29 – Ciclo de Recebimento de um Byte
O módulo de comunicação foi implementado na FPGA e seu diagrama esquemático
consta na Figura 30 – Diagrama Esquemático: Módulo de Comunicação.
50
Figura 30 – Diagrama Esquemático: Módulo de Comunicação
Este componente é composto de três processos, um para controle de endereçamento e
status, uma máquina de estados para controle da transferência de dados e um último que realiza o
acesso à memória interna.
4.3.1.1 Controle de endereçamento e status
Este processo controla o ponteiro qu e define a posição de memória na qual o byte
recebido será gravado. O ponteiro interno é incrementado cada vez que a máquina de estados
chega no último passo para a transferência de um byte. Existem dois sinais
begin_processing e transfering que servem para informar às outras unidades da
arquitetura o andamento da transferência e o momento de iniciar o processamento . Um sinal de
entrada processing_ok é disponibilizado às outras unidades para informar que o
processamento está finalizado.
4.3.1.2 Controle da transferência de dados
Este processo controla a máquina de estados que executa a leitura /escrita byte a byte da
imagem recebida/enviada. Existem quatro pinos de controle p_control[3..0] que são lidos
e que definem qual o próximo estado da máquina e a ação a ser ex ecutada no momento. Os
estados desta máquina são: idle, waitdata, receiveok . Indicando respectivamente que a máquina
está: parada, aguardando dado e dado recebido, respectivamente.
4.3.1.3 Acesso à memória Interna
Dependendo da direção do fluxo de dados, solicita ao controlador de acesso à memória ,
escrita ou leitura de dados. Fornece os pulsos de clock e sinais de controle necessários para tais
acessos.
51
4.3.1.4 Sinais do Componente
A tabela a seguir descreve todos os sinais deste componente e suas funções.
Tabela 2 – Sinais de Controle: Módulo de Comunicação
Direção Nome Descrição
entrada p_control[3..0] Pinos de controle da máquina
de estados de transferência
entrada data_from_memory[8..0] Entrada de dados provenientes
da memória RAM
entrada clk Sinal de clock global
entrada processing_ok Sinal que indica que o
processamento está finalizado
bidirecional p_data[8..0] Comunicação de dados com a
porta paralela
saída data_to_memory[8..0] Saída de dados com destino à
memória RAM
saída p_interrupt Pino de status da transferência
saída p_wait Pino de status da transferência
saída address[12..0] Ponteiro de endereçamento
saída wren Sinal que ativa a leitura ou
escrita na memória RAM
saída clk_ram Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
saída begin_processing Sinal que informa outros
componentes que o
processamento pode ser
iniciado
saída transfering Sinal que informa outros
componentes que uma
transferencia de dados está em
andamento
52
4.3.2 Unidade de Controle
Este componente monitora quando deve ser iniciado o processamento e ativa o bloco
correspondente à operação desejada . O sinal begin_processing indica que a transferência
de dados terminou e que a memória RAM deve ser acessada para verificar qual o código d e
operação foi enviado e qual é o bloco que deve ser ativo.
Além de ativar o bloco de operação, fornece ao controlador de acesso à memória a
informação de qual bloco deve ganhar acesso à memória no momento. Após ativar o bloco de
operação fica aguardando uma resposta do mesmo, indicando que o processamento foi
concluído.
Cada bloco de operação é ativado de acordo com um código gravado na posição de
memória 50. Estes códigos são os mesmos já citados na classe ImageOperations.java, já citados
anteriormente. A Tabela 3 – Códigos de Operações, contempla todos estes códigos.
Tabela 3 – Códigos de Operações
Constante Valor Operação
ImageOperations.OP_NOT 0x05h Operação NOT
ImageOperations.OP_BINARIZACAO 0x06h Operação
Limiarização
ImageOperations.OP_OP_FILTRO_PASSA_BAIXA 0x08h Filtro de Convolução
ImageOperations.OP_OP_FILTRO_POR_MEDIANA 0x09h Filtro de Mediana
ImageOperations.OP_OP_FILTRO_PASSA_ALTA 0x0Ah Filtro de Convolução
O diagrama esquemático do comp onente é apresentado na Figura 31 – Diagrama
Esquemático: Unidade de Controle , assim como seus sinais de entrada e saída na Tabela 4 –
Sinais de Controle: Unidade de Controle .
Figura 31 – Diagrama Esquemático: Unidade de Controle
53
Tabela 4 – Sinais de Controle: Unidade de Controle
Direção Nome Descrição
entrada clk Sinal de clock global
entrada transfering Sinal que indica que uma
transferência de dados está em
curso
entrada begin_processing Sinal que indica que a
transferência terminou e o
processamento deve iniciar
entrada data_from_memory[8..0] Entrada de dados provenientes
da memória RAM
entrada finish_op[3..0] Sinal que recebe a informação
que o processamento está
concluído.
saída processing_ok Sinal que indica ao módulo de
comunicação que o
processamento está finalizado
e a transferência de iniciar
saída sel_memory_mux[2..0] Indica ao controlador de
acesso à memória, qual bloco
deve possuir o acesso
saída address[12..0] Ponteiro de endereçamento
saída wren Sinal que ativa a leitura ou
escrita na memória RAM
saída clk_ram Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
saída start_op[3..0] Sinal que indica qual bloco de
operação deve ser ativo
4.3.3 Controlador de Acesso à Memória
Este bloco tem exatamente o funcionamento de um multiplexador. A sua característica é
fornecer oito pontos de acesso à uma única memória RAM, mediante um sinal de controle que é
recebido da unidade de controle.
54
O sinal sel[2..0] define quem terá acesso à RAM no momento e conecta os sinais
data[8..0], wren, address[12..0], clock, q[8..0] da memória ao bloco
ativo.
O diagrama esquemático do componente é apresentado na Figura 32 – Diagrama
Esquemático: Controlador de Acesso à Memória , assim como seus sinais de entrada e saída na
Tabela 5 – Sinais de Controle: Controlador de Acesso à Memória .
Figura 32 – Diagrama Esquemático: Controlador de Acesso à Memória
Tabela 5 – Sinais de Controle: Controlador de Acesso à Memória
Direção Nome Descrição
entrada datain[7..0][8..0] Oito entradas de dados
provenientes dos blocos de
operação e demais
componentes da arquitetura
entrada Address[7..0][12..0] Oito entradas de
endereçamento provenientes
dos blocos de operação e
demais componentes da
arquitetura
55
entrada wren[7..0] Oito sinais de controle de
escrita e leitura provenientes
dos blocos de operação e
demais componentes da
arquitetura
entrada clk[7..0] Oito sinais de clock para
gravação e leitura
provenientes dos blocos de
operação e demais
componentes da arquitetura
saída dataout[7..0][8..0] Oito saídas de dados
provenientes dos blocos de
operação e demais
componentes da arquitetura
saída RAM_datain[8..0] Saída de dados para gravação
na memória RAM
saída RAM_address[8..0] Endereçamento da memória
RAM
saída RAM_wren Sinal de controle de escrita e
leitura da memória RAM
saída RAM_clk Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
4.3.4 Operação NOT
Este bloco tem a função de buscar a imagem da memória RAM e aplicar a operação
lógica NOT em cada um dos pixels da imagem.
Em um primeiro momento as informações de altura e largura d a imagem são lidas da
memória e com esta informação são lidos todos os pixels da imagem, invertendo seu valor e
gravando novamente na mesma posição de memória.
Após o término da operação em todos os pixels da imagem, um sinal finish_op é
enviado à unidade de controle, informando que o processamento foi finalizado com sucesso.
56
O diagrama esquemático do componente é apresentado na Figura 33 – Diagrama
Esquemático: Operação NOT, assim como seus sinais de entrada e saída na Tabela 6 – Sinais de
Controle: Operação NOT.
Figura 33 – Diagrama Esquemático: Operação NOT
Tabela 6 – Sinais de Controle: Operação NOT
Direção Nome Descrição
entrada OP1_datain [8..0] Entradas de dados proveniente
da memória RAM
entrada clk Sinal de clock global
entrada OP1_start_op Sinal que informa o bloco que
o processamento deve ser
iniciado
saída OP1_address[12..0] Ponteiro de endereçamento
saída OP1_dataout[8..0] Saídas de dados com destino à
memória RAM
saída OP1_wren Sinal de controle de escrita e
leitura da memória RAM
saída OP1_clk_ram Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
saída OP1_finish_op Sinal que informa à unidade
de controle que o
processamento foi finalizado
57
4.3.5 Operação Limiarização
Este bloco tem a função de buscar a imagem da memória RAM e aplicar um limiar em
cada um dos pixels da imagem. Em um primeiro momento as informações de altura e largura d a
imagem são lidas da memória , assim como também o limiar passado como parâmetro .
A operação consiste em alterar o valor dos pixels para 255 quando o valor atual for maior
que o limiar e alterar para 0 quando o valor atual for menor que o limiar.
Após o término da operação em todos os pixels da imagem, um sinal finish_op é
enviado à unidade de controle, informando que o processamento foi finalizado com sucesso.
O diagrama esquemático do componente é apresentado na Figura 34 – Diagrama
Esquemático: Operação Limiarização , assim como seus sinais de entrada e saída na Tabela 7 –
Sinais de Controle: Operação Limiarização .
Figura 34 – Diagrama Esquemático: Operação Limiarização
Tabela 7 – Sinais de Controle: Operação Limiarização
Direção Nome Descrição
entrada OP2_datain [8..0] Entradas de dados proveniente
da memória RAM
entrada clk Sinal de clock global
entrada OP2_start_op Sinal que informa o bloco que
o processamento deve ser
iniciado
saída OP2_address[12..0] Ponteiro de endereçamento
saída OP2_dataout[8..0] Saídas de dados com destino à
memória RAM
saída OP2_wren Sinal de controle de escrita e
leitura da memória RAM
saída OP2_clk_ram Sinal que fornece a borda de
58
descida para leitura e
gravação da memória RAM
saída OP2_finish_op Sinal que informa à unidade
de controle que o
processamento foi finalizado
4.3.6 Operação Filtro de Convolução
Este bloco tem a função de buscar a imagem da memória RAM e aplicar um filtro de
convolução em cada um dos pixels da imagem. Em um primeiro momento as informações de
altura e largura da imagem são lidas da memória, assim como também a matriz de máscara
passada como parâmetro.
A operação consiste aplicar a cada pixel, uma média de sua vizinhança de 8. Para cada
pixel da imagem, busca-se da memória sua vizinhança e efetua -se multiplicações com os valores
da máscara, dividindo o resultado pelo tamanho da janela, que é 9.
Existe uma peculiaridade nas bordas da imagem, onde não existe vizinhança em um ou
mais lados do pixel, então é espelhado o outro lado de forma a manter a média.
Após o término da operação em todos os pixels da imagem, um sinal finish_op é
enviado à unidade de controle, informando que o processamento foi finalizado com sucesso.
O diagrama esquemático do componente é apresentado na Figura 35 – Diagrama
Esquemático: Operação Filtro de Convolução , assim como seus sinais de entrada e saída na
Tabela 8 – Sinais de Controle: Operação Filtro de Convolução .
Figura 35 – Diagrama Esquemático: Operação Filtro de Convolução
Tabela 8 – Sinais de Controle: Operação Filtro de Convolução
Direção Nome Descrição
entrada OP3_datain [8..0] Entradas de dados proveniente
da memória RAM
59
entrada clk Sinal de clock global
entrada OP3_start_op Sinal que informa o bloco que
o processamento deve ser
iniciado
saída OP3_address[12..0] Ponteiro de endereçamento
saída OP3_dataout[8..0] Saídas de dados com destino à
memória RAM
saída OP3_wren Sinal de controle de escrita e
leitura da memória RAM
saída OP3_clk_ram Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
saída OP3_finish_op Sinal que informa à unidade
de controle que o
processamento foi finalizado
4.3.7 Operação Filtro de Mediana
Este bloco tem a função de buscar a imagem da memória RAM e aplicar um filtro de
mediana em cada um dos pixels da imagem.
Em um primeiro momento as informações de altura e largura da imagem são lidas da
memória. A operação consiste aplicar a cada pixel, o valor da mediana de sua vizinhança . Para
cada pixel da imagem, busca -se da memória sua vizinhança e ordena-se de maneira crescente os
valores. O novo valor do pixel será o valor que estiver no meio deste veto r de pixels.
Existe uma peculiaridade nas bordas da imagem, onde não existe vizinhança em um ou
mais lados do pixel, então é espelhado o outro lado de forma a manter a média.
Após o término da operação em todos os pixels da imagem, um sinal finish_op é
enviado à unidade de controle, informando que o processamento foi finalizado com sucesso.
O diagrama esquemático do componente é apresentado na Figura 36 – Diagrama
Esquemático: Operação Filtro de Mediana , assim como seus sinais de entrada e saída na Tabela
9 – Sinais de Controle: Operação Filtro de Mediana.
60
Figura 36 – Diagrama Esquemático: Operação Filtro de Mediana
Tabela 9 – Sinais de Controle: Operação Filtro de Mediana
Direção Nome Descrição
entrada OP4_datain [8..0] Entradas de dados proveniente
da memória RAM
entrada clk Sinal de clock global
entrada OP4_start_op Sinal que informa o bloco que
o processamento deve ser
iniciado
saída OP4_address[12..0] Ponteiro de endereçamento
saída OP4_dataout[8..0] Saídas de dados com destino à
memória RAM
saída OP4_wren Sinal de controle de escrita e
leitura da memória RAM
saída OP4_clk_ram Sinal que fornece a borda de
descida para leitura e
gravação da memória RAM
saída OP4_finish_op Sinal que informa à unidade
de controle que o
processamento foi finalizado
61
CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS
Para validar os resultados das operações disponíveis foram comparados os valores
obtidos na matriz de pixels de cada imagem, com resultados das mesmas operações efetudas via
software Matlab v6.5 que é uma ferramenta técnica de conhecimento geral no meio acadêmico.
Como ficaria de difícil exibição neste documento, matrizes de pixels de imagens com
largura superior a 20 colunas, o padrão definido foi de trabalhar com imagens de 10x10 pixels.
5.1 Operação NOT
Foram executados diversos testes com esta operação e o índice de acerto do sistema foi
de 100%. A seguir segue uma matriz de pixels obtida via hardware e outra pré-calculada.
Tabela 10 – Operação NOT: Matriz de pixels original
255 0 255 251 255 255 244 255 255 245254 255 0 255 247 255 255 243 246 255255 246 255 0 255 243 255 255 245 255250 255 253 255 0 255 255 247 255 255255 251 253 247 255 0 252 255 252 247249 255 255 255 251 239 5 255 255 242255 233 255 255 252 255 250 0 0 25250 255 247 249 255 246 255 0 13 241255 252 255 255 251 249 8 252 240 12250 255 252 245 255 3 252 248 255 232
Tabela 11 – Operação NOT: Matriz de pixels resultado via hardware
0 255 0 4 0 0 11 0 0 101 0 255 0 8 0 0 12 9 00 9 0 255 0 12 0 0 10 05 0 2 0 255 0 0 8 0 00 4 2 8 0 255 3 0 3 86 0 0 0 4 16 250 0 0 130 22 0 0 3 0 5 255 255 2305 0 8 6 0 9 0 255 242 140 3 0 0 4 6 247 3 15 2435 0 3 10 0 252 3 7 0 23
Tabela 12 – Operação NOT: Matriz de pixels resultado esperada
0 255 0 4 0 0 11 0 0 101 0 255 0 8 0 0 12 9 00 9 0 255 0 12 0 0 10 05 0 2 0 255 0 0 8 0 00 4 2 8 0 255 3 0 3 86 0 0 0 4 16 250 0 0 130 22 0 0 3 0 5 255 255 2305 0 8 6 0 9 0 255 242 140 3 0 0 4 6 247 3 15 2435 0 3 10 0 252 3 7 0 23
62
Figura 37 – Imagem OriginalFigura 38 – Imagem Resultado
5.2 Operação de Limiarização
Foram executados diversos testes com esta operação e o índice de acerto do sistema foi
de 100%. A seguir segue uma matriz de pixel s obtida via hardware e outra calculada
previamente.
Esta operação tem como parâmetro um limiar, que foi definido para o valor 100.
Tabela 13 – Operação Limiarização: Matriz de pixels original
251 0 242 232 255 255 255 255 136 255255 234 4 247 240 255 255 136 255 255239 254 240 0 255 255 255 130 255 255148 146 103 109 151 129 134 176 134 133255 255 241 238 255 104 255 255 255 255255 245 225 245 85 255 21 255 255 250255 252 247 251 103 255 255 12 14 820 34 16 19 23 39 20 13 15 12255 255 110 255 255 255 8 255 234 2255 240 255 255 255 0 255 255 247 215
Tabela 14 – Operação Limiarização: Matriz de pixels resultado via hardware
255 0 255 255 255 255 255 255 0 255255 255 0 255 255 255 255 0 255 255255 255 255 0 255 255 255 0 255 255255 255 255 255 255 255 0 255 255 255255 255 255 255 255 0 255 255 255 255255 255 255 255 0 255 0 255 255 255255 255 255 255 0 255 255 0 0 00 0 0 0 0 0 0 0 0 0
255 255 0 255 255 255 0 255 255 0255 255 255 255 255 0 255 255 255 255
63
Tabela 15 – Operação Limiarização: Matriz de resultado esperada
255 0 255 255 255 255 255 255 0 255255 255 0 255 255 255 255 0 255 255255 255 255 0 255 255 255 0 255 255255 255 255 255 255 255 0 255 255 255255 255 255 255 255 0 255 255 255 255255 255 255 255 0 255 0 255 255 255255 255 255 255 0 255 255 0 0 00 0 0 0 0 0 0 0 0 0
255 255 0 255 255 255 0 255 255 0255 255 255 255 255 0 255 255 255 255
Figura 39 – Imagem Original Figura 40 – Imagem Resultado
5.3 Operação Filtro Passa-Baixa
Foram executados diversos testes com esta operação e o índice de acerto do sistema foi
bastante satisfatória. Observou-se uma diferença de valores nas bordas das imagens, mas não
trata-se de um erro e sim uma diferença ocasionada pelo fato do MatLab não tratar a vizinhança
dos pixels da borda espelhando o outro lado do pixel. Observou -se também uma pequena
diferença de valores devido ao fato de trabal harmos exclusivamente com ponto fixo no sistema e
com truncamento da parte não-inteira dos valores.
A seguir segue uma matriz de pixels obtida via hardware e outra calculada previamente.
Esta operação tem como parâmetro uma máscara, que foi definida para:
Tabela 16 – Filtro Passa-Baixa: Máscara de entrada
1 1 1
1 1 1
1 1 1
64
Tabela 17 – Filtro Passa-Baixa: Matriz de pixels original
37 34 36 41 41 37 39 46 38 3840 36 36 39 39 35 34 38 39 3943 37 34 36 38 35 31 31 36 3643 37 34 36 40 40 36 32 31 3441 38 36 38 45 49 46 42 33 3942 43 43 44 49 55 55 50 42 4847 51 52 49 51 56 56 53 47 5252 57 58 52 50 54 55 52 46 5064 49 27 61 52 52 48 44 56 5345 59 59 34 43 40 67 50 53 71
Tabela 18 – Filtro Passa-Baixa: Matriz de pixels resultado via hardware
36 36 37 38 38 37 37 38 39 3837 37 36 37 37 36 36 36 37 3738 37 36 36 37 36 34 34 35 3639 38 36 37 39 40 38 35 34 3640 39 38 40 44 46 45 40 39 4043 43 43 45 48 51 51 47 45 4549 49 49 49 51 53 54 50 48 4953 50 50 50 53 52 52 50 50 5054 52 50 48 48 51 51 52 52 5351 48 46 47 50 55 53 52 50 49
Tabela 19 – Filtro Passa-Baixa: Matriz de pixels resultado calculada
4 7 11 12 13 13 13 13 13 13 8 48 16 24 24 25 25 25 25 26 26 17 813 25 37 36 37 37 36 36 36 37 25 1214 26 37 36 36 37 36 34 34 35 23 1214 26 38 36 37 39 40 38 35 34 23 1214 27 39 38 40 44 46 45 40 39 25 1314 29 43 43 45 48 51 51 47 45 29 1515 32 49 49 49 51 53 54 50 48 31 1618 35 50 50 50 53 52 52 50 50 33 1717 36 52 50 48 48 51 51 52 52 36 1912 24 33 32 30 31 33 33 35 36 25 135 11 18 16 15 13 16 17 18 19 13 7
Figura 41 – Imagem Original Figura 42 – Imagem Resultado
5.4 Operação Filtro Passa-Alta
Foram executados diversos testes com esta operação e o índice de acerto do sistema foi
bastante satisfatória. Observou-se uma diferença de valores nas bordas das imagens, mas não
65
trata-se de um erro e sim uma diferença ocasionada pelo fato do MatLab não tratar a vizinhança
dos pixels da borda espelhando o outro lado do pixel. Observou -se também uma pequena
diferença de valores devido ao fato de trabalharmos ex clusivamente com ponto fixo no sistema e
com truncamento da parte não-inteira dos valores.
A seguir segue uma matriz de pixels obtida via hardware e outra calculada previamente.
Esta operação tem como parâmetro uma máscara, que foi definida para:
Tabela 20 – Filtro Passa-Alta: Máscara de entrada
-1 -1 -1
-1 2 -1
-1 -1 -1
Tabela 21 – Filtro Passa-Alta: Matriz de pixels original
37 34 36 41 41 37 39 46 38 3840 36 36 39 39 35 34 38 39 3943 37 34 36 38 35 31 31 36 3643 37 34 36 40 40 36 32 31 3441 38 36 38 45 49 46 42 33 3942 43 43 44 49 55 55 50 42 4847 51 52 49 51 56 56 53 47 5252 57 58 52 50 54 55 52 46 5064 49 27 61 52 52 48 44 56 5345 59 59 34 43 40 67 50 53 71
Tabela 22 – Filtro Passa-Alta: Matriz de pixels resultado via hardware
24 25 25 24 24 24 24 23 26 2523 25 24 24 24 24 24 24 24 2424 25 24 24 24 24 24 23 23 2424 25 24 25 26 26 26 24 24 2526 27 26 27 29 29 29 26 28 2729 29 29 30 32 33 33 30 31 2933 32 32 33 34 34 35 33 33 3235 31 31 32 36 34 33 33 35 3333 35 41 28 31 33 35 37 34 3536 28 26 36 36 42 31 35 32 26
Tabela 23 – Filtro Passa-Alta: Matriz de pixels calculada
4 7 11 12 13 13 13 13 13 13 8 48 4 13 12 12 12 12 12 10 13 4 813 11 25 24 24 24 24 24 24 24 12 1214 11 25 24 24 24 24 24 23 23 11 1214 12 25 24 25 26 26 26 24 24 11 1214 13 27 26 27 29 29 29 26 28 12 1314 15 29 29 30 32 33 33 30 31 13 1515 16 32 32 33 34 34 35 33 33 14 1618 18 31 31 32 36 34 33 33 35 17 1717 14 35 41 28 31 33 35 37 34 18 1912 9 14 12 19 17 20 11 18 18 2 135 11 18 16 15 13 16 17 18 19 13 7
Matriz de pixels calculada
66
Figura 43 – Imagem Original Figura 44 – Imagem Resultado
5.5 Operação Filtro Mediana
Foram executados diversos testes com esta operação e o índice de acerto do sistema foi
bastante satisfatória. Observou-se uma pequena diferença nos resultados, porém até a data de
apresentação do projeto o problema não havia sido solucionado .
A seguir segue uma matriz de pixels obtida via hardware e outra calculada previamente.
Esta operação tem como parâmetro uma máscara, que foi definida para:
Tabela 24 – Filtro de Mediana: Matriz de pixels original
37 34 36 41 41 37 39 46 38 3840 36 36 39 39 35 34 38 39 3943 37 34 36 38 35 31 31 36 3643 37 34 36 40 40 36 32 31 3441 38 36 38 45 49 46 42 33 3942 43 43 44 49 55 55 50 42 4847 51 52 49 51 56 56 53 47 5252 57 58 52 50 54 55 52 46 5064 49 27 61 52 52 48 44 56 5345 59 59 34 43 40 67 50 53 71
Tabela 25 – Filtro de Mediana: Matriz de pixels resultado via hardware
36 36 36 39 39 38 38 39 39 3937 37 36 39 39 38 36 38 38 3837 37 36 37 39 37 35 35 36 3838 38 37 37 39 40 38 35 35 3742 42 38 42 45 48 48 42 41 4143 43 44 47 49 53 54 49 48 4851 52 52 51 52 55 55 53 50 5152 52 52 52 52 53 54 53 52 5357 58 58 52 52 52 52 53 53 5449 48 47 48 52 55 54 55 53 53
67
Tabela 26 – Filtro de Mediana: Matriz de pixels calculada
37 37 37 37 38 38 38 38 38 3839 36 36 38 38 38 39 39 39 3837 37 37 36 36 36 36 36 36 3537 37 37 37 36 36 34 34 34 3438 38 41 41 41 39 39 39 42 4243 43 43 44 44 48 48 48 49 5051 51 51 51 51 52 52 52 52 5352 54 54 52 52 52 52 50 50 5252 52 52 52 52 52 52 53 52 5245 45 45 45 50 53 53 53 53 53
Figura 45 – Imagem OriginalFigura 46 – Imagem Resultado
68
CAPÍTULO 6 – CONCLUSÃO
Este projeto contempla um sistema de processamento digital de imagens baseado em
hardware reconfigurável implementado em uma FPGA. As operações disponíveis são
principalmente de suavização e realce.
A implementação de algoritmos em linguagem de descrição de hardware é bastante
trabalhosa e muito mais complexa do que quando utilizando linguagens de alto nível. A não
existência de estruturas de dados complexas foi uma da s grandes dificuldades no
desenvolvimento deste projeto.
Os resultados obtidos foram muito bons, conforme apresentados no capítulo anterior. O s
algoritmos implementados tiveram a validação do funcionamento e a performance do sistema foi
excelente, visto que o único gargalo ficou sendo a quantidade de memória . Realmente provou-se
viável efetuar a implementação de processamento de imagens em FPGA’s.
Entre os aspectos do projeto que poderiam ter sido melhorados está um módulo extra de
memória, para se poder trabalhar com imagens de resolução maior. Apesar da validação
matemática dos métodos, ficou um pouco difícil a v isualização das imagens devido ao seu
tamanho reduzido.
Uma melhoria deste projeto seria a implementação de algoritmos de processamento de
imagens no domínio da frequência, que partem do algoritmo de FFT, passando por filtros e FFT
inversa.
69
CAPÍTULO 7 – REFERÊNCIAS BIBLIOGRÁFICAS
ALTERA CORPORATION. FPGA Cyclone – DATASHEET. Disponível na Internet em
http://altera.com/literature/hb/cyc/cyc_c5v1_01.pdf. Acessado em março de 2007.
CASTLEMAN, KENNETH R. Digital Image Processing . Upper Saddle River, New Jersey,
Prentice Hall, 1996.
D'AMORE, ROBERTO. VHDL : Descrição e Síntese de Circuitos Digitais . Rio de Janeiro,
LTC, 2005.
GONZALEZ, RAFAEL C; WOODS, RICHAR DS E. Processamento de Imagens Digitais .
Editora Edgard Bluncher. São Paulo 2003.
SWOKOWSKI, Earl William. Cálculo com Geometria Analítica. Makron Books, São Paulo
1995.
TANENBAUM, A. S. Organização Estruturada de Computadores . Rio de Janeiro, LTC,
2001.
YALAMANCHILI, S. VHDL starter’s guide . Upper Saddle River, New Jersey, Prentice Hall
1998.
WIKIPEDIA. FPGA. Disponível em : <http://pt.wikipedia.org/wiki/FPGA> . Acesso em
Junho/2007.
70
APÊNDICE A – CRONOGRAMA DO PROJETO
Atividade Prazo
Entrega da Proposta de Projeto Final 05/03/2007
Estudo de Sistemas de Processamento Digitalde Imagens
Março/2007
Entrega das Especificações Técnicas doProjeto
02/04/2007
Estudo e Projeto do Hardware a ser Utilizado Março-Abril/2007
Estudo da Linguagem VHDL Abril-Maio/2007
Entrega da Monografia e dos TestesPreliminares do Projeto
Abril-16/06/2007
Implementação do Protocolo de Comunicaçãoentre Software e Hardware
30/04/2007
Implementação dos Algoritmos deProcessamento de Imagens
Junho-Agosto/2007
Operações no Domínio Espacial Junho/2007
Operações no Domínio da Freqüência Julho/2007
Melhorias e Ajustes Agosto/2007
Apresentação da Prévia da Implementação doProjeto Especificado
06/08/2007
Elaboração da Documentação e Monografia doProjeto
Setembro/2007
Apresentação do Projeto Implementado 01/10/2007
Entrega da Documentação Completa doProjeto
05/11/2007
Defesa Formal do Projeto 26/11/2007
Entrega da Documentação Final do Projeto,Revisada e Corrigida, Monografia, ManuaisTécnico e do Usuário, Artigo Científico.Entrega do CD com os Manuais em FormatoWeb.
10/12/2007