Je cherche à apprendre un langage de programmation (suivre un cours) pour l'analyse et le traitement d'images. Peut-être Bioinformatics aussi. Quelle langue devrais-je choisir? C ou Java? Les autres langues ne sont pas une option pour moi. Veuillez également expliquer pourquoi l'une ou l'autre des langues est une meilleure option pour mon application.Java ou C pour le traitement d'image
Répondre
Vous devez équilibrer la puissance de traitement brute et le temps de développement. Java devient également très rapide et si vous avez terminé quelques jours plus tôt, vous avez plus de temps pour traiter les données.
Tout dépend du volume. Plus important encore, je vous suggère de rechercher les bibliothèques et les frameworks qui existent déjà, de voir quels ajustements sont les plus proches de ce qui doit être fait, et de choisir la langue de la bibliothèque comme C, Java ou Fortran.
Pour Java, j'ai trouvé BioJava.org comme point de départ. Java n'est pas mauvais pour le traitement de l'image.
Si vous gérez correctement vos objets source, vous aurez une chance d'en tirer des performances raisonnables. Certaines des choses que je préfère avec Java qui se rapporte à l'imagerie:
- Java Advanced Imaging
- Les utilitaires graphiques 2D (un coup d'oeil à BufferedImages)
- ImageJ, etc
- faire fonctionner avec JAMA
Demandez à quelqu'un dans le domaine vous travaillez (c.-à-bio-informatique)
Pour les images solaires, la majorité des le travail est fait en IDL, Fortran, Matlab, Python, C ou Perl (PDL). (À peu près dans cet ordre ... IDL est certainement le premier, car la majorité du logiciel d'étalonnage des instruments est écrit en IDL)
Pour cette raison, il existe beaucoup de boîtes à outils déjà écrites dans ces langues pour notre domaine. Fréquemment, avec de grands ensembles de données de référence, le PI libère un progiciel comme exemple d'interprétation/d'interaction avec le format de données. Je ne peux que supposer que la bioinformatique serait similaire. Si vous finissez par emprunter un chemin différent du reste du domaine, vous allez avoir beaucoup plus de mal à travailler avec d'autres scientifiques, car vous ne pouvez pas partager du code aussi facilement. Remarque - Il existe un certain nombre d'outils de visualisation qui ont été publiés dans notre domaine et qui ont été écrits en Java, mais ils supposent que les images ont déjà été préparées par un autre processus.
Idéalement, vous utiliseriez quelque chose comme Java ou (encore mieux) Python pour des choses de «haut niveau», et compileriez en C les routines qui nécessitent beaucoup de puissance de traitement (par exemple en utilisant Cython, etc.).
Certaines bibliothèques scientifiques existent pour Python (SciPy et NumPy), et elles sont un bon début, bien qu'il ne soit pas encore facile de combiner Python et C (vous avez besoin de modifier un peu les choses).
juste mes deux pence vaut: java ne permet pas l'utilisation de pointeurs par opposition à C/C++ ou C#. Donc, si vous allez manipuler les pixels directement, c'est-à-dire écrire vos propres fonctions de traitement d'image, ils seront beaucoup plus lents que l'équivalent en C++. D'autre part C++ est un cauchemar total d'une langue par rapport à Java.il vous faudra au moins deux fois plus de temps pour écrire le bit de code équivalent en C++. donc avec tout le gain de productivité vous pouvez probablement vous permettre d'acheter un ordinateur qui compense la différence de temps d'exécution ;-)
Je sais que d'autres langues ne sont pas une option pour vous, mais personnellement, je peux recommander fortement C# pour l'image le traitement ou la vision par ordinateur: cela permet aux pointeurs et donc aux fonctions IP de C# d'être deux fois moins rapides qu'en C++ (un compromis acceptable je pense) et une excellente intégration avec C++ natif et une bonne librairie pour opencv.
Désistement: Je travaille pour TunaCode.
Si vous devez faire un choix entre différentes langues pour commencer le traitement d'image, je recommande de commencer avec C++. Vous pouvez accéder au pointeur brut, ce qui est un must si vous souhaitez utiliser des pixels individuels.
Ensuite, quel type d'imagerie vous intéresse? Juste pour les filtres d'image amusants ou certains trucs lourds comme l'estimation de mouvement, le suivi et la détection, etc.? Pour cela, je vous recommande de jeter un oeil à CUVILib puisque plus tôt que plus tard, vous aurez besoin de performances sur les fonctionnalités d'imagerie et c'est ce que fournit CUVI. Vous pouvez l'utiliser comme autonome si cela vous convient ou vous pouvez le brancher avec d'autres bibliothèques comme Intel IPP, ITK, OpenCV, etc.
La bibliothèque de vision par ordinateur la plus populaire (traitement d'image, analyse d'image) est OpenCV qui est écrite en C++, mais peut également être utilisé avec Python, et Java (OpenCV4Android officiel et non officiel JavaCV).
Il existe des applications bioinformatiques qui sont fondamentalement un traitement d'image, OpenCV s'occupera de cela. Mais il y en a aussi qui ne sont pas, ils sont, par exemple, basés sur Machine Learning, donc si vous avez besoin de quelque chose d'autre que l'image/vidéo, vous aurez besoin d'une autre bibliothèque orientée bioinformatique. Opencv dispose également d'un module d'apprentissage automatique, mais il est plus axé sur la vision par ordinateur. A propos des langages C vs Java, la plupart a été dit dans les autres réponses. Je dois ajouter que ces bibliothèques sont maintenant basées sur C++ et non sur C. Si vos applications ont des besoins de traitement en temps réel, C++ sera probablement mieux pour cela, sinon, Java sera plus que suffisant car il est plus convivial.