Vous êtes sur la page 1sur 20

16

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

o de Imagens PyImageVis: Processamento e Visualizac a M edicas em Python


Diego A. T. Q. Leite1,2 , Gilson A. Giraldi 1 , Pedro H. M. Lira 1 , Ricardo E. Kneipp2
1

o Cient Laborat orio Nacional de Computac a ca CEP 25651-075 Petr opolis RJ Brazil

o de Petr Instituto Superior de Tecnologia em Ci encia da Computac a opolis CEP 25651-070 Petr opolis RJ Brazil

{diegoamim,ricardo.kneipp}@gmail.com,{pedrohml,gilson}@lncc.br

Abstract. This paper describes the PyImageVis system, an open-source software implemented in Python, for processing and visualization of medical images. The main goal of PyImageVis is to provide a computational system for the research of new algorithms for medical image processing and visualization. In this work, we describe the capabilities of the PyImageVis and present details of the software engineering behind its development. Besides, we demonstrate its potential with the execution of processing tasks in dental radiographs as well as computed tomography. Finally, we compare PyImageVis with related systems and discuss its performance. Resumo. Neste trabalho descrevemos o software PyImageVis, implementado em Python, utilizando recursos de bibliotecas de c odigo livre. O principal objetivo do PyImageVis e proporcionar uma plataforma facilmente extens vel para teste e desenvolvimento de algoritmos para processamento e visualizac a o de imagens m edicas. Neste artigo, descrevemos as principais caracter sticas do PyImageVis, apresentamos detalhes de sua modelagem e implementac a o. Demonstramos sua utilidade com exemplos envolvendo radiograas dent arias e tomograas. Por m, comparamos este software com outros do g enero e discutimos sua eci encia computacional.

o 1. Introduc a
ltimas d reas de computac o gr Nas u ecadas, os pesquisadores das a a aca e processamento o e an de imagens desenvolveram t ecnicas de visualizac a alise de imagens radiol ogicas per o de novas metodologias para diagnosticar doenc mitindo a elaborac a as [Bankman 2009]. Tais t ecnicas permitem que os m edicos visualizem, analisem e manipulem tanto imagens es tridimensionais dos o rg bidimensionais como as representac o aos, tecidos, ou outras es es em foco truturas do corpo do paciente [Suri et al. 2002]. Neste trabalho, as aplicac o envolvem tomograas computadorizadas e radiograas dent arias. constitu Um exame tomogr aco e do por uma sequ encia de imagens bidimen es detalhadas dos tecidos, o que prosionais da regi ao de interesse, fornecendo informac o rea de sa o mais precisa das condic es do porciona ao prossional da a ude uma avaliac a o paciente [Suri et al. 2002]. Uma vez realizado o exame tomogr aco, o volume de dados gerado (imagem tridimensional) pode ser tratado via t ecnicas de processamento de

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

17

o gr es ou gerar modelos imagens e computac a aca, com o objetivo de extrair informac o rg tridimensionais dos o aos de interesse [B arbara and de Carvalho Zavaglia 2006]. Por o autom uma a rea de outro lado, a identicac a atica de les oes em radiograas dent arias e o da grande aplicac o deste tipo de imagem para diagn crescente interesse em func a a ostico odontol ogico [Zhou and Abdel-Mottaleb 2005]. o e processamento de imaNo Brasil, a pesquisa de novas t ecnicas para visualizac a gens m edicas est a concentrada nas universidades e institutos de pesquisa. O Instituto Na o Cient cional de Ci encia e Tecnologia em Medicina Assistida por Computac a ca (INCT o Cient MACC) 1 , coordenado pelo Laborat orio Nacional de Computac a ca (LNCC), um exemplo deste fato. Os prossionais envolvidos necessitam de uma plataforma e o de novos algoritmos. Softwares como o MatLab de trabalho que facilite a validac a [Blanchet and Charbit 2006], ou SciLab [da Motta Pires 2004] podem ser usados para o de imagens tridimensionais. esta nalidade. Contudo, s ao limitados para a visualizac a Visando atender esta car encia, apresentamos neste trabalho o software PyImageVis. Este software foi desenvolvido principalmente para uso acad emico, no intuito de proporcionar rea de visualizac o e processamento de imagens, uma plataforma a pesquisadores da a a que aproveite bibliotecas de c odigo livre j a existentes, com interface amig avel e, principalmente, que seja facilmente expans vel. Todo o sistema foi desenvolvido em Python [Hetland 2008], uma linguagem de o de alto n compilado e programac a vel e interpretada; ou seja, o c odigo fonte n ao e orientada a objetos e de tipagem din sim interpretado. A linguagem e amica e forte, tendo interpretadores para diferentes plataformas, como Windows, MacOS e Linux. A linguagem Python foi escolhida neste trabalho por apresentar uma sintaxe enxuta, leg vel o de prot e expressiva, o que facilita o racioc nio durante a implementac a otipos mais complexos, al em de aumentar a produtividade do programador. Al em disso, os recursos da es no sistema. Por linguagem tornam muito mais simples incorporar novas atualizac o m, a linguagem Python oferece pleno suporte para o desenvolvimento de classes para o de imagens em func o das bibliotecas dispon processamento/visualizac a a veis para estas reas 2 . a ` do MatLab: O sistema utiliza interfaces que seguem uma metodologia an aloga a es em linha-deo usu ario pode acessar os recursos dispon veis via chamadas de func o o de scripts personalizados para uma comando (no prompt do interpretador) ou execuc a o espec aplicac a ca. Al em disto, novos operadores podem ser inclu dos ao sistema via o de uma linha de c inserc a odigo no arquivo init .py encontrado no diret orio lib do sistema. Embora o car ater de pesquisa seja mais signicativo, esta plataforma pode es que possam ser utilizadas diretamente tamb em ser utilizada para desenvolver aplicac o pelo prossional m edico. O software pode editar v arios formatos de imagens existentes, tais como TIFF, GIF, BMP, PICT, JPEG, PNG e DICOM. o 2 fornece um estudo Este trabalho est a estruturado da seguinte forma. A sec a es 3 e 4, s sobre trabalhos relacionados. Nas sec o ao apresentados detalhes sobre o soft o, interface gr ware desenvolvido, sua implementac a aca e modelagem. Os resultados o do PyImageVis ser o 5. Em experimentais demonstrando a utilizac a ao discutidos na sec a
INCT-MACC em http://macc.lncc.br/ es cient Porque usar Python em aplicac o cas em http://pyscience-brasil.wikidot.com/python:pythonoq-e-pq/
2 1

ISSN: 1519-8219

18

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

o 6, comparamos o PyImageVis com outros sistemas do g seguida, na sec a enero, do ponto de vista do usu ario nal. Finalmente, apresentamos as conclus oes e trabalhos futuros na o 7. sec a

2. Trabalhos Relacionados
o tem como objetivo apresentar os principais sistemas computacionais, deEsta sec a rea de processamento e visualizac o de imagens senvolvidos usando Python, na a a m edicas. Desta forma, ser a poss vel situar nosso trabalho no contexto em quest ao. Vale rea destacar que existe uma vasta lista de softwares desenvolvidos em C/C++ nesta a o [de Carvalho et al. 2002]. Contudo, uma vez que a linguagem de desenvolvimento e Python, optamos por abordar apenas sistemas desenvolvidos nesta linguagem. A seguir, ser ao discutidos os softwares InVesalius [B arbara and de Carvalho Zavaglia 2006], MayaVi 3 e BioImageXD 4 . Estes aplicativos v em sendo testados pela comunidade, apresentado desempenho satisfat orio. O o e destacar o principal diferencial do PyImageVis em relac o a estes foco desta sec a a aplicativos: interface entre o usu ario e os recursos do sistema. Assim como no PyImageVis, estes sistemas fazem uso de bibliotecas gr acas j a rea. Abaixo, listamos estas bibliotecas apresentando uma consagradas na literatura da a o das mesmas. pequena descric a 1. VTK (Visualization ToolKit): Software gratuito que consiste em uma biblioteca o gr o de classes para computac a aca, processamento de imagem e visualizac a [Kitware 2010]. 2. NumPy: Biblioteca matem atica que suporta matrizes multidimensionais, e possui es para a manipulac o destas estruturas 5 . diversas func o a o ocial do interpretador 3. Tkinter: Biblioteca gr aca que acompanha a distribuic a Python [Grayson 2000]. 4. wxPython: Wrapper da biblioteca wxWidgets [Smart et al. 2011], para a lin o de interfaces gr guagem Python, que traz ferramentas para a construc a acas. 5. SciPy: Foi desenvolvida para trabalhar com estruturas da biblioteca NumPy, adi o cient cionando funcionalidades para a computac a ca em Python que incluem algoritmos para m etodos num ericos e processamento de sinais 6 . uma biblioteca para a linguagem de 6. PIL (Python Imaging Library): E o Python que adiciona suporte a ` edic o (convers programac a a ao para tons-de-cinza, o, escala, zoom, etc.) e gravac o de imagens 2D em diferentes formatos rotac a a (TIFF, GIF, BMP, PICT, JPEG, PNG). 7. PyDicom: Como o pr oprio nome j a diz, foi desenvolvido utilizando a linguagem Python com o objetivo de trabalhar com arquivos do tipo DICOM 7 . 8. PyQt4: Biblioteca que permite ao desenvolvedor acessar facilmente o Qt o Python [Blanchette and Summereld 2008] atrav es da linguagem de programac a um toolkit robusto e multiplataforma para desenvolver [Summereld 2007]. Qt e interfaces gr acas.
3 4

MayaVi em http://mayavi.sourceforge.net/ BioImageXD em http://bioimagexd.net/ 5 NumPy User Guide em http://docs.scipy.org/doc/numpy/user/ 6 SciPy Reference Guide dispon vel em http://www.scipy.org/ 7 DICOM em http://medical.nema.org/

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

19

