Reconstrução de Tomografias com o VTK Python, o SimpleITK e o Multiprocessing ============================================================================= | **Cicero Moraes** | *3D Designer, Arc-Team Brazil, Sinop-MT* | | **Issam Dakir** | *Cirurgião Dentista, Marrocos* | | **Rodrigo Dornelles** | *Cirurgião Plástico, Núcleo de Plástica Avançada - NPA, São Paulo-SP* | | **Everton da Rosa** | *Cirurgião BMF, Hospital de Base, Brasília-DF* | | DOI: https://doi.org/10.6084/m9.figshare.14370902 .. only:: html ISBN: **978-65-00-29233-6** .. figure:: images/VTK_comp.jpg :align: center O presente capítulo tem por objetivo apresentar a conversão de arquivos DICOM em malhas 3D através do uso dos módulos VTK, SimpleITK e Multiprocessing, todos presentes no Python 3, a linguagem de programação predominante no OrtogOnBlender. .. attention:: Este material utiliza a seguinte licença Creative Commons: **Atribuição 4.0 Internacional (CC BY 4.0)**. ------------ Apresentação ------------ A reconstrução de tomografias em malhas 3D é uma etapa essencial no planejamento cirúrgico digital. Há muito que o OrtogOnBlender (OOB) oferece essa opção aos usuários, permitindo que todo o processo seja feito dentro da interface do Blender. Uma das grandes dificuldades encontradas no processo é oferecer uma ferramenta que reconstrua as malhas sem apresentar erros, algo bastante desafiador dada a heterogeneidade de biblioteca e tomógrafos utilizados para a geração dos arquivos DICOM. Com a evolução do OOB os usuários foram apresentados a várias abordagens diferentes, que compreendem desde a reconstrução manual (MANUAL, CUSTOM e `BDENTAL `_) até as automáticas ou semi-automáticas (SLICER, AUTOMATIC, DEFAULT, etc.). No entanto, mesmo diante de tantas opções o OOB carecia de um processo que fosse efetivamente rápido. Para contemplar essa demanda foi inserido no desenvolvimento dos reconstrutores uma série de ferramentas que diminuíram significativamente o tempo do processamento. São elas o `VTK `_, o `SimpleITK `_ e o `Multiprocessing `_. Todos os módulos estão disponíveis nos repositórios pip do Python e no caso do Multiprocessing, já se encontra presente nativamente na instalação do mesmo. .. attention:: O objetivo deste capítulo não é discorrer acerca dos aspectos técnicos da programação, mas o uso prático dos módulos na reconstrução das malhas tridimensionais e seu impacto no fator tempo. ------------- Como Funciona ------------- .. figure:: images/VTK_gui_0.png :align: center Interface da ferramenta VTK ITK. O conjunto de ferramentas **3D Object to CT-Scan** se encontra disponível na aba **Ortog** ao lado direito da 3D View (fig.1). .. warning:: A ferramenta não está disponível no Blender 2.80, utilize o Blender 2.91 para rodá-la. .. figure:: images/VTK_gui_1.png :align: center Organização do DICOM. Assim que o usuário expandir o **CT-Scan Reconstruction** é necessário clicar no menu **Select** e selecionar a opção **VTK ITK** (fig. 2). O funcionamento da ferramenta é muito semelhante a opção `SLICER `_, inicialmente é necessário indicar a localização do diretório DICOM e em seguida clicar em **Organize** para que seja feita a listagem de grupos de fatias. .. figure:: images/VTK_gui_2.png :align: center Visualização do *voxel data*. Caso o usuário decida testar os valores do *threshold* há a possibilidade de pré visualizar a malha através do **Voxel Preview**. Assim que os grupos forem listados, basta clicar no botão **Voxel Preview** que os *slices* da tomografia serão importados à cena. O controle do valor é feito na barra *Threshold* clicando e arrastando o mouse ou clicando e preenchendo com um valor. Para aplicar e renderizar o *voxel* com valores atualizados é necessário clicar em **Apply Thresold!** (fig. 3). A opção **Use Scene World** pode ser utilizada caso o *voxel* seja observado pela parte inferior, posto que a cena ficará escurecida. Ao ativar a opção a iluminação será a mesma em todas as direções, mas o *background* se tornará branco, o que pode causar maior sensibilidade visual a alguns usuários e esse é o motivo de estar desabilitada por padrão. .. figure:: images/VTK_gui_3.png :align: center Valor padrão ou não reconhecimento do tomógrafo. Por padrão o valor do campo **Tomograph** é NO INFO!!! e NONE nos campos **Bone Factor**, **Soft Factor** e **Teeth Factor** (fig. 4). Mas se mesmo depois do usuário clicar em **Organize**, os valores permaneceremos os mesmos, isso significa que o tomógrafo não foi reconhecido pelo OOB e será necessário o preenchimento manual dos campos. .. figure:: images/VTK_gui_4.png :align: center Tomógrafo reconhecido. Quando o tomógrafo é reconhecido automaticamente o valor do primeiro campo é alterado para **YES, AUTOMATIC!** e os fatores ao *threshold* de cada tecido (fig. 5). Uma vez que tudo está definido o usuário poderá clicar em **Convert DICOM to 3D** e aguardar até que as malhas sejam reconstruídas. --------------------------------------------------------- Tempo de Reconstrução em Sistemas Operacionais Diferentes --------------------------------------------------------- Os autores selecionaram aleatoriamente 10 tomografias computadorizadas, de modo a testar uma amostra heterogênea e apresentar uma média geral do tempo necessário para a reconstrução em três sistemas operacionais diferentes. A configuração do notebook e dos sistemas operacionais utilizados estão presentes no capítulo intitulado **Fotogrametria 3D - Desempenho nos Sistemas Operacionais: Windows, Linux e Mac OS X** :cite:`OOBFOTOGRAM2020`, mais precisamente na `Descrição Técnica `_. Em linhas gerais trata-se de um notebook com processador i7 de 1.80 GHz, 20 GB de memória RAM com armazenamento SSD SATA de 480 GB. Os autores optaram por comparar o tempo da ferramenta VTK ITK com a SLICER, ambas presentes no seletor de reconstrução de tomografias do OOB. ---------- Resultados ---------- .. figure:: images/VTK_graf_1.png :align: center Comparação de tempo entre sistemas operacionais. O sistema que apresentou o melhor desempenho foi o Windows (fig. 6) onde, em média, uma reconstrução levou pouco mais de um minuto para ser feita (62 segundos). O Linux teve um desempenho 26% inferior, com 78 segundos e em seguida o Mac com um desempenho 35% inferior ao Windows ao levar 84 segundos em média para gerar os modelos. Quando comparados com o modo SLICER, a diferença dentro dos sistemas foi ainda maior. No Windows a reconstrução do VTK ITK foi 4,84 vezes mais rápida que a do SLICER (62 vs 300), no Linux a diferença foi de 3,09 vezes (78 vs 241) e no Mac foi de praticamente 2 vezes (84 vs 167). O modo SLICER passou por algumas melhorias desde que parte dos autores publicaram um estudo de comparação intitulado **Sistema de Reconstrução de Tomografia Computadorizada Baseado no Slicer 3D e no DicomToMesh** :cite:`OOBSLICER_2020`. Naquela feita os resultados do desempenho `eram mais favoráveis ao Linux `_ em relação ao Mac OS X, no entanto, provavelmente por conta das alterações e adaptações do código desde aquela versão, a ferramenta passou a funcionar de modo mais rápido no Mac (167 vs 241). O elemento preponderante no desempenho do VTK ITK em relação ao SLICER é o módulo Multiprocessing do Python, que permite a reconstrução paralela de três malhas ao mesmo tempo, cada uma em uma *thread* diferente do processador. Quando a comparação foi feita, o SLICER procedia com uma reconstrução por vez e essa processada em apenas uma *thread*, o que que explica parte da lentidão. .. figure:: images/VTK_comp.jpg :align: center Comparação entre as malhas - VTK ITK (à esquerda) e SLICER + DicomToMesh (à direita). Outro aspecto que torna o SLICER mais lento em relação ao VTK ITK é a qualidade superior da malha gerada pelo primeiro, mérito da ferramenta `DicomToMesh `_ e da configuração do seu reconstrutor (fig. 7). Um fato notório a ser pontuado é que a malha gerada no modo SLICER, além de contar com uma qualidade superior, tem ainda pouco mais da metade do tamanho gerado no VTK ITK, a média dos arquivos foi de 113 MB (VTK ITK) vs 64 MB (SLICER). Em face da robustez, da familiaridade dos usuários e dos resultados animadores promovidos pelo uso do Multiprocessing, o desenvolvedor (e um dos autores do estudo) optou por ajustar o código e inserir o processamento paralelo também na ferramenta SLICER. Em seguida as 10 tomografias foram reconstruídas nos três sistemas operacionais abordados e uma nova comparação foi efetuada. .. figure:: images/VTK_graf_2.png :align: center Comparação de tempo entre sistemas operacionais. Grosso modo, o tempo da reconstrução se mostrou muito compatível com o VTK ITK no Linux e no Mac, mas isso não se refletiu no Windows (fig. 8 SLICER Multi.). Cabe ao usuário do último sistema citado, optar pela ferramenta que melhor se adequar aos seus propósitos, seja a qualidade ou a rapidez e no caso dos outros dois, a pouca diferença torna o SLICER a melhor escolha. .. warning:: Para que o VTK IVK e o SLICER (multi) funcionem no Windows, é necessário que os usuários do sistema façam a instalação do Python e de bibliotecas complementares. Para tal, basta acessar o passo-a-passo disponível na `documentação oficial do OOB `_. --------- Conclusão --------- A ferramenta VTK ITK vem somar-se a ampla gama de alternativas oferecidas pelo OrtogOnBlender. Os maiores contemplados com o seu surgimento são os usuários do Windows, cujas soluções anteriores apresentavam um desempenho claramente inferior aos demais sistemas. Com a inserção do Multiprocessing os usuários do Linux e do Mac contam agora com uma opção compatível em relação ao desempenho do VTK ITK, mas com uma qualidade de malha amplamente superior e arquivos com praticamente a metade do tamanho. O modo VTK ITK está apenas no início do seu desenvolvimento e melhoramentos na malha e no tamanho dos arquivos podem ser implementados no futuro, o fato é que a diferença de qualidade, ainda que seja evidente no aspecto da apresentação das imagens, pouco influencia no planejamento cirúrgico e na confecção de guias por parte de usuários preparados e experientes. Sendo assim, em linhas gerais, não há muita diferença prática entre as ferramentas abordadas neste capítulo. -------------- Agradecimentos -------------- Ao Dr. Davi Sandes Sobral por ceder a tomografia utilizada neste capítulo. .. .. bibliography:: vtk_itk_references.bib :labelprefix: A :style: plain :cited: