Anda di halaman 1dari 23

ProEikon versão 4.

27 (10/01/2010)
Rotinas e Programas em C++
para Processamento e Análise de Imagens e Vídeos

Autor: Hae Yong Kim


Departamento de Eng. de Sistemas Eletrônicos,
Escola Politécnica, Universidade de São Paulo.
http://www.lps.usp.br/~hae, hae@lps.usp.br

I. Instalação e Copyright
1. Definição
A finalidade do ProEikon é fornecer meios para testar rapidamente novos algoritmos de PAIV
(Processamento e Análise de Imagens e Vídeos).

O Sistema ProEikon consiste de:

1. Biblioteca-ProEikon: Um conjunto de classes, rotinas e “operadores sobrecarregados”


para processamento de imagens e visão computacional (PAIV) escrito em C++;
2. Programas-ProEikon: Um conjunto de programas para PAIV escritos em C++ utili-
zando as rotinas acima.

Proeikon trabalhar em conjunto com outras duas grandes bibliotecas:

a) As rotinas FFMPEG para leitura/gravação de vídeos.


b) As rotinas de OpenCV.

Você também pode fazer programas usando somente a biblioteca OpenCV ou usando somente
as rotinas de FFMPEG.

2. Direitos autorais (copyright):


O ProEikon pode ser utilizado livremente para fins não-lucrativos (acadêmicos e educacio-
nais), desde que:

2.1 Nos trabalhos cientificos (incluindo trabalhos de iniciação científica, trabalhos de formatu-
ra, exercícios-programas de disciplinas, artigos de congressos e revistas) resultantes do uso
desta biblioteca seja feita uma citação de que se utilizou o ProEikon, divulgando o site onde
se encontra o sistema http://www.lps.usp.br/~hae/software. Além disso, envie uma notificação
para mim (hae@lps.usp.br).

2.2 O ProEikon pode ser copiado e distribuído livremente para fins não-comerciais, desde que
o sistema seja distribuído integralmente, nenhum dos seus arquivos seja alterado e o endereço
internet original onde se acha o Sistema-ProEikon seja divulgado:
http://www.lps.usp.br/~hae/software.

1
Para o uso comercial e/ou lucrativo do Sistema-ProEikon (mesmo que seja de apenas um pe-
daço dele), deve entrar em contato comigo: hae@lps.usp.br.

O autor não assume nenhuma responsabilidade por hipotéticos danos que o uso do Sistema-
ProEikon possa causar.

3. Programas a serem instalados


Proeikon foi testado nos seguintes sistemas sem erro: Windows XP, Windows Vista e Win-
dows 7-x64.

Para usar o ProEikon, você deve instalar os seguintes programas:

3.1 Dev-C++:
DEV-C++: O compilador DEVCPP/GCC é antigo mas é leve, sem erros conhecidos, amigá-
vel e roda sem problemas em todos os sistemas operacionais testados. O site oficial de DEV-
C++ é http://www.bloodshed.net/

3.2 ProEikon (obrigatório): proeikon_?????.zip


 Sistema ProEikon versão 4_NS (no sources): Não vem com os programas fontes.

3.3 Algum visualizador de imagens JPG/BMP/TGA/P?M (obrigatório):


Você deve instalar algum programa que permita visualizar imagens
JPG/BMP/TGA/PBM/PGM/PPM. Por exemplo:
 GIMP: GNU Image Manipulation Program. Pode ser obtida gratuitamente.
http://www.gimp.org/
 Paint Shop Pro: Programa comercial. O site oficial de PSP é http://www.corel.com/

3.5 Redistribuíveis de VisualC 2005 (obrigatório se o seu computador não tiver):


 Para usar as funções de OpenCV, é necessário que tenha VisualC2005 instalado, ou
algum programa feito nessa linguagem tenha sido instalado. Caso contrário, deve ins-
talar as funções redistribuíveis:

 http://www.lps.usp.br/~hae/software/vcredist_x86.exe

OU

 http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-
984D-389C36F85647&displaylang=en

3.6 OpenCV 1.1 (opcional):


O mínimo necessário para usar OpenCV já vem dentro do Proeikon. Você pode rodar qual-
quer programa feito para OpenCV sem instalar mais nada. Mas se você quiser o restante do
OpenCV (helps, programas exemplos, etc), pode instalar opcionalmente a biblioteca OpenCV
completa.

2
4. Instalação
4.1 Instalação usando DEVCPP e OpenCV

Tentei facilitar ao máximo a instalação dos programas. Por isso, a instalação deve ser feita
obrigatoriamente no disco rígido C:.

1. Instale o compilador DEV-C++, executando o programa de instalação. Faça a instalação no