uma biblioteca escrita em Python voltada para edic o de gr 9. Matplotlib: E a acos es, histogramas e gr bidimensionais 8 , tais como gr acos de func o acos de barras. um software de dom O InVesalius e nio p ublico, implementado em o Python e C++, tendo como objetivo auxiliar o prossional m edico na gerac a de modelos digitais de pr oteses e planejamento cir urgico de seus pacientes o de modelos tri[B arbara and de Carvalho Zavaglia 2006]. O software permite a criac a ` s estruturas anat dimensionais (3D), correspondentes a omicas dos pacientes, a partir de imagens tomogr acas. A Figura 1 ilustra a interface gr aca deste software.

volumetrica Figura 1. Visualizac ao gerada no software InVesalius.

Desenvolvido desde julho de 2001 no contexto do ProMED (Prototipagem R apida na Medicina 9 ), o programa tem sido amplamente empregado por cirurgi oes e hospitais uma tecnologia que utiliza modelos brasileiros desde 2004. A Prototipagem R apida e o de modelos reais. O projeto ProMED digitais projetados em computador para a produc a o da computac o gr visa a aplicac a a aca e prototipagem r apida no planejamento de ciruro gias complexas. A prototipagem tamb em permite uma melhor vis ao cl nica e a construc a de pr oteses espec cas para cada caso. um software de c o de dados cient O MayaVi e odigo aberto para visualizac a cos. Foi implementado em Python utilizando recursos da biblioteca VTK [Kitware 2010] e NumPy. Sua interface gr aca foi desenvolvida usando a biblioteca Tkinter [Grayson 2000], sendo port avel tanto para Windows quanto Linux. O software BioImageXD possui recursos para an alise e processamento de ima um soft o de modelos digitais. E gens de microscopia celular e permite a renderizac a ware de c odigo aberto, desenvolvido em Python e C++, usando a biblioteca wxPython [Smart et al. 2011] para a interface gr aca e a biblioteca VTK para processamento de im o. agens tridimensionais e renderizac a Todos estes sistemas (InVesalius, MayaVi, BioImageXD) possuem em comum a proposta de usar interfaces intuitivas para o usu ario, baseadas em mouse e menus, fa o por prossionais da a rea de sa cilitando assim sua utilizac a ude. Por em, s ao limitados es cient para o desenvolvimento e teste de programas para aplicac o cas. O PyImageVis,
8 9

Matplotlib User Guide dispon vel em http://matplotlib.sourceforge.net/contents.html/ ProMED em http://www.cti.gov.br/promed/

ISSN: 1519-8219

20

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

o e/ou enpor outro lado, tem como p ublico alvo pesquisadores em ci encia da computac a o de imagens engenharia. O usu ario acessa os recursos de processamento e visualizac a viando comandos, digitados no prompt do interpretador. Essa caracter stica, utilizada em uma vantagem do software pois programas consagrados como o MatLab, por exemplo, e o entre diferentes algoritmos e reutilizac o de c facilita a integrac a a odigo-fonte. Assim, embora seja um software que exige familiaridade com programac ao, o PyImageVis tem es complexas em an recursos para ser um framework para prototipagem de aplicac o alise e o de imagens m visualizac a edicas.

3. Modelagem e Interface do PyImageVis


criar um ambiente computacional eO objetivo principal deste trabalho e ciente e facilmente expans vel para o desenvolvimento e teste de m etodos em o de imagens m processamento/visualizac a edicas. Assim, optamos por utilizar uma inter` do MatLab, aproveitando a experi o face gr aca an aloga a encia da comunidade na utilizac a deste sistema. o de um interpretador Python Desta forma, o software conta com a integrac a em sua interface, simulando um prompt de comando. Tamb em conta com um editor Python para o desenvolvimento de novas funcionalidades no pr oprio software. A interface gr aca desenvolvida inclui um Command Window, uma janela (History Window) que cont em o hist orico dos comandos digitados no Command Window; um Workspace, onde o programador poder a visualizar o conjunto de vari aveis armazenadas na mem oria. A Figura 2 mostra estes componentes, os quais est ao presentes tamb em no sistema MatLab [Blanchet and Charbit 2006]. O desenvolvimento do software foi direcionado pela ideia de utilizar algumas das o 2, possibilitando um desenvolvimento bibliotecas de c odigo aberto descritas na sec a r apido e com baixo custo. Assim, optamos pela biblioteca SciPy para processamento de o de imagens 3D, bem como o paradigma de imagens e a biblioteca VTK para visualizac a o a objetos para a implementac o da interface gr orientac a a aca. Para usar os recursos da feito usando func es biblioteca SciPy precisamos converter imagem em matriz, o que e o da biblioteca NumPy. o do sistema e oportuno ter em mente uma Antes de prosseguirmos com a descric a o entre o usu o vis ao global da interac a ario e o mesmo. Isto pode ser obtido pela descric a textual dos casos de uso, apresentada na Tabela 1. Assim, seguindo a Tabela 1, no caso de uso Ler Imagem, precisamos denir os formatos de interesse para as imagens. Al em dos formatos padr oes para imagens 2D, necessitamos editar imagens DICOM. Desta forma, optamos por utilizar as bibliotecas PIL es de processae PyDICOM. O caso de uso Realizar Processamento, depende de func o es da biblioteca SciPy. mento de imagens, cando portanto contemplado pelas func o O caso de uso seguinte, da Tabela 1, Atualizar Workspace e History Window, de o de classes espec pende da implementac a cas para controle da interface gr aca mostrada o das classes utilizadas: na Figura 2. A seguir fornecemos uma breve descric a QMainWindow: Classe herdada do PyQt4 que fornece a janela principal do aplicativo. Editor: Classe respons avel pelo editor do software.
ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

21

Figura 2. Componentes da interface graca do PyImageVis: Command Window, History Window, Workspace e Editor Python.

MainWindow: Respons avel por toda a estrutura e eventos do software. SciShell: Simula um interpretador Python dentro do aplicativo, sendo representada pela janela Command Window na interface gr aca. o do interpretador da InteractiveInterpreter: classe respons avel pela manipulac a linguagem Python. HistoryWindow: Classe que controla o hist orico, adicionado e removendo regis inserido na janela Command Window. tros sempre que algum comando e Workspace: Armazenadas as vari aveis em uso pelo usu ario. Est a em constante o com a classe SciShell. comunicac a Estas classes est ao representadas no diagrama UML (Unied Modeling Language [Booch et al. 2000]) da Figura 3. ltimo caso de uso da Tabela 1, Realizar Visualizac o, necessita de func es de Ou a o o de gr sa da gr acas, que permitam visualizac a acos 2D (biblioteca Matplotlib), imagens o 4 vamos abordar este bidimensionais, bem como objetos 3D (biblioteca VTK ). Na sec a tem.

