Converting a CT scan movie into a 3D mesh – Convertendo um vídeo de tomografia em uma malha 3D

Obs.: Assista o vídeo acima antes de ler o post 😉

Comecei esse projeto com o intuito de mapear o desenvolvimento de uma crisálida (casulo da borboleta) ao longo da sua formação, sem a necessidade de fazer tomografia computadorizada, mas fatiando o casulo de modo a reconstruir o corpo em 3D. Porém dois problemas aconteceram no decorrer do percurso. O principal é que seria difícil arrumar casulos sem vida para fatiá-los e o outro é que alguém já fez isso.

Antes da desilusão de saber que outro já havia conquistado o posto de vanguardista na exploração interna dos casulos, cheguei a fazer pequenos testes para converter imagens de fatias em elementos 3D.

Comecei com uma bergamota. Evidentemente que o resultado não foi dos melhores, pois além de ter poucas fatias a estrutura da bergamota não permite que ela se mantenha firme após ser fatiada (se não estiver congelada).

Depois  fiz um teste com um chuchu, onde cortei um número maior de fatias. O resultado ficou melhor, mas o problema principal é que mesmo sendo renderizado, não se tratava de uma malha, mas de dados tipo voxel. É como se eu renderizasse fumaça e não tivesse muita liberdade para editar o volume.

Eu precisava de um aplicativo que convertesse essa sequência de imagens jpg ou png em uma sequência de arquivos DICOM, próprio de tomografia e legíveis no InVesalius.

Pesquisei muito, mas muito mesmo. Pesquisei tanto que eu só sonhava com tomografias, cérebros, corações e uma série de vísceras transparentes. Demorou um bocado para que eu encontrasse a saída. Felizmente consegui achar a solução no Fórum do InVesalius, onde me passaram um aplicativo que fazia essa conversão. Falarei dele na descrição do processo.

Descrição do Processo

Há alguns dias atrás, assisti a um documentário chamado Monstros Pré-históricos do History Channel. Nele apareceu um professor de palentologia chamado Lawrence Witmer, falando entusiasticamente acerca das caveiras dos animais exibidos no programa. Ao vê-lo falar com tanta vontade, logo percebi que se tratava de um nerd, parecido comigo e com meus amigos… daqueles que “piram na batatinha” com o que estudam. Além disso, um fio de memória me fez lembrar que uma vez ao pesquisar sobre tomografias, acabei chegando a um site que oferecia tomografia de dinossauros e o indivíduo que gerenciav ao site me lembrava o sr. Witmer. Dito e feito, ao pesquisar sobre ele, acabei chegando ao dito site que onde oferecem uma série de tomografias de dinossauros.

Uma das páginas que estavam nos links me chamou a atenção. Nela podemos baixar arquivos .MOV de uma tomografia de um porco. Esse vídeo mostra os nomes das áreas conforme a tomografia varre a cabeça do porco.

Lembrei das minhas tentativas de converter uma sequência de imagem em arquivos de tomografia e pensei que seria uma boa oportunidade de testar o programa do fórum do InVeslaius.

Inicialmente eu baixei o arquivo .MOV. Como seria muito difícil limpar as linhas com os nomes das área, ocultei as partes que apareciam as logomarcas da faculdade e a referência do corte axial (dentro dos limites em vermelho). Também limpei as linhas superior e inferior, que seriam confundidas com ossos na tomografia.

Esse processo foi feito com a ajuda do programa Kdenlive, um excelente editor de vídeo, para o qual criei um tutorial há tempos atrás.

Gerei um vídeo novo, sem as logomarcas e linhas. Daí converti o vídeo em uma sequência jpg com o seguinte comando:

$ ffmpeg -i Video.mpeg -sameq sequencia/%04d.jpg

Onde:

ffmpeg é o programa de conversão de vídeo, mas pode ser usado para converter em uma sequência de imagens.

-i Video.mpeg esse -i é de input, ou seja, o arquivo que será a base da conversão, nesse cado o Video.mpeg.

-sameq é para que o jpg fique com a mesma qualidade do vídeo mpeg.

sequencia/%04d.jpg onde sequencia/ é o nome do diretório que irá a sequẽncia de arquivos, que por suas vez como diz a configuração %04d.jpg terão quatro digitos e terão a extensão jpg (0001.jpg, 0002.jpg… 003.jpg)

