• Nenhum resultado encontrado

S2iImage Biblioteca Computacional para manipulação de imagens digitais, com suporte a Região de Interesse (ROI) Mathias JK Erdtmann

N/A
N/A
Protected

Academic year: 2022

Share "S2iImage Biblioteca Computacional para manipulação de imagens digitais, com suporte a Região de Interesse (ROI) Mathias JK Erdtmann"

Copied!
15
0
0

Texto

(1)

S2iImage – Biblioteca Computacional para manipula¸c˜ ao de imagens digitais, com suporte a Regi˜ ao de Interesse (ROI)

Mathias JK Erdtmann Mar¸co de 2005

(2)

Cap´ıtulo 1

Introdu¸ c˜ ao

S2iImage ´e uma biblioteca computacional para manipula¸c˜ao de imagens digitais, com su- porte a Regi˜ao de Interesse (ROI). Isso significa que seu prop´osito ´e constituir de um conjunto de estruturas que facilite a manipula¸c˜ao de imagens e, al´em disso, permitir a manipula¸c˜ao de regi˜oes de interesse.

A partir desta biblioteca, desenvolver-se-´a todos os aplicativos e bibliotecas do grupo S2i que envolvam imagens em qualquer ponto do projeto.

O hist´orico da biblioteca come¸cou em 2001, com Alexandre Orth, com atualiza¸c˜oes em 2003, realizadas por Fernando Deschamps e, finalmente, sua reformula¸c˜ao em 2004-2005 por Alberto Pavim e Mathias Erdtmann

(3)

Cap´ıtulo 2

Proposta

A proposta inicial (ou concep¸c˜ao original) do projeto S2iImage ´e:

Cria¸c˜ao de uma biblioteca computacional para a manipula¸c˜ao de imagens di- gitais, com suporte a Regi˜ao de Interesse (ROI)

No entanto, levando-se em conta as etapas j´a realizadas e a realizar para satisfazer esta proposta, a proposta do projeto atual (2004–2005) ´e:

Alterar e reformular a atual biblioteca S2iimage de forma que satisfa¸ca sua concep¸c˜ao original

A raz˜ao da necessidade pela reformula¸c˜ao ´e, em parte, a n˜ao manuten¸c˜ao, que tornou a biblioteca inoperante (por obsolescˆencia) e tamb´em a necessidade que o grupo encontrou em atualizar certos conceitos que foram implementados de maneira n˜ao congruente com a literatura padr˜ao.

(4)

Cap´ıtulo 3

Requisitos

3.1 Objetivo

Refomular a atual biblioteca S2iImage.

3.2 Requisitos

3.2.1 Classifica¸c˜ao dos Requisitos

Os requisitos deste projeto foram classificados de acordo com a seguinte nomenclatura:

• Alta prioridade: requisitos essenciais ao projeto e ao funcionamento da biblioteca. O objetivo do projeto depende diretamente do cumprimento de todos os requisitos com esta prioridade.

• M´edia prioridade: requisitos desej´aveis ao projeto, mas n˜ao essenciais. O n˜ao cum- primento destes requisitos n˜ao afeta o objetivo do projeto, mas acarreta uma redu¸c˜ao significativa na funcionalidade da biblioteca.

• Baixa prioridade: requisitos desej´aveis ao projeto, n˜ao essenciais e que est˜ao ligados a aplica¸c˜oes espec´ıficas e especializadas da biblioteca. O n˜ao cumprimento destes requi- sitos n˜ao afeta a funcionalidade da biblioteca, uma vez que estes requisitos podem ser implementados no futuro, quando e se necess´ario.

3.2.2 Listagem de Requisitos (A numera¸c˜ao ´e para referˆencia apenas)

(5)

No. Prioridade Descri¸c˜ao

1 Alta O c´odigo fonte da biblioteca deve ser compat´ıvel com os padr˜oes ISO C++.

2 Alta A biblioteca deve ser compil´avel em todas as arquiteturas nas quais seja poss´ıvel compilar a biblioteca OpenCV e para as quais exista um compilador de C++ compat´ıvel com os padr˜oes ISO C++.

3 Alta A biblioteca deve suportar completamente imagens de uma e trˆes camadas.

4 M´edia A biblioteca deve suportar imagens de quatro camadas.

5 Alta A biblioteca deve suportar v´arias profundidades de ca- mada.

6 Alta A biblioteca dever´a suportar aritm´etica de imagens 7 Alta A biblioteca dever´a suportar aritm´etica e comparadores

booleanos de imagens

8 Alta A biblioteca dever´a ser capaz de armazenar e restaurar imagens de arquivos