o 4. Fluxo de Dados e Implementac a


Considerando o objetivo fundamental do sistema e os casos de uso da Tabela 1, podemos armar que o uxo de dados no PyImageVis envolve basicamente leitura, processamento o de imagens. As bibliotecas Python escolhidas para estas tarefas (SciPy, e visualizac a NumPy, PIL, PyDICOM, Matplotlib e VTK ) possuem formatos de dados pr oprios. Assim, a escolha de um formato padr um ponto fundamental no desenvolvimento do sistema e ao

ISSN: 1519-8219

22

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

Caso de uso: Ler Imagem Ator Usu ario o Imagens m Pr e-Condic a edicas em formato compat vel. Fluxo B asico 1- O usu ario fornece uma imagem ao sistema. 2- O sistema transforma a imagem em uma matriz. Caso de uso: Realizar Processamento Ator Usu ario o Imagem em mem Pr e-Condic a oria. o a ser executada no software, Fluxo B asico 1- O usu ario chama a func a tendo como entrada a matriz a ser processada. 2- O sistema realiza o processamento. Caso de uso: Atualizar Workspace e History Window Ator Sistema o Alguma func o deve ter sido chamada no software pelo Pr e-Condic a a usu ario. Fluxo B asico 1- O sistema verica se o comando o no software. realiza algum tipo de atualizac a repetido. 2- O sistema verica se o comando n ao e es no History Window 3- O sistema realiza atualizac o e/ou Workspace. o Caso de uso: Realizar Visualizac a Ator Usu ario o A matriz deve estar carregada no sistema e no Pr e-Condic a formato correto. o no Fluxo B asico 1- O usu ario insere algum comando de visualizac a software. 2- O sistema executa o comando. 3- O sistema exibe no display o resultado (imagem), o com o usu permitindo interac a ario atrav es do mouse e/ou teclado para objetos 3D.
Tabela 1. Casos de uso textual

para representar as imagens. Foi escolhido o formato matriz da biblioteca NumPy pois desta forma podemos utilizar diretamente os recursos de processamento e sa da gr aca das biblioteca SciPy e Matplotlib, respectivamente. O esquema da Figura 4 mostra como as o se integram com a biblioteca NumPy. bibliotecas de leitura, processamento e visualizac a Estas bibliotecas est ao descritas na sec ao 2. o da biblioteca SciPy n necess o especial, Para a utilizac a ao e ario nenhuma func a padr pois o formato NumPy e ao desta biblioteca. Por outro lado, para as bibliotecas PIL es para permitir sua integrac o no sistema: e VTK foram desenvolvidas as seguintes func o a pil2numpy() - Recebe uma imagem no formato padr ao da biblioteca PIL e retorna uma matriz bidimensional no formato NumPy. o anterior. numpy2pil() - Inversa da func a
ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

23

Figura 3. Diagrama de classe

numpy2vtk() - Recebe uma matriz bidimensional ou multidimensional e retorna um objeto VTK. Como pode ser visto na gura 4, as biblioteca respons aveis pela leitura de imagens es para edic o de imagens 2D e foi s ao a PIL e PyDICOM. A primeira possui func o a o com escolhida devido a vasta gama de formatos suportados e a facilidade de integrac a a biblioteca NumPy. Por em a biblioteca PIL n ao suporta o formato DICOM, desta forma o da biblioteca PyDICOM. foi necess ario a utilizac a Sendo assim, quando um usu ario carregar uma imagem 2D no PyImageVis, a o imread, descrita no Algoritmo 1, onde s imagem ser a lida diretamente pela func a ao es da biblioteca PIL para a leitura da imagem e func es da biblioteca chamadas func o o o da imagem em matriz. Neste processo e utilizada a func o NumPy para a transformac a a pil2numpy, citada acima. Se o formato for DICOM, inicialmente, a imagem passar a pela PyDICOM para ser convertida no formato PIL. Em seguida, ser a convertida no formato executado pela func o dicomread implementada segundo o AlNumPy. Este processo e a goritmo 2. o loadvolume que recebe No caso de imagens 3D, foi implementada a func a

ISSN: 1519-8219

24

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

entre as bibliotecas no sisFigura 4. Diagrama mostrando a comunicac ao tema PyImageVis e os recursos para sa da graca (biblioteca Matplotlib, func ao imshow e widget QVTKRenderWindowInteractor ).