Até aqui tudo correu perfeitamente. O grande problema agora era  conseguir converter essa sequência de arquivos jpg em uma sequência de arquivos DICOM. Como eu “disse” no início do artigo, eu havia entrado em contato com os desenvolvedores do InVesalius no Fórum desse programa e eles me passaram o link de um programa chamado IMG2DCM, que fazia essa conversão.

Com esse programa em mão, como disse o desenvolvedor Thiago Moraes, bastava fazer a conversão com o seguinte comando:

$ python img2dcm.py -i diretorio_imagens_entrada -o diretorio_dicom_saida -t jpg

Daí foi só abrir a sequência de arquivos DICOM no InVesalius. Não vou descrever aqui como fazer isso, pois já pormenorizei o processo em um tutorial que escrevi para o Hardware.com.br.

A conversão em DICOM funcionou perfeitamente. O problema é que o vídeo base trazia umas linhas com os nomes dos músculos e outras partes da cabeça do porco. Ao ser gerada a malha 3D, evidentemente que as letras entraram na reocnstrução, fazendo com que o parecesse a cabeça de um… porco espinho 🙂

Foi mais fácil importar no Blender e apagar o texto do que mexer em cada uma das imagens em que eles apareciam. Só o fato de usar o modificador Remesh, para simplificar a malha, fez com que sumisse grande parte do texto. Depois foi só converter em malha a modificação e apagar manualmente os textos.

Ao apagar os texto era só ir dando uma “polidinha” no Sculpt Mode. A tarefa acabou se tornando agradável, uma terapia como dizem alguns.

Uma vez que a orelha direita estava incompleta, usei de uma técnica descrita um post anterior para reconstruir o pedaço que faltava.

Você deve ter percebido que a cabeça do porco estava um tanto esticada. Isso aconteceu por conta das configurações dos arquivos DICOMs. Como eu estava com preguiça de estudar a configuração da distância das fatias, resulvi apenas redumensionar a malha assim que terminasse o processo de enxerto na orelha.

Alguns amigos me pediram o motivo de eu não ter feito retopo na malha. Grosso modo, modelar uma malha com menos subdivisões que essa gerada pelo InVesalius. A resposta é simples, como eu pretendo utilizar essa tecnologia futuramente na área de arqueologia, decidi topar o desafio de criar um mapeamento em cima de uma malha complexa, com os dados precisos da tomografia, pois querendo ou não, ao se fazer o retopo o artista sempre deixa passar algum detalhe que pode ser muito importante em se falando do modelo em questão… nesse caso, um especialista em anatomia de suínos veria rapidamente que estava faltando algum detalhe.

Depois do porco mapeado, foi a vez de renderizar, ou gerar, as imagens finais e editar o vídeo que você viu no início do post.

Um fato que me trouxe muita alegria foi que eu mandei um e-mail ao Larry Witmer, falando da minha tentativa de gerar o modelo, ao que ele respondeu rapidamente me parabenizando pelos resultados.

Mais do que isso, depois que mandei o vídeo acima, ele postou na página do Wimerlab do Facebook.

Para aqueles que gostaram do post e desejam dar uma olhada mais tridimensional no porco, eu decudi criar uma versão .OBJ para ele (valeu pela inspiração Paulo!), basta clicar no  link para baixar: Pig_Cogitas3D

Abri o arquivo .OBJ com o poderoso e opensource Meshlab. Com ele você poderá ver uma infinidade de arquivos 3D.

Conclusão

E agora vem a pergunta, o que fazer com essa técnica? A resposta também é simples. Ao pesquisar na internet eu percebi que existem poucos sites que oferecem arquivos DICOM ou INF para serem baixados, ao passo que a oferta de vídeos de tomografia é esmagadoramente maior.

Daí vai da curiosidade ou necessidade da pessoa para achar o que precisa e reconstruir em 3D. Existem bons vídeos encontrado na internet que podem ser convertidos em malhas. Como esse:

Também apreciei grandemente esse vídeo abaixo:

Só que ainda não testei o método nele. Enfim, as possibilidades são muitas e infindavelmente úteis e divertidas.

Por ora é isso. Vou-me mas deixo aqui meu grande abraço e meus votos de ótimo dia!


Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Spam Protection by WP-SpamFree