9 M´edia A biblioteca dever´a ser capaz de armazenar e restaurar imagens de arquivos em formato PGN/MNG

10 Alta A biblioteca dever´a suportar manipula¸c˜ao de ROIs 11 Alta Dever´a ser lan¸cada uma vers˜ao que mantenha compati-

bilidade com a vers˜ao anterior.

(6)

Cap´ıtulo 4

An´ alise

Ser´a definido abaixo a biblioteca S2iImage, e esta defini¸c˜ao ´e crucial, pois ´e sobre ela que construiu-se toda a an´alise aqui apresentada.

S2iImage – Biblioteca Computacional para manipula¸c˜ao de Imagens Digitais, com suporte a Regi˜ao de Interesse

Procura-se deixar claro que, com manipula¸c˜ao de imagens refere-se a execu¸c˜ao de opera¸c˜oes atˆomicas (m´ınimas opera¸c˜oes a se realizar). A execu¸c˜ao de opera¸c˜oes compostas (v´arias opera¸c˜oes de manipula¸c˜ao) ´e denominada processamento.

Para satisfazer os requisitos 1 e 2, ser´a realizada a implementa¸c˜ao primeiramente para GNU/linux, a ser compilada com o compilador gcc. Assim, assegura-se a portabilidade do c´odigo a todos sistemas operacionais que suportam tal compilador. Em adi¸c˜ao, ser´a reali- zada um posterior ajuste do c´odigo para que o mesmo possa ser utilizado com o compilador propriet´ario Visual C++ 6.0.

A vers˜ao antiga da S2iImage j´a suportava imagens de 1 e 3 camadas, embora as funciona- lidades n˜ao para uma ou para outra acabaram se restringindo com o passar do tempo. Ser˜ao feitas todas as adapta¸c˜oes necess´arias para que o suporte seja total. Sistemas de cores de quatro camadas s˜ao tamb´em interessantes, mas n˜ao s˜ao usualmente aplicadas, de forma que, a princ´ıpio, n˜ao existe necessidade absoluta de seu uso. De qualquer forma, a biblioteca ser´a implementada de forma estruturada, capaz de oferecer suporte a bibliotecas de um n´umero de canais arbitr´ario.

