2009-06-12 9 views
7

Je cherche à construire une solution médicale à utiliser par les chirurgiens pour visualiser les images Dicom en 3D. En outre, le logiciel leur permettra d'effectuer une certaine segmentation et manipulation des images. Je vais probablement utiliser le paquet VTK www.vtk.org/ pour vous aider dans ce projet. Maintenant, je me demande s'il est plus facile et meilleur de faire ce projet en C#, en C++ ou en Python? J'apprécie toute aide pour trouver comment choisir entre ces trois options.Meilleur langage de programmation pour le traitement d'images médicales

Répondre

4

Personnellement, je suis un gars C++ et python, et j'irais probablement avec C++, parce que cela ressemble à un projet relativement intensif, et je fais la plupart de mon meilleur design en C++ (idéal pour construire rapidement, base de code flexible), alors que j'ai tendance à utiliser python pour des choses comme django, où il y a moins de logique d'application, mais être capable de régler la fonction, regarder et sentir rapidement est très important. Cependant, mon choix ne signifie pas que cela devrait être votre choix. Voici quelques points à considérer:

Principale 1) Connaissance. Si vous codez un code de production, vous voulez utiliser quelque chose que vous connaissez et qui fonctionne bien pour vous, sinon vous allez avoir du mal avec la langue et manquer des délais. Et même lorsque vous terminez le projet, vous êtes obligé d'avoir beaucoup de code désordonné pour les choses que vous étiez en train d'apprendre. Je suis tout pour apprendre de nouvelles langues, mais faites-en quelque chose que vous pouvez vous permettre de bousiller.

2) Bibliothèques de tiers; lesquels voulez-vous en plus de celui que vous avez mentionné? S'ils n'ont pas d'emballage, vous roulerez le vôtre. Ce que vous voulez écrire votre interface graphique serait un exemple.

3) Déploiement: Je suppose que ce sera un exécutable windows supposé. C# et C++ le font tous les deux facilement, mais vous devrez vous familiariser avec py2exe si vous envisagez de déployer un programme python sans un interpréteur python

2

Si vous pouvez vous en sortir avec python - en d'autres termes, si vous savez qu'il fonctionnera bien en python, je l'aurais certainement choisi en C#/C++.

Je suis sûr que quelle que soit la bibliothèque 3D que vous utilisez est construite en C ou C++ de toute façon, donc l'interfaçage avec un langage de haut niveau comme python ne devrait pas causer de ralentissement.

+0

Je me demandais pourquoi recommanderiez-vous Phython sur C# et C++ – Bekh

+3

Python est un langage de plus haut niveau, et vous obtiendrez ainsi plus de travail, plus rapidement et avec moins de douleur. On peut affirmer que C# est aussi un langage de haut niveau, mais C++ ne l'est pas, et vous aurez beaucoup plus de mal si vous décidez de l'utiliser. – cloudhead

+3

C++ est aussi haut niveau que le programmeur le code –

0

J'ai travaillé pour Sound Vet pendant un moment. Ils fournissent un logiciel d'imagerie par radiographie pour le domaine vétérinaire. Ils utilisent C# et winforms.

0

Je suis d'accord avec Todd Gardner que la familiarité est probablement le facteur le plus déterminant du succès d'un choix de langage de programmation. Donc, si vous êtes beaucoup plus familier avec l'une de ces trois langues que les deux autres (ou quelles que soient vos autres options), je vous recommanderais de choisir celle-là.

Cependant, si vous n'êtes pas familier avec tous, alors je ferais une seconde recommandation de Python de cloudhead. Je crois que c'est le plus facile des trois à apprendre et à devenir productif.

1

La plupart des images 3D médicales sont généralement très grandes (taille GB). Vous voulez choisir une langue qui peut facilement faire face à ceux-ci. À ma connaissance C# a une limite de mémoire de 2 Go (je ne suis pas sûr à 100%) ce qui peut causer des problèmes.

Je n'ai aucune expérience avec Python, donc je ne vais pas aller plus loin dans cette voie. Mais j'ai travaillé avec C# et C++ sur des données d'images médicales (reconstruction, filtrage, normalisation et autres calculs lourds). Dans notre cas, C++ est le seul choix en raison de la vitesse. Mais quand il s'agit de voir les images, cela ne pose probablement pas de problème.