diretório default, que é C:\DEV-CPP. Execute dev-cpp uma vez para fazer “first time configu-
ration”.

2. Descompacte proeikon?-???.ZIP, mantendo a estrutura de subdiretórios, para o diretório


C:\ProEikon.

3. Substitua os arquivos devcpp.cfg e devcpp.ini do diretório:

c:\users\nome_do_usuario\appdata\roaming\dev-cpp

pelos mesmos arquivos do diretório c:\proeikon\cfg

O diretório c:\users\nome_do_usuario\appdata\roaming\dev-cpp pode variar de acordo com o


sistema em uso. Por exemplo, usuários em vez de users. Esse diretório provavelmente está “o-
culto”. Você tem que configurar Explorer/DOS-prompt para visualizar os diretórios ocultos.

4. Se você executou o passo 3 com sucesso, pule este passo e vá direto para passo 5. Se
não conseguiu executar o passo 3, execute o programa Dev-C++. Vá para janela tools 
compiler options  compiler e acrescente o comando abaixo em “Add the following com-
mands when calling compiler”:
-Wno-deprecated-declarations -O3 -enable-auto-import -Wall

Também acrescente o comando abaixo em “add these commands to the linker command line”:
-lcv110 -lcvaux110 -lcxcore110 -lcxts001 -lffopencv110 -lhighgui110 -lml110
-lmsvcp80 -lmsvcr80 -lvcomp -lproeikon -lavformat -lavcodec -lavutil -
lavdevice -limgpv

Ao dar “copy paste”, substitua fins de linha por espaços.

3
Agora, vá para janela tools  compiler options  directories  libraries e substitua o conte-
údo pelo diretório “c:\proeikon\bin”, conforme a figura abaixo:

4
Vá para janela tools  compiler options  directories  C++ includes e substitua os diretó-
rios originais pelos diretórios abaixo:
c:\proeikon\opencv
c:\proeikon\lib
c:\proeikon\pvlib
c:\proeikon\ffmpeg

5
5. Acrescente os seguintes diretórios no path:
c:\dev-cpp\bin; c:\proeikon\bin

Em Windows XP, Vista e 7, você deve ir para explorer  meu computador  proprieda-
des  propriedades avançadas  variáveis de ambiente e editar path.

Importante 1: Os diretórios acima devem ser acrescentados ao path já existente. Os diretó-


rios pre-existentes não devem ser apagados.

Importante 2: No path não pode haver espaços brancos. Caso contrário, os diretórios listados
depois do espaço não serão usados.

Exemplo de path incorreto (contém espaços):


C:\WINDOWS\system32;C:\WINDOWS; C:\WINDOWS\System32\Wbem; c:\dev-cpp\bin;
c:\proeikon\bin

Exemplos de paths corretos (não pode conter espaços ou mudanças de linha):


C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\dev-cpp\bin;
c:\proeikon\bin

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
c:\dev-cpp\bin;c:\proeikon\bin

6
Agora, basta abrir uma nova janela DOS para que as novas variáveis de ambiente funcionem.

6. Redistribuíveis de VisualC 2005

Abra prompt do DOS e execute:

c:\>pv

Se não der erro, os redistribuíveis já estão instalados e Proeikon está pronto para ser usado. Se
der erro de execução, instale:

http://www.lps.usp.br/~hae/software/vcredist_x86.exe

O mesmo programa também pode ser baixado diretamente do site da Microsoft:


http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-
389C36F85647&displaylang=en

Pronto!

7
4.2 Atualização do ProEikon sem atualizar Dev-C++:

Às vezes, pode ser que uma nova versão do Sistema-ProEikon esteja disponível, sem que o
DEV-C++ tenha mudado de versão. Neste caso, não é necessário reinstalar DEV-C++. Basta
somente descompactar a nova versão de ProEikon???.ZIP no diretório C:\ProEikon mantendo
a estrutura de subdiretórios.

4.3 Utilização do ProEikon num compilador C++ diferente para Windows ou em Linux

Proeikon em si é facilmente migrável para outros compiladores/sistemas (dispondo dos pro-


gramas fontes). Mas não é fácil integrá-lo com as outras bibliotecas (FFMPEG, OpenCV,
JPEG e MACADAPT).

8
5. Teste de instalação e uso dos programas
5.1 Bibliotecas incluídas:

Proeikon pode trabalhar sozinho ou em conjunto com duas outras bibliotecas:


1) FFMPEG para leitura e escrita de vídeos.
2) OpenCV 1.1.

Assim, pode-se escrever programas que usam:


1) Só funções da Proeikon.
2) As funções da Proeikon e FFMPEG.
3) As funções da Proeikon e OpenCV.
4) As funções da Proeikon, FFMPEG e OpenCV.