Tomando-se o devido cuidado na implementa¸c˜ao, n˜ao ´e muito restritiva a necessidade de suporte a v´arias profundidades de canal. Isto j´a vinha sendo feito na S2iImage, e bastar´a manter a estrutura atual. Quanto `as opera¸c˜oes executadas pela biblioteca, julgou-se necess´aria as opera¸c˜oes aritm´eticas (+,-,*,/, etc), booleanas (&&, ——, , etc), armazenamento em v´arios formatos de imagem (SalvarImagem e AbrirImagem), acesso e definicao dos valores dos pixels (Get, Set) e manipula¸c˜ao de ROIs (CriarROI, DestruirROI, etc). Estas opera¸c˜oes foram consideradas opera¸c˜oes minimais, ou seja, aquelas que cumprem a defini¸c˜ao da biblioteca sem excessos. Desta forma, como era o pr´oprio intuito da biblioteca ser minimalista, todas as fun¸c˜oes que n˜ao se enquadrarem nestas se¸c˜oes devem ser removidas.

A remo¸c˜ao e/ou altera¸c˜ao muito grande acarretar´a em falta de compatibilidade e para alertar os usu´arios das mudan¸cas, as mesmas devem ser expostas claramente no c´odigo, na documenta¸c˜ao e, se poss´ıvel, na compila¸c˜ao. Ser´a lan¸cada uma vers˜ao chamada de“deprecated version”, que manter´a compatibilidade com a vers˜ao anterior mas cujo funcionamento n˜ao est´a assegurado. Ap´os isso ser´a lancada a vers˜ao da nova S2iImage, que n˜ao possuir´a as fun¸c˜oes consideradas falhas.

(7)

Cap´ıtulo 5

Modelagem

Optou-se por n˜ao alterar em demasia a estrutura original da biblioteca, pois sua concep¸c˜ao original ´e v´alida. Em linhas gerais, a biblioteca S2iImage est´a galgada na biblioteca OpenCV, e sua principal classe, a S2iImage, ´e derivada daestrutura IplImage, da OpenCV.

No entanto, o uso de IplImages para manipula¸c˜ao ´e um tanto complexo e incomum, criando a necessidade de facilita¸c˜ao do acesso aos recursos, que ´e a principal fun¸c˜ao da S2iImage.

Desta forma, caracterizou-se como procedimento de manipula¸c˜ao todo aquele que pode ser implementado por meio de operadores e que ser˜ao, portanto, implementados por operadores.

As classes dever˜ao ter, al´em dos operadores, fun¸c˜oes “Get/Set” para tomar e alterar (quando aplic´avel) os atributos da classe.

Ser˜ao feitos ainda sobrecargas para os tipos mais usuais de aplica¸c˜oes.

Na biblioteca atual, existem as classes fast, que dever˜ao ser removidas, uma vez que seu

´

unico prop´osito ´e “tornar mais r´apido o acesso aos dados da imagem”. Tal fato n˜ao foi comprovado (em termos de performance), e sua funcionalidade ser´a incorporada nas classes padr˜ao.

5.1 Projeto Estrutural

Segue o diagrama antes da remo¸c˜ao das classes (figura 5.1) e depois (5.2). Nota-se no diagrama duas novas classes de imagem, a S2iImageBGR24 e a S2iImageCMYK32, que seriam as classes de imagens coloridas com trˆes camadas de cores (azul, verde, vermelho) e quatro camadas de cores (ciano, magenta, amarelo e preto), respectivamente.

Figura 5.1: Antigo diagrama de classes da S2iImage

(8)

Figura 5.2: Novo diagrama de classes da S2iImage

5.2 Projeto Executivo

Ainda na figura 5.2, percebe-se que as classes filhas da classe S2iImage possuem seus parˆametros templates definidos. Isto ´e feito para facilitar o trabalho do desenvolvedor que utilizar a biblioteca e para diferenciar as classes, uma vez que os parˆametros template s˜ao a principal caracter´ıstica das classes filho (profundidade, n´umero de canais).

(9)

Cap´ıtulo 6

Implementa¸ c˜ ao

A documenta¸c˜ao do c´odigo foi realizada utilizando a ferramenta Doxygen.

A mesma podem ser encontrada no diret´oriodocda pasta ra´ız do m´odulo, em formatohtml e LATEX. Constam na documenta¸c˜ao todas as fun¸c˜oes consideradas obsoletas e a descri¸c˜ao das novas fun¸c˜oes, devidamente separadas em categorias, para f´acil compreens˜ao.

Programa-se futuras modifica¸c˜oes na biblioteca, caso as novas vers˜oes da biblioteca OpenCV o fa¸cam necess´ario.

A seguir encontra-se a lista de fun¸c˜oes e estruturas consideradas obsoletas (mais in- forma¸c˜oes na documenta¸c˜ao do c´odigo):

• int AddROI (S2iRect const &a oROIRect, S2iImage< TDataType, TColorLayers, TI- mageDepth>*a poROI)

• S2iImageStatus ShiftROI (float const &a fShiftX, float const &a fShiftY=0)

• S2iImageStatus ResizeROI (S2iRect const &a oROIRect)

• int const OffsetX () const

• int const OffsetY () const

• virtual TDataType const & GetIntensity (int const a nX, int const a nY, int const a nLayer=0) const

• TDataType * GetDataPtr ()

• TDataType const * GetDataPtr () const

• TDataType * GetLinePtr (int const a nY)

• TDataType const * GetLinePtr (int const a nY) const

• vector<TDataType>GetCol (int const a nNr, int const a nLayer=0) const

• unsigned int GetChannelsNumber () const

• int const Width () const

• int const Height () const

• int const Size () const

(10)

• virtual S2iImageStatus SetPixel (S2iPixel< TDataType, TColorLayers, TImageDepth

>const a oValue, int const a nX, int const a nY)

• S2iImageStatus SetDataPtr (void *a pData)

• S2iImageStatus SetAllEntries (TDataType const &a oValue)

• S2iImageStatus SetAllEntries (S2iPixel< TDataType, TColorLayers, TImageDepth >

const &a oValue)

• S2iImageStatus SetRowEntries (TDataType const &a oValue, int const aRowNr)

• S2iImageStatus SetRowEntries (S2iPixel<TDataType, TColorLayers, TImageDepth>

const &a oValue, int const aRowNr)

• S2iImageStatus SetColEntries (TDataType const &a oValue, int const aColNr)

• S2iImageStatus SetColEntries (S2iPixel< TDataType, TColorLayers, TImageDepth >

const &a oValue, int const aColNr)

• int IsLegalPixel (int const a nX, int const a nY) const

• bool IsOK () const

• bool IsPrimaryROI () const

• S2iImageStatus Copy (S2iImage< TDataType, TColorLayers, TImageDepth > const

&a oSourceImage)

• S2iBinaryImage * operator && (TDataType const &a oValue) const

• S2iBinaryImage * operator && (S2iPixel<TDataType, TColorLayers, TImageDepth>

const &a oPixel) const

• S2iBinaryImage * operator && (S2iImage< TDataType, TColorLayers, TImageDepth

>const &a oSourceImage) const

• S2iBinaryImage * operator—— (TDataType const &a oValue) const

• S2iBinaryImage * operator—— (S2iPixel< TDataType, TColorLayers, TImageDepth

>const &a oPixel) const

• S2iBinaryImage * operator—— (S2iImage< TDataType, TColorLayers, TImageDepth

>const &a oSourceImage) const

• S2iBinaryImage * operator! () const

• S2iImage<TDataType, TColorLayers,TImageDepth>const & operator<<= (unsigned int const &a nValue)

• S2iImage<TDataType, TColorLayers,TImageDepth>const & operator>>= (unsigned int const &a nValue)

• S2iImageStatus CalcMinMax (S2iPixel< TDataType, TColorLayers, TImageDepth >

&a oMinPixel, S2iPixel< TDataType, TColorLayers, TImageDepth > &a oMaxPixel,

(11)

• double SumPixels (int a nPlan=ALL LAYERS) const

• double Mean (int a nPlan=ALL LAYERS) const

• S2iImageStatus Mean (double &a fMean, double &a fStdDev, int a nPlan=ALL LAYERS) const

• double Norm (int a nNormType=CV C, int a nPlan=ALL LAYERS) const

• double Norm (S2iImage<TDataType, TColorLayers, TImageDepth>const &m oSecondImage, int a nNormType=CV C, int a nPlan=ALL LAYERS) const

• S2iImageStatus CompareImage (S2iImage< TDataType, TColorLayers, TImageDepth

>const &a oSourceImage)

• S2iImageStatus ImageNormalize (double const &a fModelImageMean, int a nPlan=ALL LAYERS)

• S2iImageStatus NormalizeInRange ()

• S2iImageStatus Zoom (int a nSrcWidth, int a nDestWidth, int a nSrcHeight, int a nDestHeight,

S2iImage<TDataType, TColorLayers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus Move (double const &a fShiftX, double const &a fShiftY, double const

&a fAngle=0, S2iImage<TDataType, TColorLayers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus Shift (double const &a fShiftX, double const &a fShiftY, S2iImage<

TDataType, TColorLayers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus Rotate (double const &a fAngle, double const &a fCenterX=0, double

const &a fCenterY=0, S2iImage<TDataType, TColorLayers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus Mirror (S2iMirrorFlipAxis a nFlipAxis, S2iImage< TDataType, TCo- lorLayers, TImageDepth>*a pDestImage=NULL)

• S2iImageStatus LinearTransform (double const &a fShearX, double const &a fShearY, double const &a fShiftX, double const &a fShiftY, S2iImage< TDataType, TColor- Layers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus LinearTransform (double const a fCoeffs[2][3], S2iImage< TDataType,

TColorLayers, TImageDepth>*a pDestImage=NULL, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus BilinearTransform (double const a fCoeffs[2][4], S2iImage<TDataType,

TColorLayers, TImageDepth>*a pDestImage=NULL, int t nFlag=0, int a nInterpolationTyp=IPL INTER NN)

• S2iImageStatus PerspectiveTransform (double const a fCoeffs[3][3], S2iImage< TDa-

taType, TColorLayers, TImageDepth>*a pDestImage=NULL, int t nFlag=0, int a nInterpolationTyp=IPL INTER NN)

• S2iImage<TDataType, TColorLayers, TImageDepth>const & MultiplyScale (S2iPixel<

TDataType, TColorLayers, TImageDepth >const &a oPixel)

• S2iImage<TDataType, TColorLayers, TImageDepth>const & MultiplyScale (S2iImage<

TDataType, TColorLayers, TImageDepth >const &a oSourceImage)

(12)

• S2iImageStatus PixelLinearTransform (double const &a oAlfa, double const &a oBeta, int a nPlan=ALL LAYERS)

• S2iImage<TDataType, TColorLayers,TImageDepth> const & Invert ()

• S2iImage< TDataType, TColorLayers,TImageDepth > const & MultiplyScale (TDa- taType const &a oValue)

• S2iImageStatus SetROIDataPtr (void *a pData)

• S2iImageStatus SetRowsPtr ()

• S2iLib::S2iPixelFast<TDataType, TColorLayers >

• S2iLib::S2iImageFast<T, C>

Muitas fun¸c˜oes e, principalmente, operadores foram criados para executar as opera¸c˜oes antes executadas pelas fun¸c˜oes tidas como obsoletas. Algumas vezes as fun¸c˜oes obsoletas foram simplesmente removidas do c´odigo, por n˜ao satisfazer a defini¸c˜ao da biblioteca original.

(13)

Cap´ıtulo 7

Testes

Para fins de testes da biblioteca, gerou-se um programa exemplo, situado na pasta chamada examplesda pasta ra´ız do m´odulo.

O programa exemplo servem ainda para que o programador se acostume com a utiliza¸c˜ao da biblioteca, encontrando nele exemplos para o uso das fun¸c˜oes.

Desta forma, assim puderam ser testadas as principais fun¸c˜oes implementadas, e verificar se havia uso de fun¸c˜oes obsoletas internamente. Ap´os os testes, foram verificados alguns erros, que foram eliminados at´e que fosse satisfeito os requisitos necess´arios.

Testou-se as fun¸c˜oes para imagens preto e branco, BGR e gen´ericas (profundidade definidas pelo usu´ario). Ap´os o testes, garante-se cerca de 90% de bom funcionamento da biblioteca, sendo que testes mais apurados ser˜ao realizados com a utiliza¸c˜ao da biblioteca para constru¸c˜ao de m´odulos posteriores.

(14)

Cap´ıtulo 8

Apˆ endices

8.1 Cronograma

Tarefa Data Limite

Verificar diferen¸cas nas diferentes vers˜oes da biblioteca (S2i, WZL) 2004-09-24

Documenta¸c˜ao preliminar 2004-10-08

Elaborar documentos de requisitos e an´alise de novo! 2004-10-15

Remodelagem da biblioteca 2004-10-22

Reimplementa¸c˜ao e redocumenta¸c˜ao da biblioteca 2004-11-05

Testes da bilbioteca 2004-11-19

Incluir funcionalidades PNG e MNG a classe S2iImage 2004-11-30

Elabora¸c˜ao de Aplicativos 2004-12-03

Documenta¸c˜ao final atualizada na p´agina do S2i 2005-03-31

8.2 Equipe

Pariciparam da cria¸c˜ao da vers˜ao anterior da bilbioteca (em ordem cronol´ogica):

• Alexandre Orth

• Fernando Deschamps

A corrente reformula¸c˜ao, por sua vez, foi realizada por:

• Alberto Xavier Pavim

• Mathias JK Erdtmann

Pretende-se utilizar esta biblioteca em todos os projetos sunseq¨uentes do laborat´orio Sis- temas Industriais Inteligentes que envolvam manipula¸c˜ao de imagens.

8.3 Hardware & Software

Para o corrente projeto de remodelamento da biblioteca, conta-se com a estrutura f´ısica do laborat´orio Sistemas Industriais Inteligentes, integrante do Laborat´orio Integrado do De- partamento de Automa¸c˜ao e Sistemas da Universidade Federal de Santa Catarina.

De forma geral ser´a buscada a utiliza¸c˜ao de ferramentas software livre para o desenvolvi-

(15)

8.4 Problemas

A ferramenta de desenvolvimento propriet´aria MS-Visual C++6.0 n˜ao ´e capaz de lidar com atributos de obsolescˆencia (DEPRECATED) no c´odigo, para o qual n˜ao se encontrou solu¸c˜ao retaliativa alguma sen˜ao a documenta¸c˜ao das fun¸c˜oes obsoletas da forma mais clara poss´ıvel.

A integra¸c˜ao das funcionalidades PNG e MNG n˜ao foram inclu´ıdas ainda na biblioteca por complica¸c˜oes administrativas de pessoal, no entanto permanecem como requisito de grande prioridade.

8.5 Correio

Eletrˆonico: erdtmann@das.ufsc.br(Mathias JK Erdtmann);axpavim@das.ufsc.br(Al- berto Xavier Pavim)

Convencional: Campus Universit´ario Caixa Postal 476 - CEP: 88040-900 - Florian´opolis - SC - Fone: +55 48 331 7598 - Fax: 48 331-9934

8.6 Referˆ encias

[1] Intel Corporation. Open Source Computer Vision Library - Reference Manual 2001. [2] http://www.intel.com/research/mrl/research/opencv/ [3] Documenta¸cao do C´odigo OpenCV [4] Documenta¸cao do C´odigo S2iImage

Referências

Documentos relacionados

[r]

objref objref_ptr objref_ptr &amp; objref_ptr &amp; objref_ptr sequence const sequence &amp; sequence &amp; sequence *&amp; sequence * struct (fixed) const struct &amp; struct

[r]

[r]

Dissertação (Mestrado em Educação) – Setor de Educação da Universidade Federal do Paraná. Programa Nacional do Livro Didático

[r]

[r]

[r]