o enderec o (nome ou caminho) das imagens, executa a leitura, por um procedimento ` quele utilizado no Algoritmo 1, e retorna uma matriz multidimensional no foran alogo a mato NumPy. image pil = Image.open(path) image numpy = pil2numpy(image pil) return image numpy o imread. Algoritmo 1: Func a image dicom = dicom.ReadFile(path) size = (image dicom.Columns,image dicom.Rows) image pil = Image.frombuffer(size, image dicom.PixelData) image numpy = pil2numpy(image pil, f) return image numpy o dicomread. Algoritmo 2: Func a Finalmente, o resultado gerado em um processamento dever a ser visualizado (n vel inferior do uxograma da Figura 4). Se o resultado for um gr aco 2D (histograma o y = f (x)), utilizamos as func es da biblioteca Matplotlib, a qual recebe dados ou func a o o imshow, descrita no Alno formato NumPy. Para imagens 2D implementamos a func a goritmo 3. A widget QVTKRenderWindowInteractor (criada por Prabhu Ramachandran o 2), e utilizada para a visualizac o de resultados em 2002), desenvolvida para PyQt4 (sec a a 3D gerados pelos m etodos do VTK.

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

25

image pil = numpy2pil(image numpy) image pil.show() o imshow. Algoritmo 3: Func a

5. Resultados
o, vamos demonstrar algumas funcionalidades da ferramenta desenvolvida, Nesta sec a es 3 e 4. Inicialmente, vamos explorar edic o e processamento de descrita nas sec o a o volum imagens bidimensionais. Em seguida, vamos demonstrar visualizac a etrica via ltimo caso para demonstrar como Marching Cubes e volume rendering, aproveitando este u es ao sistema. incluir novas func o o dos resultados contidos nesta sec o, foi utilizada uma m Para a gerac a a aquina equipada com processador Intel Core 2 Quad de 3.00 GHz com 4GB de mem oria RAM e contendo duas placas de v deo GeForce 9800 GTX com 512 MB de mem oria. O sistema operacional utilizado foi o Ubuntu 9.10. 5.1. Processamento de Imagens o na A Figura 5 mostra os componentes principais da interface gr aca, e sua aplicac a o de uma radiograa dent es utilizadas est edic a aria. A sequ encia de operac o a descrita no Algoritmo 4.

de uma radiograa dentaria, do Figura 5. Visualizac ao do tipo bite wing, atraves software PyImageVis. Resultado do Algoritmo 4.

es imread e imshow est As func o ao descritas nos Algoritmos 1 e 3, respectiva o im2grayscale chama a func o grayscale() da biblioteca PIL para conmente. A func a a o getle() permite verter imagens em tons-de-cinza (0 - 255). Por outro lado, a func a

ISSN: 1519-8219

26

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

imagem = imread( getle() ) imagem = im2grayscale( imagem ) imshow( imagem ) o de imagem bidimenAlgoritmo 4: Algoritmo para leitura e visualizac a sional. Ver Figura 5. ao usu ario navegar pelos diret orios do computador, atrav es de uma interface gr aca, at e o getle() (enderec selecionar a imagem desejada. Desta forma, o retorno da func a o da im direcionado diretamente como argumento da func o imread() para agem selecionada) e a o respons leitura da imagem. Finalmente, o comando imshow() executa a func a avel pela o (Figura 5). visualizac a Radiograas do tipo apresentada na Figura 5 (bite wing) s ao utilizadas em um projeto envolvendo pesquisadores da Faculdade de Odontologia da Universidade Esta estudar a periodontite, dual do Rio de Janeiro (FO-UERJ) e do LNCC, cujo objetivo e o cr ` perda dos tecidos de sustentac o dos uma inamac a onica e destrutiva que leva a a dentes e, eventualmente, a perda dent aria. O primeiro passo no processamento destas remover artefatos da regi imagens e ao entre as arcadas dent arias. Embora esta regi ao aparente ter intensidade homog enea, observamos a presenc a de artefatos oriundos do pro o das imagens. Isto ca evidenciado na Figura 6.(a) onde efetuamos a tocolo de aquisic a o da imagem ap o pelo limiar 25. visualizac a os a binarizac a o de tr A Figura 6.(b) mostra o resultado da aplicac a es ltros sobre a imagem da es utilizadas est Figura 5. A sequ encia de operac o a descrita no Algoritmo 5. Inicialmente, processada com o ltro da mediana [Gonzalez and Woods 1992, a imagem original e o, a intensidade de cada pixel (m, n) da imagem origiVaseghi 2000]. Nesta operac a substitu nal I e da pela mediana das intensidades dos pixels no interior de uma janela W centrada em (m, n). imagem medlt = ndimage.median lter( imagem, (3,3) ) imshow( imagem medlt ) imagem contrast = imcontrast( imagem medlt, 1.1 ) imagem bin = imagem contrast > 30 imshow( imagem bin ) o Algoritmo 5: Filtro da mediana, realce de contraste e visualizac a Na primeira linha do algoritmo 5, encontra-se a palavra ndimage que representa o pacote de processamento de imagens da biblioteca cient ca SciPy. Dentro deste pa passado o median lter() que implementa o ltro da mediana. E cote encontra-se a func a como argumento para este m etodo a imagem juntamente com uma tupla que denir ao a aplicac o da func o imcontrast() que tem o tamanho da vizinhanc a. O pr oximo passo e a a o tem como argumentos de entrada objetivo de realc ar o contraste da imagem. Esta func a a imagem e um valor decimal que controla a porcentagem de contraste a ser aplicado na imagem (valores maiores que 1.0 melhoram o contraste). Na quarta linha do algoritmo 5, realizada a binarizac o da imagem, onde foi utilizado como limiar o valor 30 (Figura e a 6(b)). o [Gonzalez and Woods 1992] do pacote Em seguida, aplicamos a dilatac a

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

27

(a)

(b)

(c)

(d)

(e)
Figura 6. Resultados do Algoritmo 5 e 6. (a) Imagem original binarizada aplicac do lrealc ando artefato entre as arcadas. (b) Imagem binarizada apos ao sobre a imagem tro da mediana e realce de contraste. (c) Resultado da dilatac ao binarizada. (d) Imagem gerada pelo operador binary ll holes(). (e) Visualizac ao da radiograa dentaria sem artefatos entre as arcadas.

o foi utilizada a func o binary dilation(), chamada Para realizar a tarefa de dilatac a a passado tamb na segunda linha. Al em da imagem e do elemento estruturante, e em o es do operador (5, no caso). A Figura 6.(c) mostra a imagem resuln umero de interac o o da regi tante. Observamos a separac a ao de interesse das demais regi oes, cando buracos no fundo da imagem (regi oes menores imersas no fundo branco). Assim, na quarta aplicado uma operac o para preenchimento de regi linha do algoritmo 6, e a oes (comando oes (Figura binary ll holes() do pacote ndimage) com o objetivo de eliminar estas regi 6.(d)). o iminvert() que Finalmente, basta inverter, a imagem gerada, utilizando a func a