Os exemplos de 4 situações acima estão no diretório c:\proeikon\samples:


1) Só funções da Proeikon: teste_img.cpp
2) As funções da Proeikon e FFMPEG: teste_vid.cpp
3) As funções da Proeikon e OpenCV: teste_pv.cpp
4) As funções da Proeikon, FFMPEG e OpenCV: teste_pro.cpp

Experimente carregar, compilar e executar os 4 programas em DEV-CPP. Também leia os


seus códigos fontes.

A compilação também pode ser feita no comando-de-linha com o comando:


C:>CPRO nome_programa_sem_extensao

Para acelerar um pouco a compilação, há 4 comandos para as 4 situações:


1) Só funções da Proeikon: cimg. Neste caso, a compilação será feita usando biblioteca estáti-
ca. Isto é, o arquivo EXE ficará maior, mas não precisará de nenhum DLL para executar.
2) As funções da Proeikon e FFMPEG: cvid. Neste caso, precisará de PROEIKON.DLL e os
DLLs de FFMPEG (av*.dll) para executar.
3) As funções da Proeikon e OpenCV: cpv. Neste caso, precisará de PROEIKON.DLL, os
DLLs de OpenCV (*100.dll) e PVIMG.DLL (biblioteca de funções interface entre proeikon e
opencv) para executar.
4) As funções da Proeikon, FFMPEG e OpenCV: cpro. Neste caso, precisará de todos os DL-
Ls acima para executar.

9
6. Help
6.1 Para quem não conhece bem a linguagem C/C++, recomendo os seguinte livros e sites:

 “B. W. Kernighan, D. M. Ritchie, The C Programming Language, 2nd ed., 1988” para
aprender C.
 “B. Stroustrup, The C++ Programming Language, 3rd ed., 1997” para aprender C++.
 O site http://www.sgi.com/tech/stl/ que contém "Standard Template Library Programmer's
Guide"
 “Help” do antigo compilador Turbo C ++ traz praticamente todas as definições das fun-
ções de C e uma parte das de C++. Esse compilador pode ser obtido gratuitamente de
http://bdn.borland.com/
 “Help” do Visual C++ Express (compilador de C++ da Microsoft). Esse compilador pode
ser obtido gratuitamente.
 Site http://www.cplusplus.com/doc/tutorial/
 Site http://www.cprogramming.com/tutorial.html

6.2 Exemplos de uso do Proeikon podem ser encontrados junto com as transparências dos
meus cursos de processamento de imagens. Em especial, na página:

http://www.lps.usp.br/~hae/apostila

6.3 A biblioteca OpenCV têm help bom que vem junto com o programa de instalação. Se você
instalou OpenCV em c:\opencv, esse help fica localizado em:
file:///C:/OpenCV/docs/index.htm

6.4 A biblioteca FFMPEG tem algum help no site deles, mas não é muito didática.

10
II. Programas-ProEikon1
1. Categorias
O Sistema-ProEikon está dividido em duas partes: Biblioteca-ProEikon e Programas-
ProEikon. A Biblioteca-ProEikon consiste de rotinas para PAIV. Utilizando a Biblioteca-
ProEikon, já foram escritos quase 300 programas para PAIV. Estes programas constituem
Programas-ProEikon. Eles foram classificados em seguintes categorias (nota: novas categorias
foram acrescentadas e este manual está desatualizada).

1. Categoria BIN: Programas para processar imagens binarias.


2. Categoria GRY: Programas para processar imagens grayscale.
3. Categoria COR: Programas para processar imagens coloridas.
4. Categoria BGC: Programas que trabalham com as 3 tipos de imagens.
5. Categoria HLF: Programas de halftoning (meio-tom).
6. Categoria SSP: Programas de scale-space (espaço de escala).
7. Categoria TMG: Programas para tomografia.
8. Categoria WMK: Programas de watermarking (marca d’água).
9. Categoria HOU: Programas de transformada de Hough.
10. Categoria WSH: Programas de watershed de morfologia matemática.
11. Categoria GRF: Graça gráficos de funções e processamento 1D.
12. Categoria SHP: Processamento de shapes.
13. Categoria DFT: FFT, DCT, CONV, XCORR, ACORR, etc.
14. Categoria MLE: Programas de aprendizagem de máquina para projeto de operadores.
15. Categoria MRI: Programas para processamento de imagens de ressonância magnética.
16. Categoria CGR: Programas para computação gráfica.
17. Categoria COD: Programas para codificação e compressão.

2. Recipientes
Foram criados “recipientes” que contém vários programas dentro dele. O maior recipiente é
IMG.EXE, que contém todos os programas das categorias de 1 a 13. As categorias 14 a 17
constituem recipientes independentes. Assim os recipientes são:

