Ir para o conteúdo

 Voltar a invesalius-dev
Tela cheia

InVesalius-Co-registro

16 de Outubro de 2009, 18:06 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 16 vezes

Olá Pessoal,

Como vão as coisas por aí?

Estou finalizando o código de corregistro para mudança dos pontos entre a base vetorial do Rastreador Polhemus e a base vetorial das imagens dicom. O que pretendo agora é atualizar as fatias axial, coronal e sagital do navegador conforme mudo a posição do rastreador, ou seja, substituir os pontos fornecidos pelo clique do mouse nas "linhas cruzadas" pelos pontos dados pelo rastreador. Estudei um pouco e tentei entender pelo código, o método que vocês usaram para atualizar as fatias mostradas nas três janelas do InVesalius 3.
Estou pensando em utilizar as mesmas funções que vocês utilizaram, substituindo os pontos de input que antes eram do onmouseclick para um toggle button que a todo momento pega o ponto fornecido pelo rastreador, muda para um ponto da base das imagens e com estas três coordenadas atualizo as três fatias de imagens.

Vocês acham que esse é o melhor método? Alguma dica ou conselho que possa aprimorar?

Se não fui claro, por favor perguntem!

Abraços!

Victor Hugo

Autor: Victor Hugo de Oliveira Souza