ndimage, com o objetivo de separar a regi ao entre as arcadas das demais regi oes. Na primeira linha do algoritmo 6, existe uma vari avel chamada struct que recebe uma ma o elemento estruturante a ser passado para a operac o morfol triz 3 3 que e a ogica.

ISSN: 1519-8219

28

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

struct = array([ [0,1,0], [1,1,1], [0,1,0] ]) imagem dilation = ndimage.binary dilation( imagem bin, struct, 5 ) imshow( imagem dilation ) imagem holes = ndimage.binary ll holes( imagem dilation ) imshow( imagem holes ) imagem invert = iminvert( imagem holes ) imagem subtract = imsubtract( imagem, imagem invert ) imshow( imagem subtract ) o do background Algoritmo 6: Eliminac a utiliza m etodos da PIL, e subtrair a imagem original da imagem invertida atrav es da o imsubtract() que tamb func a em utiliza m etodos da PIL. Nesta etapa, artefatos na regi ao entre as arcadas s ao eliminados, ou seja, o campo de intensidades tornou-se homog eneo nesta regi ao. O resultado est a mostrado na Figura 6.(e). o de Superf 5.2. Reconstruc a cies via Marching Cubes gerar uma aproximac o poligonal da superf A ideia e a cie (isosuperf cie) denida por uma express ao do tipo: {(x1 , x2 , x3 ) 3 ; I (x1 , x2 , x3 ) = }, (1)

a imagem, com 3 , e e uma constante. Um algoritmo onde I : e o de isosuperf o algoritmo Marching comumente usado na gerac a cies em imagens 3D e Cubes [Lorensen and Cline 1987]. Para inserir o algoritmo Marching Cubes no software PyImageVis implementa o marchingcubes() e uma classe denominada MarchingCubes, descritas mos uma func a o marchingcubes() recebe uma matriz nos Algoritmo 7 e 8, respectivamente. A func a o loadvolume(). Logo em seguida a NumPy multidimensional, criada atrav es da func a instanciada, sendo passado como argumento a matriz NumPy. Na classe MarchingCubes e feita a convers classe MarchingCubes e ao da matriz NumPy para um objeto VTK atrav es o numpy2vtk(). Em seguida, e instanciada a classe vtkImageMarchingCubes, do da func a o da isosuperf VTK, respons avel pela computac a cie. input : Matriz multidimensional NumPy (data numpy) mc = MarchingCubes(data numpy) mc.show() return mc o marchingcubes. Algoritmo 7: func a

o marchingcubes() no PyImageVis e necess Para disponibilizar a func a ario que o o e tamb arquivo onde se encontra esta func a em a classe MarchingCubes estejam dentro ltimo e necess do diret orio lib do sistema. E por u ario inserir a linha de c odigo from le o e funcimport function name, sendo le o nome do arquivo onde se encontra a func a o a ser importada, no arquivo init .py, tamb tion name o nome da func a em encontrado no diret orio lib. Qualquer outra classe do VTK poder a ser inserida no PyImageVis por um procedimento an alogo.

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

29

input : Matriz multidimensional NumPy (dataImporter)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

dataImporter = numpy2vtk(data numpy) Gerac a cie o da isosuperf cubes = vtkImageMarchingCubes() cubes.SetInputConnection(dataImporter.GetOutputPort()) Plano de Corte planeWidget = vtkImagePlaneWidget() planeWidget.SetInput(dataImporter.GetOutput()) planeWidget.SetPlaneOrientationToZAxes() plane = vtkPlane() Visualizac a o mapper = vtkPolyDataMapper() mapper.SetInputConnection(cubes.GetOutputPort()) mapper.AddClippingPlane(plane) actor = vtkActor() actor.SetMapper(mapper) renderer = vtkRenderer() renderer.AddActor(actor) renWin = vtkRenderWindow() renWin.AddRenderer(renderer) Algoritmo 8: classe MarchingCubes.

ISSN: 1519-8219

30

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