1. Recipiente IMG.EXE: Contém os programas genéricos (todos os programas das cate-


gorias de 1 a 10).
2. Recipiente MLE.EXE: Contém os programas de aprendizagem de máquina.
3. Recipiente MRI.EXE: Contém os programas de processamento de imagens de resso-
nância magnética.
4. Recipiente CGR.EXE: Contém os programas para computação gráfica.
5. Categoria COD.EXE: Contém os programas para codificação e compressão.
6. Categoria VID.EXE: Contém os programas para processamento de vídeo (só versão 2)
7. Categoria PV.EXE: Contém os programas que usam as rotinas de OpenCV.

1
Nota: Este manual é introdutório. O Sistema-ProEikon contém muitas funções e programas não documentadas
neste manual. As notas dos cursos de graduação PSI-2315 e PSI-2316 (Processamento, Análise e Síntese de Ima-
gens I e II) e do curso de pós-graduação PSI-5796 contém muitas outras informações sobre o Sistema-ProEikon e
exemplos de uso.

11
3. Recipiente-IMG
Para chamar Recipiente-IMG, escreva no prompt do DOS:

C:\>img

O Recipiente-IMG responde:

< Recipiente IMG.EXE. Programas para Processamento de Imagens. Hae Yong Kim >
_______________________________________________________________________________
IMG nome - todos os programas de IMG em ordem de nome
IMG categ - todos os programas de IMG em ordem de categoria
IMG BIN - categoria BIN - programas para imagens binarias
IMG GRY - categoria GRY - programas para imagens grayscale
IMG COR - categoria COR - programas para imagens coloridas
IMG BGC - categoria BGC - programas para imagens bin, gray e cor
IMG HLF - categoria HLF - programas halftoning (meio-tom)
IMG SSP - categoria SSP - programas scale-space e region-growing
IMG TMG - categoria TMG - programas para tomografia
IMG WMK - categoria WMK - programas para watermarking
IMG HOU - categoria HOU - programas para transformada de Hough
IMG WSH - categoria WSH - programas para watershed grayscale
IMG GRF - categoria GRF - graficos de funcoes e processamento 1D
IMG SHP - categoria SHP - processamento de shapes (poligonos) fechados
IMG DFT - categoria DFT - FFT, DCT, CONV, XCORR, ACORR, e assemelhados
Nota: Se nao couber na tela, use 'IMG ARGUMENTOS | MORE'

Para listar todos os programas do Recipiente-IMG, ordenados pela categoria, digite2:

C:\>img categ

Para listar todos os programas do Recipiente-IMG, ordenado por nome, digite:

C:\>img nome

Se quiser ver os programas de uma certa categoria, digite:

C:\>img nome_da_categoria

Para chamar um programa, basta escrever:

C:\>img nome_do_programa

4. Leitura e gravação de imagens


Em todo Sistema-ProEikon, descobre-se o tipo de imagem a ser lida pelo cabeçalho do arqui-
vo (sem levar em consideração o sufixo do nome do arquivo). Se necessário, conversões con-
venientes são feitas. Durante a escrita da imagem, o Sistema-ProEikon descobre o tipo de saí-
da que o usuário deseja pelo sufixo do nome do arquivo especificado.

Por exemplo, considere o programa zoomg (que muda a resolução de uma imagem grayscale).
O comando abaixo amplia a imagem arqent.tga por um fator 2.5 e grava o resultado na ima-
gem arqsai.tga:

img zoomg arqent.tga arqsai.tga 2.5


2
Se você não conseguir visualizar todos os programas por causa do “scroll”, digite “C:\>img categ | more”.
Ou então “C:\>img categ > nomearq.txt” e depois visualize o arquivo nomearq.txt num editor de textos.

12
O arquivo de entrada não precisa ser TGA (pode ser JPG ou TXT). O Sistema-ProEikon des-
cobre automaticamente o tipo de arquivo pelo cabeçalho, sem olhar o sufixo. A imagem de
saída será do tipo TGA, pois foi o sufixo especificado. Se quiser gravar a saída no formato
JPG:

img zoomg arqent.tga arqsai.jpg 2.5

A saída será JPG, qualidade 90 (default). Se quiser especificar uma outra qualidade, por e-
xemplo 75:

img zoomg arqent.tga arqsai.jpg75 2.5

A saída será ARQSAI.JPG, qualidade 75. Se quiser gravar a saída num arquivo TXT que pode
ser editada em qualquer editor de textos:

img zoomg arqent.tga arqsai.txt 2.5

O outro formato aceito é PGM binário:

img zoomg arqent.tga arqsai.pgm 2.5

Especificando PGM1, a saída será PGM texto:

img zoomg arqent.tga arqsai.pgm1 2.5