1010 comentários

  • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
    16 de Dezembro de 2009, 19:33

     

    Olá Pessoal,Trago boas notícias. Já implementamos a task do neuronavegador no InVesalius e já conseguimos navegar utilizando o Polhemus. Falta alguns ajustes nas contas do co-registro para ficar tudo correto. Estamos trabalhando sempre com a ultima versao no trunk. Não subimos a todo momento porque achamos que não era interessante. Ainda não fizemos o co-registro com a reconstrução tridimensional, fizemos somente com as imagens e além disso estamos tendo problemas com o botão de neuronavegação, pois queremos utilizar um ToggleButton e tem bastante coisa confusa ainda., sendo a principal delas, o fato de não conseguirmos clicar novamente e parar de rodar o código de co-registro.Vamos agora deixar tudo organizado da melhor maneira possível, e assim que der vamos subir o que já fizemos para que vocês possam dar uma olhada. Abraços!Victor Hugo 

    • 4fc11d72fb1974e943174c8ca2fa8765?only path=false&size=50&d=404Thiago Franco Moraes(usuário não autenticado)
      17 de Dezembro de 2009, 14:36

       

      Olá Victor,

      Muito bom Victor. Legal, os avanços.

      Quando o código de co-registro está rodando, a interface fica travada? E então você não consegue clicar no botão para parar o código do co-registro, é isso, né ?

      Se for, isso acontece por que a interface gráfica tem um loop principal, o mainloop, não é exclusividade do wx, acredito que em todas as interfaces graficas tenha. Dentro deste mainloop que são tratados todos os eventos, redesenhos de tela e outras coisa. Uma coisa mais ou menos assim:

      while True:

          tem eventos pendentes?

                trata os eventos

          precisa redesenhar alguma parte da interface?

               redesenha

         ....

       

      O problema acontece que, pelo que eu vejo, o código de co-registro fica rodando e nunca dá chance para o mainloop continuar, pois ele fica rodando continuamente.

      Para evitar isso, vocês teriam que dar um jeito de o co-registro rodar sem interferir no mainloop, ou de tempos em tempos voltar o controle para o mainloop. Existem várias meios: Threads, Multiprocessos, e mais outros.

      É por isso que muitos programas ficam travados quando estão fazendo algum processamento pesado.

      Abraços!

      • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
        20 de Janeiro de 2010, 14:01

         

        Olá Thiago,É justamente isso mesmo que ocorre.Nunca trabalhei com threads ou multiprocessos. Algum algoritmo do invesalius trabalho com isto? Para eu poder entender.Você tem algum tutorial para me indicar ou algo parecido para eu aprender sobre?Obrigado.Abraços. 

          • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
            20 de Janeiro de 2010, 15:31

             

            Valeuuu Thiago!Fico agradecido.Só mais uma pequena dúvida. Procurei no vtkImageData alguma função que me permita ler o tamanho do pixel da imagem, em milímetros, para poder fazer uma conversão de unidades no código do neuronavegador. Mas não estou encontrado.Se souber de alguma função que faça isso e puder me passar ficarei agradecido.Abraços. 

          • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
            21 de Janeiro de 2010, 14:17

             

            Olá Pessoal,

            Estou com mais um pequeno problema.
            Como tinha dito, preciso saber o tamanho, em milímetros, do pixel da imagem, sendo que este está escrito no header do arquivo dicom, em uma tag de nome: PixelSpacing e elemento/grupo: (0028, 0030).
            Tentei utilizar o vtkDICOMImageReader().GetPixelSpacing(), pelo vtkImageData().GetSpacing() e também o gdcm.Image().GetSpacing().
            Todos eles forneceram valores de (1.0, 1.0, 1.0) para diferentes imagens de diferentes protocolos.
            Pelo MatLab eu abri o header do dicom e verifiquei que o PixelSpacing tinha valores diferentes de 1.0 para algumas imagens, como por exemplo: (0.478, 0.478).
            Ou seja, as funções das bibliotecas vtk e gdcm não estão lendo a tag que eu desejo e por isso fornecem o valor de 1.0 que é o default.
            Uma possível solução seria ler a tag do modo bruto, utilizando o gdcm e os números de elemento/grupo (0028, 0030), mas não consegui achar uma função que faça isso.

            Preciso disso para terminar o algoritmo de co-registro. Se puderem me ajudar ficarei muito satisfeito. Já procurei em muitos lugares e ainda não consegui resolver.

            Abraços.
            Victor Hugo.

            • 9512fd15511b858a19127f17fd75fbf2?only path=false&size=50&d=404Paulo Henrique Junqueira Amorim(usuário não autenticado)
              21 de Janeiro de 2010, 15:35

               

              Olá Victor,

              Isso mesmo no header da DICOM já tem essa informação.

              Você pode usar o módulo dicom.py que está em \reader\ do InVesalius.

              Exemplo:

              import reader.dicom

              d = dicom.Parser()

              if (d.SetFileName("E:\Dicom\slice1.dcm")):

                  print d.GetPixelSpacing()

              Ah Victor quando você ver que o assunto é um pouco fora do título do tópico, pode criar um novo tópico, nesse mesmo poderia criar um "Pegar tamanho do pixel", assim facilita para quem é novo no fórum.

              Abraços,

              Paulo Amorim

              • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
                21 de Janeiro de 2010, 16:30

                 

                E aí Paulo,Muito obrigado, eu consegui aqui.Então, sobre ser em um novo tópico, eu tentei. Antes aparecia esta opção e eu criava normalmente, agora não aparece mais, não há nenhum link na parte do fórum que me possibilita criar um novo tópico, somente um link para solicitar notificação para o invesalius-dev.  Desse jeito eu só consigo responder a algum tópico existente, por isso não crio um novo tópico.Outra coisa que aconteceu, da noite para o dia parei de receber as postagens do fórum no email. Não alterei nenhuma configuração nem nada, só parou, aí para ver as postagens eu preciso vim ver no fórum.Devo ter perdido alguma permissão no site.Obrigado novamente.Abraços. 

                • 45bc47f23454bc6f0bb5eefccad4b879?only path=false&size=50&d=404Tatiana Al-Chueyr Pereira Martins(usuário não autenticado)
                  21 de Janeiro de 2010, 16:38

                   

                  Oi Victor, acabamos de corrigir o problema...

                  Alguma previsão para vocês subirem o código-fonte?

                  Abraços,

                  Tatiana

                  • 8b29dd625bf14f6a12777f64db9aa2e7?only path=false&size=50&d=404Victor Hugo de Oliveira Souza(usuário não autenticado)
                    21 de Janeiro de 2010, 18:42

                     

                    Olá Tatiana,Obrigado.O código de neuronavegação somente pelas fatias está 90% pronto.Falta uma parte importante que é fazer o botão de "liga/desliga" a neuronavegação, que será necessário utilizar threading (como o Thiago me aconselhou). Ainda estou estudando isto, e atualmente sempre que abro o InVesalius e utilizo o neuronavegador,  eu preciso fechar o programa e depois abri-lo novamente.Acho que sem este botão, não faz sentido eu subir o código. Espero conseguir finalizar logo, pois também precisamos fazer experimentos com ele. Abraços. 

Tutorial passo-a-passo sobre uso do software InVesalius 3

17 de Abril de 2010, 11:45, por Desconhecido

Se você tem interesse em utilizar o software de reconstrução 3D de imagens médicas InVesalius, mas não sabe por onde começar, acesse já o tutorial escrito pelo designer Cícero Moraes:



InVesalius 3 Beta 2 disponível

6 de Março de 2010, 11:41, por Desconhecido

Para saber mais sobre o InVesalius 3.0.0 Beta 2, leia:
http://svn.softwarepublico.gov.br/trac/invesalius/wiki/releases/pt/changelog

Continue contribuindo com a Comunidade InVesalius!

------------------------------------



Siga cada passo do InVesalius com o Twitter!

8 de Fevereiro de 2010, 9:57, por Desconhecido

Acompanhar o InVesalius pelo Twitter permitirá que você saiba, em primeira mão, sobre:



InVesalius 3 Beta 1 disponível para testes em Windows e GNU Linux

27 de Janeiro de 2010, 10:50, por Desconhecido



Trabalho acadêmico discute aplicação do OpenBRR ao InVesalius

6 de Novembro de 2009, 16:35, por Desconhecido

Autor: Tatiana Al-Chueyr Pereira Martins