Veja no algoritmo 9 os comandos necess arios para utilizar o algoritmo Marching o Cubes no software PyImageVis. Na primeira linha do algoritmo 9 encontra-se a func a loadvolume(), que tem o objetivo de ler o volume de imagens, localizado no diret orio o getdir(), e armazen retornado pela func a a-las em uma matriz multidimensional, no for feita a chamada a ` func o marchingcubes(), descrita no mato NumPy. Na segunda linha e a Algoritmo 7. v = loadvolume( getdir() ) cubes = marchingcubes( v ) Algoritmo 9: Gerando isosuperf cie via marching cubes O resultado do Algoritmo 9 pode ser visto na gura 7. Neste caso foi utilizado o de 512 512 um volume formado por 108 imagens no formato DICOM, com resoluc a 10 pixeis cada, obtidas no Portal do Software P ublico Brasileiro . A exemplo do caso 2D, aberta uma nova janela para exibir o resultado do algoritmo. Contudo, no caso 3D o e usu ario pode interagir com o resultado gerado atrav es do mouse e do teclado, podendo, o, escala (zoom) e translac o. por exemplo, efetuar rotac a a

de isosuperf Figura 7. Visualizac ao cies no software PyImageVis. Resultado do algoritmo 9

o com a superf usando um plano de corte. Outra possibilidade de interac a cie e visualizado o objeto 3D, o plano de corte Para isso s ao utilizadas duas telas, uma onde e o da superf visualizada uma e a porc a cie acima do plano; e, uma segunda tela onde e o do plano de corte com o volume (Figura 8). Esta imagem que representa a intersec a funcionalidade foi implementada na classe MarchingCubes (linhas 6 9). Para tornar o esta funcionalidade ativa, basta que o usu ario pressione a tecla i durante a visualizac a da superf cie.
Imagens dispon veis storage/view/dcm/cranium01.rar
10

em

http://www.softwarepublico.gov.br/dotlrn/clubs/invesalius/le-

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

31

do plano de corte com Figura 8. Plano de corte e imagem gerada pela intersec ao o volume de imagens (direita).

5.3. Volume rendering o de um campo escalar tridimensional e o Uma outra possibilidade para a visualizac a o plana diretamente a partir do volume de volume rendering ou seja, produzir uma projec a o deste teste utilizaremos o mesmo volume de imagens utilizado dados. Para a realizac a o 5.2. na sec a o raycast() A exemplo da t ecnica de Marching Cubes, implementamos uma func a o raycast(), descrita no Algoritmo 10, ree uma classe denominada RayCast. A func a cebe como argumento uma matriz NumPy multidimensional, cria uma inst ancia da classe RayCast passando para esta classe como argumento a matriz NumPy, e retorna o objeto o, em seguida instanciado. A classe RayCast recebe a matriz NumPy em sua inicializac a o via t transforma esta matriz em um objeto VTK e executa a computac a ecnica de ray cast es de transfer (linhas 3 14 do Algoritmo 11). As func o encia para cor e opacidade, utilizadas nas linhas 3 7 do Algoritmo 11, foram denidas por tentativa e erro, utilizando as classes/m etodos do VTK. input : Matriz multidimensional NumPy (data numpy) rc = RayCast(data numpy) rc.show() return rc o raycast. Algoritmo 10: func a O Algoritmo 12 mostra a sequ encia de comandos necess arios para utilizar o voo lume rendering no PyImageVis. A primeira linha faz a leitura das imagens, via func a o da func o raycast(), na loadvolume(), como j a explicado acima. O resultado da execuc a a segunda linha do Algoritmo 12, est a mostrado na Figura 9. Para inserir o volume reno dering no PyImageVis, usa-se o mesmo procedimento utilizado no marching cubes (sec a 5.2).

ISSN: 1519-8219

32

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

input : Matriz multidimensional NumPy (dataImporter)


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

dataImporter = numpy2vtk(data numpy) Volume rendering alphaChannelFunc = vtkPiecewiseFunction() colorFunc = vtkColorTransferFunction() volumeProperty = vtkVolumeProperty() volumeProperty.SetColor(colorFunc) volumeProperty.SetScalarOpacity(alphaChannelFunc) compositeFunction = vtkVolumeRayCastCompositeFunction() mapper = vtkVolumeRayCastMapper() mapper.SetVolumeRayCastFunction(compositeFunction) mapper.SetInputConnection(dataImporter.GetOutputPort()) volume = vtkVolume() volume.SetMapper(mapper) volume.SetProperty(volumeProperty) Visualizac a o renderer = vtkRenderer() renderer.AddActor(volume) renWin = vtkRenderWindow() renWin.AddRenderer(renderer) Algoritmo 11: classe RayCast.

v = loadvolume( getdir() ) ray = raycast( v ) Algoritmo 12: Ray casting

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

33

Figura 9. Volume Rendering para volume DICOM contendo 108 imagens.

6. Discuss ao
o software InVesalius, sendo tamb O principal trabalho relacionado ao PyImageVis e em o Python (vide sec o 2). Estes desenvolvido aqui no Brasil em linguagem de programac a a softwares s ao relacionados, por em n ao s ao concorrentes; uma vez que, enquanto o focado para uso em hospitais, o PyImageVis, como j InVesalius e a foi dito anteriormente o 3, foi projetado para ser utilizado em pesquisa. Desta forma, o modelo utilizado na sec a constituido por um framework que visa a facilidade no desenvolvimento do PyImageVis e o entre diferentes algoritmos e a reutilizac o de c de integrac a a odigo. Do ponto de vista do usu ario nal, o InVesalius tem como foco prossionais da rea m a edica enquanto que o PyImageVis tem como objetivo atender pesquisadores em o e engenharia. Assim, o primeiro vai optar por uma interface que utiliza o computac a o com o software, enquanto que o segundo mouse como principal ferramenta de interac a es em linha-de-comando para ganhar exibilidade. As princiutiliza chamadas de func o o ao InVesalius, s o de pais vantagens do PyImageVis, em relac a ao a facilidade de inserc a novas funcionalidades e os recursos para prototipagem de algoritmos via scripts. o das principais A Tabela 2 permite analisar o tempo de execuc a es do sistema. func o Nos cinco primeiros m etodos citados nesta tabela (numpy2pil,pil2numpy,...,ndimage) foi usada como entrada a imagem em tons-deo cinza mostrada na Figura 5 (640 480 pixeis). Nos m etodos para leitura e visualizac a de imagens 3D (loadvolume,marchingcubes,raycast) da Tabela 2, o volume de entrada o mesmo utilizado para gerar a Figura 7 (108 imagens, cada uma com resoluc o e a o loadvolume() apresentou o 512 512, em tons-de-cinza). Destes m etodos, a func a o, 24.493 segundos, por envolver leitura em disco de um volume maior tempo de execuc a es de processamento de imagens s de dados. As func o ao obviamente mais r apidas que as es de visualizac o volum func o a etrica uma vez que a quantidade de dados e o n umero de es envolvidas e bem menor no primeiro caso. operac o es para edic o/visualizac o de imagens Na vers ao atual do PyImageVis, as func o a a ` biblioteca PIL. Contudo, escolhemos o formato NumPy como padr 2D pertencem a ao es de processamento da PIL para representar as imagens. Assim, quando utilizamos func o