5. Recipientes MLE, MRI, CGR e COD:


Os recipientes MLE, MRI, CGR e COD contém, cada um, uma única categoria de programas.
Chamando Recipiente-MLE (machine learning), ele informa os programas que contém:
< MLE.EXE: Machine learning tools for image processing. Author: Hae Yong Kim >
_______________________________________________________________________________
Arvore de decisao para imagens binarias:
MLE CutB - Decision-tree learning for binary images (.CTB)
MLE CutOcB - DT-learning for binary images with Occam's razor (.CTB)
MLE AppB - Aplica decision-tree numa imagem binaria (.CTB)
(...)

Da mesma forma, chamando Recipiente-MRI (magnetic resonance imaging), ele informa os


programas que contém:
< MRI.EXE: Magnetic resonance image processing programs. Author: Hae Yong Kim >
_______________________________________________________________________________
Available functions:
MRI header - Show the content of any analyze file header.
MRI compare - Compare two 16-bit 4D analyze file and compute SNR.
(...)

6. Subdiretórios
O diretório C:\ProEikon está subdividido em:

1. BIN: Programas executáveis e DLLs.


2. CFG: Contém exemplos de arquivos de configuração usados em alguns programas.

13
3. CGR: Fontes de diversos programas de computação gráfica.
4. COD: Fontes de diversos programas de codificação.
5. DOC: Documentação.
6. EE: Definição das janelas, máscaras e elementos estruturantes.
7. FFMPEG: Arquivos include da biblioteca FFMPEG.
8. FONTS: Alguns fontes de caracteres que podem ser usados no Proeikon.
9. IMG: Fontes de diversos programas escritos utilizando biblioteca IMG.
10.LIB: Programas fontes da Biblioteca-ProEikon. Também contém a biblioteca libimg.a e os
arquivos de include.
11.MLE: Fontes de diversos programas de aprendizagem de máquina.
12.MRI: Fontes de diversos programas para processamento de imagens de ressonância magné-
tica.
13.Opencv: Arquivos include da biblioteca opencv.
14.Paletes: Alguns arquivos de paletes (lista de cores).
15.Prog: Fontes de alguns programas longos.
16.Pvlib: Biblioteca de interface entre Proeikon e Opencv
17.Pvprog: Fontes de programas que usam Proeikon e Opencv.
18.Samples: Contém programas amostras simples.
19.VID: Fontes de programas que usam Proeikon e FFMPEG.

14
III. Biblioteca-ProEikon3
1. Exemplos de uso
Vamos começar a explicação sobre o uso da Biblioteca-ProEikon com alguns exemplos.

1.1 Exemplo de IMGBIN

Programa1 abaixo cria uma imagem binária 240320, preenche-a com listras verticais, e im-
prime a imagem resultante em “imgbin.bmp”. A declaração IMGBIN a(240,320) cria i-
magem binária 240320. As funções membros a.nl() e a.nc() informam número de li-
nhas e de colunas da imagem a. Valor 0 ou false indica preto. Valor 1 ou true indica
branco.

A imagem binária pode ser impressa em formato BMP (não-compactado 1 bit por pixel) ou
TXT ou PBM (PBM=binário e PBM1=texto). O formato de saída é especificado pelo sufixo
do nome do arquivo. Os formatos TXT e PBM-texto podem ser lidos e editados em qualquer
editor de textos.
// programa1
#include <proeikon>

int main()
{ IMGBIN a(240,320);
for (int l=0; l<a.nl(); l++)
for (int c=0; c<a.nc(); c++)
if (c%5==0) a(l,c)=preto;
else a(l,c)=branco;
imp(a,"imgbin.bmp");
}

