2009-06-12 10 views
7

Sto cercando di costruire una soluzione medica da utilizzare dai chirurghi per visualizzare le immagini Dicom in 3D. Inoltre, il software consentirà loro di eseguire alcune segmentazioni e manipolazioni delle immagini.Miglior linguaggio di programmazione per l'elaborazione delle immagini mediche

Probabilmente userò il pacchetto VTK www.vtk.org/ per assistere con questo progetto.

Ora, mi chiedo se sia più facile e migliore fare questo progetto in C#, C++ o Python? Apprezzo qualsiasi aiuto nel trovare come scegliere tra queste tre opzioni.

risposta

4

Personalmente, sono un C++ e un pitone, e probabilmente andrei con C++, perché questo sembra un progetto relativamente intenso, e faccio la maggior parte del mio miglior design di alto livello in C++ (ottimo per costruire velocemente, base di codice flessibile), mentre io tendo ad usare python per cose come django, dove c'è meno logica di applicazione, ma essere in grado di sintonizzare la funzione, vedere e sentire rapidamente è molto importante. Tuttavia, la mia scelta non significa che dovrebbe essere una tua scelta. Ecco alcuni aspetti da considerare:

Primo piano 1) Familiarità. Se stai codificando il codice di produzione, vuoi andare con qualcosa che conosci, e funziona bene per te, o sarai in difficoltà con la lingua e ti mancheranno le scadenze. E anche quando completi il ​​progetto, sei destinato ad avere un sacco di codice disordinato per le cose che stavi imparando. Sono tutto per imparare nuove lingue, ma farlo su qualcosa che ti puoi permettere di rovinare.

2) librerie di terzi; quali vuoi oltre a quello che hai menzionato? Se non hanno wrapper, rotolerai da solo. Quello che vuoi scrivere nella tua GUI sarà un esempio.

3) Distribuzione: presumo che questo sia un eseguibile di Windows presunto. C# e C++ lo fanno facilmente, ma dovrete familiarizzare con py2exe se state pianificando di distribuire un programma python senza un interprete python

2

Se riesci a cavartela con Python, in altre parole, se sai che funzionerà bene in Python, lo sceglierei sicuramente su C#/C++.

Sono sicuro che qualsiasi libreria 3D utilizzata sia costruita in C o C++ in ogni caso, quindi l'interfaccia con esso con un linguaggio di alto livello come python non dovrebbe causare un rallentamento.

+0

Mi chiedevo perché consiglieresti Phython su C# e C++ – Bekh

+3

Python è un linguaggio di livello superiore, e quindi otterrai più lavoro, più velocemente e con meno dolore. Si può sostenere che C# è anche un linguaggio di alto livello, ma il C++ non lo è, e se si decide di usarlo si correranno molti più problemi. – cloudhead

+3

Il C++ è di livello così elevato come il programmatore lo codifica –

0

Ho lavorato per Sound Vet per un po '. Forniscono software di imaging xray per il settore veterinario. Usano C# e winforms.

0

Sono d'accordo con Todd Gardner che la familiarità è probabilmente il fattore più importante per determinare il successo di una scelta di linguaggio di programmazione. Quindi, se hai molta più familiarità con una di queste tre lingue rispetto alle altre due (o qualunque altra sia la tua opzione), ti consiglio di prenderne una.

Tuttavia, se si è ugualmente poco familiari con tutti loro, quindi vorrei secondo consiglio di cloudhead di Python. Credo che sia il più facile dei tre a imparare e diventare produttivo dentro.

1

La maggior parte delle immagini 3D mediche sono generalmente molto grandi (dimensioni GB). Tu vuoi scegliere una lingua che possa facilmente far fronte a questi. A mia conoscenza C# ha un limite di memoria di 2 GB (non sono sicuro al 100%) che potrebbe causare alcuni problemi.

Non ho alcuna esperienza con Python, quindi non ho intenzione di andare più in basso in quella direzione. Ma ho lavorato con C# e C++ sui dati delle immagini mediche (ricostruzione, filtraggio, normalizzazione e altri calcoli pesanti). Nel nostro caso il C++ è l'unica scelta a causa della velocità. Ma quando si tratta di visualizzare le immagini, questo probabilmente non è un problema.