ISSN: 1519-8219

34

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

es/M o Func o etodos e Tempo de execuc a o o (em segundos) Descric a Tempo de Execuc a numpy2pil 0.00018 pil2numpy 0.00022 imread 0.010 imshow 0.005 M etodos ndimage 0.08 loadvolume 24.493 marchingcubes 6.412 raycast 0.133
Tabela 2. Tabela com o tempo de CPU das principais func oes e metodos do PyImageVis.

o numpy2pil() inicialmente e, ao nal, retornar ao formato precisamos executar a func a NumPy executando pil2numpy(), o que aumentam o tempo de CPU. Contudo, pelas linhas pouco signicativo na pr 1 2 da Tabela 2 vemos que este custo e atica (T = 0.00040). Este problema n ao ocorre para as classes das bibliotecas VTK, Matplotlib e Scipy, pois a usada apenas para visualizac o (sa ltimas trabaprimeira e a da) de resultados e as duas u lham diretamente com o formato NumPy.

7. Conclus oes e Trabalhos Futuros


O software PyImageVis apresentado neste trabalho, visa propiciar um ambiente de c odigo reas de processaaberto, na linguagem Python, para prototipagem de algoritmos nas a o de imagens m mento e visualizac a edicas. A interface gr aca escolhida, que segue a losoa do MatLab, juntamente com as funcionalidades demonstradas e os respectivos o, s tempos de execuc a ao indicativos do potencial do sistema desenvolvido. o de func es Como trabalhos futuros, destacamos a necessidade de implementac a o o/visualizac o de imagens 2D, bem como leitura de imagens 3D, pr oprias para edic a a o da biblioteca PIL. A inclus evitando assim a utilizac a ao de novas funcionalidades e o com usu avaliac a arios para vericar a usabilidade do aplicativo s ao tamb em parte da lista de trabalhos futuros.

8. Agradecimentos
Gostar amos de agradecer ao Dr. Marcelo Daniel B. Faria pelas radiograas dent arias utilizadas e pelas discuss oes que ajudaram a enriquecer este trabalho.

Refer encias
Bankman, I. N., editor (2009). Handbook of medical imaging: processing and analysis, volume 1. Academic Press, San Diego, USA, 2nd edition. Blanchet, G. and Charbit, M. (2006). Digital Signal and Image Processing Using MATLAB. ISTE Ltd, London, UK. Blanchette, J. and Summereld, M. (2008). C++ GUI Programming with Qt 4 - The ofcial C++/Qt book . Prentice Hall Press, USA, 2nd edition.

ISSN: 1519-8219

o Cient REIC - Revista de Iniciac a ca, volume 11, n umero 1, 2011

35

Booch, G., Rumbaugh, J., and Jacobson, I. (2000). UML, Guia do Usu ario. Editora Campus, Rio de Janeiro, Brasil. B arbara, A. S. and de Carvalho Zavaglia, C. A. (2006). Processamento de Imagens M edicas Tomogr acas para Modelagem Virtual e F sica - O software InVesalius. Doutorado Engenharia Mec anica, Universidade Estadual de Campinas . Faculdade de Engenharia Mec anica. da Motta Pires, P. S. (2004). Introduc a ao 3.0. Departa o ao Scilab - Vers o e Automac o da UFRN, Natal, RN. Web: mento de Engenharia de Computac a a www.dca.ufrn.br/ pmotta/sciport-3.0.pdf. de Carvalho, M. M., Czekster, R. M., and Manssour, I. H. (2002). Uma Ferramenta Interativa para Visualizac a a edicas. o e Extrac o de Medidas de Imagens M o Cient o 2003, Web: SBC - Concurso de Trabalhos de Iniciac a ca (CTIC) Edic a www.sbc.org.br/sbc2003/ctic.html. Gonzalez, R. and Woods, R. (1992). Digital Image Processing. Addison-Wesley Publishing Company, Boston, USA, 2nd edition. Grayson, J. E. (2000). Python and Tkinter Programming. Manning Publications Co., USA, 1st edition. Hetland, M. L. (2008). Beginning Python: From Novice to Professional. Apress, Berkeley, USA, 2nd edition. Kitware, I. (2010). VTK Users Guide Version 5. Kitware, Inc., Columbia, USA, 11th edition. Lorensen, W. E. and Cline, H. E. (1987). Marching cubes: A high resolution 3D surface construction algorithm. SIGGRAPH Comput. Graph., 21:163169. Smart, J., Roebling, R., Zeitlin, V., and Dunn, R. (2011). wxWidgets 2.8.10: A portable C++ and Python GUI toolkit. wxWidgets Team, Web: http://docs.wxwidgets.org/2.8/. Summereld, M. (2007). Rapid GUI Programming with Python and Qt: the denitive guide to pyqt programming. Prentice Hall Press, Upper Saddle River, USA. Suri, J., Setarhedran, S. K., and Singh, S., editors (2002). Advanced algorithm approaches to medical image segmentation: state of art applications in cardiology, neurology, mamography and pathology. Springer-Verlag, London, UK. Vaseghi, S. (2000). Advanced signal processing and digital noise reduction. Wiley Chichester, Welwyn, UK, 2nd edition. Zhou, J. and Abdel-Mottaleb, M. (2005). A content-based system for human identication based on bitewing dental X-ray images. Pattern Recognition, 38(11):21322142.

ISSN: 1519-8219

Vous aimerez peut-être aussi