Je vous souhaite la meilleure des chances. Une bonne visionneuse 3D stable et rapide serait géniale!

+1

C#/.NET a et n'a pas de limite de mémoire de 2 Go. Si vous essayez d'allouer un seul morceau de mémoire continu (c'est-à-dire un nouvel octet [x]), vous êtes limité à 2 Go. C'est délibéré.Cependant, sur un système 64 bits, vous pouvez allouer autant de mémoire que le système le permet normalement, tant qu'aucun mandrin ne dépasse les 2 Go qui seraient possibles lorsque l'assemblage est exécuté sur un système 32 bits. Pour charger une grande image, vous pouvez créer un tableau à un octet [] pour chaque ligne de balayage, au lieu d'essayer de créer un tableau massif pour toute l'image. Vous pouvez également utiliser une classe d'abstraction générique pour créer le tableau en blocs – David

6

Python est devenu populaire pour la visualisation 3D - plusieurs laboratoires l'utilisent pour l'imagerie cérébrale, par exemple. Donc, il est certainement utilisable pour ce genre de problèmes. Au niveau de la bibliothèque, je suppose que vous êtes conscient que des choses comme vtk et co peuvent être utilisées à partir de python.

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

Bien sûr, le faire en C++, en théorie , se traduira par des programmes plus rapides, tout le reste étant égales par ailleurs (même algorithmes, programmeurs compétents dans la langue, etc ...) et données ' temps infini ». Mais python est certainement plus productif que C++: dans un laps de temps donné, vous aurez plus de choses à faire en python qu'en C++, sauf si vous êtes un meilleur programmeur en C++ qu'en python. De plus, s'il y a un besoin d'interagir avec des scientifiques qui ne sont pas des programmeurs, python sera plus lisible que C++. C++ produit par des chercheurs/scientifiques ont tendance à être vraiment horrible dans mon expérience (pire que Fortran :)).

Le plus gros problème que je peux prévoir est si python n'est pas assez rapide/mémoire assez efficace, de sorte qu'il implique beaucoup de contraintes d'un point de vue architectural. Je ne pense pas que ce sera le cas pour l'imagerie (Python, comme la plupart des langages de haut niveau, a des problèmes d'évolutivité lorsque vous avez besoin de dix mille objets avec beaucoup d'interactions). commencé à partir de zéro a encore du sens à mon humble avis de nos jours). Clause de non-responsabilité: Je dois mentionner que je suis très impliqué dans la communauté scientifique python, et que je ne suis pas un spécialiste en traitement d'image.

+3

+1 Nous utilisons C++ et Python pour les tâches numériques. Les seules fois où nous avons rencontré des problèmes avec Python, c'était quand nous avions une tonne de petits objets. Python avait alors tendance à utiliser trop de mémoire. Et si c'est trop lent, vous ne pouvez pas simplement l'accélérer en appelant une bibliothèque car les E/S pour les petits objets sont trop lentes et vous avez toujours des problèmes de mémoire. Mais si vous avez un gros objet et que vous pouvez appeler une bibliothèque pour un travail lourd, Python a des temps d'aller-retour beaucoup plus rapides et je le ferais. – stephan

0

La plupart des sociétés d'imagerie médicale utilisent les bibliothèques Accusoft Pegasus PICTools. Ils offrent la compression et la décompression la plus rapide et la plus standard pour tous les formats DICOM sans perte et sans perte tels que JPEG 2000, JPEG sans perte, JPEG-LS et autres.

SI la vitesse est requise, rien ne se compare.

Si vous déployez sur Windows, ImageGear .NET ou ImageGear Pro vous offrira des environnements faciles à utiliser avec une prise en charge complète des fichiers dcm DICOM.

Vous pouvez également utiliser le développement ImagXpress pour Windows.

2

ITK est le genou de l'abeille de traitement d'image médicale, et c'est en C++. donc je suppose que je recommanderais C++ w/ITK.

Questions connexes