Vi auguro buona fortuna. Un buon visualizzatore 3D stabile e veloce sarebbe fantastico!

+1

C# /. NET ha e non ha un limite di memoria da 2 GB. Se si sta tentando di allocare un singolo blocco continuo di memoria (cioè nuovo byte [x]), si è limitato a 2 GB. Questo è intenzionale.Tuttavia su un sistema a 64 bit è possibile allocare la quantità di memoria che il sistema normalmente consente, a condizione che nessuno chuck superi il 2GB che sarebbe possibile quando l'assembly viene eseguito su un sistema a 32 bit. Per caricare un'immagine grande, è possibile creare una matrice di byte [] per ogni linea di scansione, invece di provare a creare un massiccio array per l'intera immagine. È anche possibile utilizzare una classe di astrazione generica per creare l'array nei blocchi – David

6

Python è diventato popolare per la visualizzazione 3d, ad esempio diversi laboratori lo utilizzano per immagini del cervello. Quindi è sicuramente utilizzabile per questo tipo di problemi. Dal punto di vista della libreria, credo che tu sappia che cose come vtk e co possono essere usate da Python.

http://neuroimaging.scipy.org/site/doc/manual/html/faq/why.html

Certo, farlo in C++, in teoria , si tradurrà in programmi più veloci, tutto il resto è uguale (stessi algoritmi, programmatori abili nella lingua, ecc ...) e dato ' tempo infinito '. Ma python è sicuramente più produttivo del C++: in un certo lasso di tempo, otterrai più cose in Python che in C++, a meno che tu non sia un programmatore molto più efficiente in C++ che in Python. Inoltre, se vi è la necessità di interagire con persone scientifiche che non sono programmatori, python sarà più leggibile di C++. Il C++ prodotto da ricercatori/scienziati tende ad essere davvero orribile nella mia esperienza (anche peggiore di Fortran :)).

Il problema più grande che posso prevedere è se python non è abbastanza veloce/memoria abbastanza, in modo che coinvolga molti vincoli da un punto di vista architettonico. Non penso che sarà il caso delle immagini (Python, come la maggior parte dei linguaggi di alto livello, ha problemi di scalabilità quando hai bisogno di dieci di migliaia di oggetti con molte interazioni - questa è una delle poche aree in cui si usa C++ per un progetto al giorno d'oggi, partendo da zero, ha ancora senso IMHO).

Disclaimer: Devo dire che sono coinvolto parecchio nella comunità scientifica di Python e che non sono uno specialista di elaborazione delle immagini.

+3

+1 Utilizziamo sia C++ che Python per attività numeriche. Le uniche volte in cui abbiamo incontrato problemi con Python era quando avevamo un sacco di piccoli oggetti. Quindi Python tendeva a usare troppa memoria. E se è troppo lento, non puoi semplicemente accelerarlo chiamando una libreria perché l'I/O per piccoli oggetti è troppo lento e hai ancora problemi di memoria. Ma se hai un grosso oggetto e puoi chiamare una libreria per un po 'di lavoro pesante, Python ha tempi di andata e ritorno molto più veloci e io andrei a farlo. – stephan

0

La maggior parte delle società di imaging medicale utilizza le librerie Accusoft Pegasus PICTools. Forniscono la compressione e la decompressione più rapida e più standard per tutti i formati DICOM lossy e lossless come JPEG 2000, Lossless JPEG, JPEG-LS e altri.

Se la velocità è richiesta, nulla verrà confrontato.

Se si sta distribuendo su Windows, ImageGear .NET o ImageGear Pro offrono ambienti di facile utilizzo con supporto completo per i file DICOM dcm.

È inoltre possibile utilizzare ImagXpress per lo sviluppo di Windows.

2

ITK sono le ginocchia dell'ape per l'elaborazione delle immagini mediche, e questo è in C++. quindi credo che raccomanderei C++ w/ITK.

Problemi correlati