Beruflich Dokumente
Kultur Dokumente
NET 2005
O UTUBRO 2007
Agradecimentos
Em primeiro lugar, agradeco ao Prof. Jo o Tavares pela orientacao do meu pro a jecto de doutoramento e, em particular, deste trabalho. ` A Dra. Isabel Sampaio gostaria de expressar o meu reconhecimento pelo apoio prestado aquando da apresentacao din mica na barra de estado da interface das a coordenadas dos pixeis da imagem activa. ` A Fundacao para a Ci ncia e a Tecnologia agradeco a bolsa de doutoramento, com e a refer ncia SFRH/BD/29012/2006, concedida no ambido do projecto POS C e - Apoiar o Desenvolvimento de Compet ncia. e ` A Escola Superior de Tecnologia e Gest o do Instituto Polit cnico de Braganca a e agradeco a equiparacao a bolseira da Fundacao para a Ci ncia e Tecnologia. e Por ultimo, uma palavra de apreco a todos os que de algum modo contriburam para a realizacao deste trabalho.
Resumo
Este relat rio tem por objectivo apresentar uma interface, em fase de desenvolo vimento, que realiza funcoes b sicas caractersticas de uma aplicacao do sistema a operativo Microsoft Windows e implementar um algoritmo simples do domnio do processamento de imagem.
Abstract
The aim of this report is to present an interface which is being in development. It performs basic functions which are typical in software applications of the Microsoft Windows operating system and it implements also a basic algorithm of image processing domain.
ii
Indice
1 Introducao 1 2 2 5 9 10 10 10 11 12 13 13 13 14
2 Bibliotecas Integradas 2.1 Windows Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Interface em Desenvolvimento 3.1 Abrir uma imagem . . . . . . . . . . . 3.2 Coordenadas dos pixeis de uma imagem 3.3 Criacao de controlos pr prios . . . . . . o 3.4 Zoom de uma imagem . . . . . . . . . 3.5 Threshold de uma imagem . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
iii
Captulo 1 Introducao
A construcao desta interface teve como principais objectivos, at este momento, e permitir ao primeiro autor a realizacao de algumas operacoes b sicas do domnio a do processamento e an lise de imagem e simultaneamente familiarizar-se com a uma linguagem de programacao orientada aos objectos. A linguagem de programacao empregue no desenvolvimento da aplicacao foi a linguagem C++ em ambiente Visual Studio .NET 2005. Os factores que estiveram na g nese desta escolha foram a sua robustez, eci ncia, portabilidade e e e a ampla disseminacao da mesma. Outro factor merecedor de grande relevo foi a exist ncia de bibliotecas de domnio p blico, escritas em C/C++, de entre as e u quais se destaca a biblioteca OpenCV [4] particularmente util para processamento de imagem (optimizada para aplicacoes em tempo real) e com diversas aplicacoes em areas como o reconhecimento e segmentacao de objectos. No futuro pretende-se que esta interface possa integrar outras bibliotecas, como por exemplo, a VTK [8] para visualizacao e processamento de objectos gr cos a a duas e tr s dimens es; a Free DICOM [9] para importacao de cheiros DICOM e o (formato de dados amplamente difundido na area da medicina para armazenamento e transmiss o de imagens m dicas). a e Este relat rio est organizado do seguinte modo: primeiro s o descritas as biblioo a a tecas de domnio p blico que a interface incorpora at ao momento, bem como o u e procedimento a ter em conta para efectuar a sua instalacao; seguidamente s o des a critas as caractersticas e funcoes da interface e, nalmente, apresentadas algumas conclus es e mencionado o trabalho que se pretende desenvolver. o
Contrariamente a outras bibliotecas para a criacao de interfaces gr cas, como a por exemplo a Microsoft Foundation Classes (MFC), a biblioteca Windows Forms pode ser usada a partir de qualquer linguagem .NET, sendo possvel a criacao de aplicacoes gr cas com mistura de linguagens, [1, 2]. a Uma aplicacao Windows Forms consiste numa ou mais janelas chamadas forms. Estas janelas podem ser janelas principais, janelas lhas ou caixas de di logo. A a cada form pode ser adicionado um conjunto de controlos para construir a interface do programa, como por exemplo, bot es, caixas de texto, etc. o O Visual C++ 2005 disp e de uma area de design para criacao de aplicacoes Wino dows Forms, no entanto optou-se por criar a aplicacao manualmente porque, tal e o como referido em [1], consideramos tamb m que o c digo criado e mais limpo, menos extenso, al m de nos permitir entender melhor os princpios gerais por e detr s da programacao orientada ao objecto (propriedades, eventos, etc.). a Seguidamente e apresentado o procedimento manual para criacao de uma aplicacao Windows Forms, tal como e descrito em [1]: Criar um novo projecto com o modelo CLR Empty Project do Visual Studio 2005. O nome atribudo ao projecto foi Exemplo. Ap s seleccionar a opcao propriedades do menu de contexto associado ao o nome do projecto na janela Solution Explorer, escolher a opcao Reference em Commom Properties, como mostra a gura 2.1.
Na janela anterior dar um clique no bot o Add New Reference . Na nova a janela seleccionar o separador .NET, gura 2.2.
Figura 2.2: Janela que permite escolher refer ncias e Para criar uma aplicacao Windows Forms e necess rio, tal como indicado a e na gura 2.3, adicionar as refer ncias: System, System.Windows.Forms e System.Drawing. A criacao da aplicacao estar concluda ap s premir o a o bot o OK. a
Figura 2.3: Janela Property pages com as refer ncia para Windows Forms e
Neste momento falta apenas adicionar os cheiros .h e .cpp para escrever o c digo o da aplicacao. Nos cheiros header (.h) deve constar as declaracoes de classes e prot tipos dos seus m todos enquanto que nos cheiros .cpp deve constar o c digo o e o fonte de cada m todo. e
Para adicionar um cheiro .cpp ao projecto proceder-se do seguinte modo: Seleccionar a opcao Add -> New File associada ao menu de contexto da pasta Source Files, na janela Solution Explorer. Seleccionar o modelo C++ File (.cpp) da categoria Code, como exibido na gura 2.4. Ap s atribuir um nome ao cheiro, seleccionar o bot o Add. o a
Figura 2.4: Janela Add New Item Procedimento an logo deve ser realizado para inserir um cheiro header no proa jecto.
2.2 OpenCV
OpenCV - Open Source Computer Vision e a segunda biblioteca computacional que a interface integra. Esta biblioteca de domnio p blico, disponvel para down u load em [3], possui um vasto conjunto de funcoes em C/C++ e implementa alguns dos algoritmos mais usuais de processamento de imagem e vis o por computador a [4]. A biblioteca concebida especialmente para processamento e an lise de imagem a a em tempo real tem aplicacoes [6], nas seguintes areas: interface homem-m quina, identicacao de objectos, segmentacao e reconhecimento, reconhecimento de fa ces, reconhecimento de movimento, seguimento de movimento, rob tica m vel, o o entre outras. Seguidamente e apresentado o procedimento para instalacao da biblioteca OpenCV introduzindo as modicacoes necess rias ao indicado em [5]: a 5
Abrir o projecto onde se pretende instalar a biblioteca OpenCV. No nosso caso, f -lo-emos no projecto a que d mos o nome Exemplo (criado na a e seccao 2.1) Ap s seleccionar a opcao propriedades do menu de contexto associado ao o nome do projecto, na janela Solution Explorer, escolher a opcao Congu ration Properties -> C/C++ -> General, tal como indicado na gura 2.5
Figura 2.5: Janela Property Pages (Geral) Na janela anterior, quando seleccionar a opcao Additional Include Direc tories aparece do lado direito uma caixa com retic ncias que ao ser premida e faz aparecer uma janela como a exibida na gura 2.6.
A seguir, ao escolher a opcao Conguration Properties -> Linker -> General -> Additional Library Directories aparece a janela indicada na gura 2.7
Figura 2.7: Janelas Property Pages e Additional Library Directories onde devem ser includos os direct rios: o
C:\...\OpenCV\lib C:\...\OpenCV\bin
Finalmente, ao escolher a opcao Conguration Properties -> Linker -> Input -> Additional Dependencies surge a janela apresentada na gura 2.8
Figura 2.8: Janelas Property Pages e Additional Dependencies onde devem ser adicionados as seguintes depend ncias: cv.lib, highgui.lib, e cxcore.lib e cvaux.lib Neste momento a biblioteca OpenCV est integrada, mas para que as suas funcoes a possam ser usadas e necess rio no incio do cheiro .cpp fazer o #include dos a cheiros onde constam essas funcoes.
Figura 3.1: Interface de Processamento de Imagem Os elementos que constituem a janela principal, main form, s o: menu, menu de a contexto e barra de estado. De acordo com a janela activa, child form, os menus adaptam-se dinamicamente podendo assim determinadas opcoes estar ou n o ac a tivas. Seguidamente ser apresentado de forma detalhada as principais funcionalidades a actuais da interface.
Figura 3.2: Caixa de di logo para escolha da imagem a abrir a Essa imagem e apresentada num novo child form que cont m uma inst ncia da e a classe PictureBox e cuja propriedade Image permite a visualizacao da mesma. Por m, se a imagem escolhida j se encontrar aberta e simplesmente activado o e a form que a cont m. e
guardar informacao adicional para al m da que os controlos existentes permitem. e Por exemplo, notamos que a maior parte dos ltros s o aplic veis a imagens em a a tons de cinzento, pelo que seria boa ideia guardar desde logo a imagem em tons de cinzento em vez de fazer a convers o para essa escala de tons sempre que a quis ssemos aplicar novo ltro. e A solucao para o problema acima descrito passou pela criacao de um controlo pr prio. Este controlo e uma inst ncia de uma nova classe que deriva da classe o a UserControl do espaco de nome System.Windows.Forms.
Figura 3.3: Menu de contexto da imagem que permite alterar a escala de visualizacao
11
Figura 3.4: Threshold din mico da imagem correspondente em tons de cinzentos a (nesta imagem o valor do threshold e 120) Como esta operacao cria uma nova imagem, a opcao Save Image do menu File e activada e no caso do utilizador optar por grav -la o nome sugerido e o que consta a no ttulo do form seguido do valor do threshold (por exemplo, na gura acima o nome sugerido seria lena thresholded120.jpg).
12
4.1 Conclus es o
A construcao desta interface, como referido no captulo 1, permitiu ao autor deste trabalho familiarizar-se com o Visual C++. A incorporacao da biblioteca compu tacional OpenCV revelou-se uma mais valia pela pan plia de funcoes disponio bilizadas. Por outro lado, o facto de usar c digo n o managed acarretou alguo a mas diculdades adicionais, como por exemplo, convers o entre diferentes tipos a de dados (nomeadamente String para char** e Image para IplImage*). Para a resolucao destes problemas contribuiu a partilha de ideias no grupo de discuss o a do OpenCV, [7].
13
Bibliograa
[1] [2] [3] I SABEL S AMPAIO , A LBERTO S AMPAIO, Visual C++/CLI - Curso Completo, FCA - Editora de Inform tica, Lda, 2007 a J ULIAN T EMPLEMAN , A NDY O LSEN, Microsoft Visual C++ .NET Step by Step, Microsoft Press, 2003 Open Computer Vision Library, vers o 1.0, a http://sourceforge.net/projects/opencvlibrary, 2006 ( ltimo acesso em Outubro/2007) u Manual de OpenCV Online, http://isa.umh.es/pfc/rmvision/opencvdocs ( ltimo acesso em Outubro/2007) u OpenCV with Visual C++ .NET 2003 http://opencvlibrary.sourceforge.net/VisualC%2B%2B ( ltimo acesso em Outubro/2007) u I NTEL, Open Source Computer Vision Library - Reference Manual, Intel Corporation, 2001 Grupo de discuss o do OpenCV a http://tech.groups.yahoo.com/group/OpenCV/ ( ltimo acesso em Outubro/2007) u The Visualization Toolkit, http://public.kitware.com/VTK/ ( ltimo acesso em Outubro/2007) u Idoimaging.com Free Medical Imaging Software, http://www.idoimaging.com/index.shtml ( ltimo acesso em Outubro/2007) u J.A. S ETHIAN, Level Set Methods and Fast Marching Methods: Evolving Interfaces in Computational Geometry, Fluid Mechanics, Computer Vision and Materials Science, Cambridge University Press, 1999. 14
[4]
[5]
[6] [7]
[8] [9]
[10]