3
Este manual é introdutório. O Sistema-ProEikon contém muitas funções e programas não documentadas neste
manual. As notas dos cursos de graduação PSI-2315 e PSI-2316 e do curso de pós-graduação PSI-5796
(http://www.lps.usp.br/~hae/apostila) contém muitas outras informações sobre o Sistema-ProEikon e exemplos
de uso.

15
1.2 Exemplo de IMGGRY

Programa2 abaixo lê a imagem imgbin.bmp criado pelo programa1 e converte-a numa ima-
gem grayscale (esta conversão é automática - basta ler uma imagem binária na classe IMG-
GRY). A Biblioteca-ProEikon detecta automaticamente o formato de imagem de leitura pela
informação de cabeçalho da imagem (não leva em conta o sufixo do arquivo). Os formatos de
imagens “naturalmente” grayscale que podem ser lidos para IMGGRY são: TXT, TGA (não-
compactado 1 byte por pixel com ou sem palette), JPG e PGM (binário ou texto). Outros tipos
de imagens podem ser lidos para IMGGRY com conversão automática (como BMP binária do
exemplo).

Depois de ler, cria dégradé de tonalidades de cinza.

Finalmente, imprime a imagem obtida em “imggry.tga”. IMGGRY pode ser impresso em


formato TXT, TGA (não-compactado sem palette), JPG e PGM (PGM=binário ou
PGM1=texto). O formato de imagem é especificado pelo sufixo.
//programa2
#include <proeikon>
int main()
{ IMGGRY a;
le(a,"imgbin.bmp");
for (int l=0; l<a.nl(); ++l)
for (int c=0; c<a.nc(); ++c)
if (a(l,c)==255)
a(l,c)=(16*l)%256;
imp(a,"imggry.tga");
}

16
1.3 Exemplo de IMGCOR

Programa3 abaixo lê a imagem imggry.tga gerada pelo programa2, converte-a numa imagem
colorida, cria dégradé colorido, e grava a imagem resultante em imgcor.jpg qualidade 80.

A função le identifica automaticamente o tipo de arquivo (imagem grayscale) e faz conversão


conveniente para torná-lo imagem colorida. Os formatos de imagens “naturalmente” coloridas
que podem ser lidos para IMGCOR são: TXT, TGA não-compactado 3 bytes por pixel, TGA
não-compactado 1 byte por pixel com palette, JPG e PPM (binária ou texto). Outros tipos de
imagens podem ser lidos para IMGCOR com conversão automática.

Os planos de cor R,G e B são acessadas através das funções-membros r(), g() e b().

Uma classe IMGCOR pode ser impressa como TXT, TGA não-compactado 3 bytes por pixel,
JPG e PPM (PPM=binário, PPM1=texto). O formato é especificado pelo sufixo do nome do
arquivo. No caso de JPG, a imagem pode ser gravada com qualidade de 1 (muita compressão,
pouca qualidade) até 99 (pouca compressão, boa qualidade). A qualidade deve ser especifica-
da após o sufixo. Se a qualidade não for especificada, a imagem será gravada com qualidade
90 por default.
//programa3
#include <proeikon>
int main()
{ IMGCOR a;
le(a,"imggry.tga");
for (int l=0; l<a.nl(); ++l)
for (int c=0; c<a.nc(); ++c) {
a(l,c).r()=(5*c)%256;
a(l,c).g()=(10*c)%256;
}
imp(a,"imgcor.jpg80");
}

17
2. Tipos de imagens internas
Estão disponíveis atualmente as seguintes classes de imagens 2D estáticas:

IMGBIN: elemento=bool imagem binária. 1 bit/pixel.


IMGGRY: elemento=BYTE imagem em níveis de cinza. 1 byte/pixel.
IMGCOR: elemento=COR imagem colorida. 3 bytes/pixel.
IMGSHT: elemento=SHT imagem inteira (podendo ser negativo). 2 bytes/pixel.
IMGFLT: elemento=FLT imagem em ponto flutuante. 4 bytes/pixel.
IMGDBL: elemento=DBL imagem em ponto flutuante. 8 bytes/pixel.
IMGCPX: elemento=CPX imagem complexa. 8 bytes/pixel.

As seguintes imagens 3D ou animação ou espaço-de-escala:

I3DFLT: elemento=FLT equivale a seqüência de imagens IMGFLT.


I3DSHT: elemento=SHT equivale a seqüência de imagens IMGSHT.
I3DGRY: elemento=GRY equivale a seqüência de imagens IMGGRY.

As seguintes imagens 4D ou animação de imagens 3D:

I4DFLT: elemento=FLT equivale a seqüência de imagens I3DFLT.


I4DSHT: elemento=SHT equivale a seqüência de imagens I3DSHT.
I4DGRY: elemento=GRY equivale a seqüência de imagens I3DGRY.

As seguintes imagens 4D para processamento de imagens médicas:

ALZFLT: elemento=FLT equivale a imagem I4DFLT com header.


ALZSHT: elemento=SHT equivale a imagem I4DSHT com header.
ALZGRY: elemento=GRY equivale a imagem I4DGRY com header.

3. Elementos das imagens


Para definir as imagens acima foram definidos os seguintes elementos das imagens (tipos de
pixel):

 BYTE é um número inteiro de 0 a 255. Ocupa 1 byte. É usado como pixel de IMG-
GRY e constitui cada um dos 3 planos de cores de IMGCOR.
typedef unsigned char BYTE;

 SHT é um número inteiro entre -32768 a +32767. Ocupa 2 bytes. É pixel de IMGSHT.
É usado, por exemplo, para definir elemento estruturante de erosão/dilatação para
IMGGRY. O valor -32768 (ou minsht) é usado para indicar ponto que não pertence ao
elemento estruturante.
typedef short SHT;

 FLT é um número em ponto flutuante de 4 bytes. É utilizado normalizando a escala de


cinza entre 0.0 (preto) e 1.0 (branco). A função G2F converte um BYTE com valores
entre 0 e 255 para FLT com valores entre 0.0 e 1.0. A função F2G faz o contrário. A
função double2G, por sua vez, converte um valor em ponto flutuante entre 0.0 e 255.0

18
para ym BYTE.
typedef float FLT;

 DBL é um número em ponto flutuante de 8 bytes.

 CPX é um número complexo de 8 bytes (4 para parte real e 4 para parte imaginária). É
usado como pixel de IMGCPX. É usado principalmente quando se trabalha com trans-
formada de Fourier.
typedef complex<FLT> CPX;

 COR é uma classe composto por 3 BYTES. É usado como pixel de IMGCOR. Pode-se
armazenar cor no sistema RGB ou HSI. Os 3 campos são acessadas como r, g, b ou
como h, s, i. Existem as funções RGB2HSI e HSI2RGB que convertem um sistema de
cor no outro.
class COR { BYTE rv,gv,bv; (...)
Exemplos de uso da COR:
COR a, b(128, 128, 128);
a.r()=23; a.g()=130; a.b()=140;
a.h()=23; a.s()=130; a.i()=140;
a=COR(255,0,0);

19
4. Formatos externos para armazenar imagens
4.1 Funções le e imp

A Biblioteca-ProEikon lê uma imagem através da função le e grava através da função imp.

A função le identifica o formato de imagem através do cabeçalho (sem recorrer ao sufixo do


nome do arquivo) e faz as conversões internas necessárias para armazenar “razoavelmente” a
imagem lida dentro da classe especificada. Por exemplo, suponha que foi lida uma imagem
grayscale IMGGRY.TGA e armazenada numa classe IMGBIN:

IMGBIN a;
le(a,"imggry.tga"); // thresholding automatica

A Biblioteca-ProEikon fará automaticamente thresholding (limiarização) de forma a converter


valores de 0 a 127 em false (preto) e 128 a 255 em true (branco).

A função imp identifica o formato de imagem de saída desejada analisando a classe de ima-
gem e o sufixo do nome do arquivo especificado. Por exemplo, pedindo para armazenar uma
IMGGRY num arquivo com sufixo TGA, a imagem será armazenada no formato TGA, 1 byte
por pixel, não-compactada e sem palette:

IMGGRY a;
imp(a,"imggry.tga"); // formato TGA 1 byte/pixel

Por outro lado, pedindo para imprimir uma IMGCOR num arquivo com sufixo TGA, a ima-
gem será armazenada no formato TGA, 3 bytes por pixel, não-compactada e sem palette:

IMGCOR a;
imp(a,"imgcor.tga"); // formato TGA 3 bytes/pixel

Na gravação de imagens JPG, é possível especificar a qualidade da imagem gravada fornecen-


do um número entre 1 (qualidade ruim, alta compressão) e 99 (qualidade excelente, pouca
compressão) após o sufixo JPG. Se a qualidade não for especificada, assume-se qualidade 90:

IMGCOR a;
imp(a,"imgcor.jpg75"); // imgcor.jpg com qualidade 75

IMGGRY a;
imp(a,"imggry.jpg"); // imggry.jpg com qualidade 90

4.2 Formatos comerciais

Somente as classes IMGBIN, IMGGRY e IMGCOR podem ser armazenados em formatos


comerciais. Mandando imprimir outras classes em formato comercial, pode haver perda in-
formação (por exemplo, se pedir para imprimir IMGFLT em formato TGA, haverá arredon-
damentos) de gerar erro (se pedir para imprimir IMGCPX em formato TGA).

No momento, ProEikon aceita os seguintes formatos comerciais de imagens:

 Tipo 1: TGA não-compactado grayscale 1 byte/pixel sem palette (IMGGRY)

20
 Tipo 2: TGA não-compactado 1 byte/pixel colorido ou grayscale com palette (IMG-
COR e IMGGRY)
 Tipo 3: TGA não-compactado colorido 3 bytes/pixel sem palette (IMGCOR)
 Tipo 4: BMP não-compactado binário 1 bit/pixel (IMGBIN)
 Tipo 21: JPEG/JFIF compactado (IMGGRY e IMGCOR)
 PBM (imagem binária), PGM (níveis de cinza) e PPM (colorido), todos binários ou
texto.

O programa PSP consegue ler e escrever todos os formatos acima. Se ProEikon não conseguir
ler uma imagem escrita por PSP é provavelmente porque foi especificado (por você ou por
“default”) um sub-formato não aceito pela Biblioteca-ProEikon (por exemplo, um formato
compactado).

4.3 Formatos TXT ou MAT

Para facilitar “debug” de programas, e para facilitar edição de imagens pequenas, ProEikon
consegue ler e escrever imagens em formato texto:

Exemplos de imagem binária no formato TXT (os comentários podem estar presentes no ar-
quivo):
3 3 // Tamanho da imagem
1 0 1 /* Valores dos pixels */
0 0 0
1 0 1
1 1 // Linha central, coluna central - opcional

O mesmo arquivo pode ser especificado com “T” e “F”, ou “X” e “.” (no lugar de 1 e 0):
3 3 // Tamanho da imagem
x . x /* Valores dos pixels */
. . .
x . x
1 1 // Linha central, coluna central - opcional

Exemplo de imagem em níveis de cinzas, no formato TXT:


3 3 // Tamanho da imagem
255 0 255 // Valores dos pixels
0 0 0
255 0 255
1 1 // Opcional linha e coluna centrais

Exemplo de imagem colorida, no formato txt:


3 3
255 255 255 0 0 0 255 255 255 // Na ordem R, G, B
0 0 0 0 0 0 0 0 0
255 255 255 0 0 0 255 255 255
1 1 // Opcional. Pode eliminar

Exemplo de imagem SHT, no formato txt:


3 3
min -100 . // min ou "." indicam -32768
0 100 0

21
min -100 .
1 1 // Opcional

4.4 Formato-IMG

Para formato de imagens não disponíveis comercialmente (em ponto flutuante, complexo, se-
qüência de imagens em ponto flutuante, etc.) a Biblioteca-IMG prevê um formato binário pró-
prio denominado de Formato-IMG, cuja extensão padrão é .IMG. O subtipo de uma imagem
IMG pode ser obtida dando comando type do DOS:

type imagem.img

Tipo 11: IMGSHT para armazenar imagem 2 bytes/pixel inteiro (short int). Cada pixel pode
assumir valores de –32768 a +32767.
Tipo 13: IMGFLT para armazenar imagem 4 bytes/pixel ponto flutuante (float).
Tipo 14: I3DFLT para armazenar imagem 3-D, 4 bytes/pixel ponto flutuante (float).
Tipo 15: IMGCPX para armazenar imagem complexa 8 bytes/ pixel (4 bytes real e 4 bytes i-
maginária).
Tipo 16: I3DSHT para armazenar imagem 3-D, 2 bytes/pixel inteiro.

O seguinte comando identifica o tipo de imagem:

img tipoimg imagem.ext

Os arquivos que podem ser lidos pelo IMG podem ser convertidos em arquivos binários
(BMP tipo 4), níveis-de-cinzas (TGA tipo 1 ou JPG), ou colorido (TGA tipo 3 ou JPG) atra-
vés do comando:

img converte entrada.ext saida.ext (b/g/c)

4.5 Formato analyze (HDR+IMG)

Também aceita os seguinte formatos “analyze” utilizados para processar fMRI 4-D (ressonân-
cia magnética funcional de dimensão 4). Cada imagem analyze é formado por dois arquivos
com extensão HDR (header) e IMG (dado). Observe que o sufixo IMG usado pelo formato
analyze não tem nada a ver com Sistema-IMG. Há muitos programas de processamento de
imagens médicas que conseguem ler este tipo de arquivo, por exemplo, SPM e MRICRO.

ALZSHT: 16 bits inteiro (short int)


ALZGRY: 8 bits inteiro sem sinal
ALZFLT: 32 bits ponto flutuante

4.6 Leitura/escrita usando rotinas de OpenCV

Muitos outros formatos de imagens podem ser lidos/escritos usando as rotinas de OpenCV. As
funções de Proeikon que usam rotinas de OpenCV são identificadas por prefixo pv. Assim, as
funções:
void pvLe(IMGGRY& ent, string nome);
void pvImp(IMGGRY& sai, string nome);
void pvLe(IMGCOR& ent, string nome);
void pvImp(IMGCOR& sai, string nome);

22
conseguem ler e escrever (além dos formatos aceitos por Proeikon):

BMP/DIB, JPEG/JPG/JPE, PNG, PGM, SR/RAS, TIFF/TIF, EXR e JP2.

5. Headers da Biblioteca-ProEikon
As funções e classes da biblioteca ProEikon estão divididas de acordo com as suas funções.
Para simplificar a vida do usuário, o cabeçalho <proeikon> inclui todos os arquivos de cabe-
çalho:

#include <proeikon>

Para usar as funções de vídeo (FFMPEG), também deve especificar:

#include <imgvideo>

Para usar as funções de opencv, também deve especificar:

#include <imgpv>

23

Anda mungkin juga menyukai