Journal Pour manipuler des images en C++, il suffit de ...

Posté par  (site web personnel) .
Étiquettes :
0
25
août
2007
... savoir compter jusqu'à trois : 1.2.3, c'est en effet le numéro de version du dernier paquet de la bibliothèque CImg[1] qui vient de sortir. Comme son nom l'indique (CImg = "Cool Image"), cette bibliothèque (open-source) vous permet de construire, de manipuler et de visualiser très simplement tout types d'images (2D, volumiques, multicanaux,...) dans vos programmes C++. N'hésitez pas à tester les binaires pré-compilés [1'] pour voir quelques exemples divers et variés d'utilisation de CImg.

Développée d'abord à l'INRIA Sophia-Antipolis, puis dans l'équipe IMAGE du laboratoire CNRS GREYC de Caen [2], cette bibliothèque se destinait en premier lieu aux chercheurs, ingénieurs et étudiants du domaine du traitement d'images et de la vision par ordinateur. De par sa conception très accessible et de par sa généricité, elle peut également séduire le programmeur ayant besoin de manipuler plus occasionnellement des images dans ses propres programmes.

J'ai déjà évoqué CImg dans ces pages (il y a un peu plus d'un an [3] avec la version 1.1.5), et je voudrais partager ici mon expérience personnelle (et mon enthousiasme) pour ce développement libre qu'est CImg (cela fait suite en quelque sorte au journal/questionnaire [4], très instructif).

En 1999, CImg a démarré (comme beaucoup de projets libres je suppose) en premier lieu pour m'offrir des fonctionnalités que je ne trouvais pas dans les bibliothèques existantes d'alors. La mettre à disposition de manière libre en 2003 (il faut remercier l'INRIA et le CNRS à ce propos pour leur grande ouverture) a été dans un premier temps une opportunité de valoriser de manière rapide et à-priori peu contraignante le travail de programmation fait durant ma thèse. Mais j'ai pu par la suite découvrir que développer une bibliothèque libre "suffisamment" visible (i.e hébergée sur Sourceforge ou consorts), aussi modeste soit-elle, permet en réalité de toucher et d'intéresser très rapidement un nombre important de personnes, curieuses par nature. Ca a deux conséquences directes :

  • D'un point de vue humain, c'est quand même très sympathique (si l'on met de côté les mails d'insultes), de pouvoir dialoguer avec des gens intéressés de tous pays via les forums ou le mail. Ca se matérialise parfois par la réception de quelques cartes postales et même quelques dons, mais surtout ca donne des contributions et des retours de bugs très instructifs. Par exemple, en un an, les 8 versions de CImg qui se sont succédées n'auraient pas pu se faire dans ce laps de temps sans tous ces gens qui ont pris le temps de s'intéresser à ce projet, merci à eux.
    De temps en temps on peux rencontrer les utilisateurs, et c'est toujours un moment super sympa, surtout quand çà peut se passer devant une bonne bière. Merci à propos, à Jean-Marie Favreau et les organisateurs des RMLL'07 pour leur invitation à Amiens.

  • D'un autre côté, avoir des utilisateurs, c'est aussi se donner des contraintes de qualité plus serrées, et le projet, qui au départ manque forcément de finition, doit devenir de plus en plus cohérent et bien fini. C'est un apprentissage très utile qui amène beaucoup d'expérience et qui demande également beaucoup d'investissement personnel (vive les week ends).


Bref, tout çà pour dire que créer ou contribuer à un projet libre est très positif et instructif pour le contributeur, et pas seulement pour les utilisateurs potentiels.
Et quand on a un coup de mou, on se dit que peut-être c'est en train de dépanner quelqu'un ici ou là, et en général, ça repart (et c'est moins cher qu'un Mars).

Donc, n'hésitez pas à vous lancer si vous avez un peu de temps libre. Et si vous voulez contribuer à CImg, en envoyant par exemple de nouveaux exemples, vous êtes les bienvenus (si quelqu'un veut programmer l'algorithme décris dans le journal [5], ca m'intéresse...).

David.

[1] The CImg Library : http://cimg.sourceforge.net/

[1'] Les exemples de la bibliothèque, compilés pour Linux 32 bits :
http://prdownloads.sourceforge.net/cimg/CImg_linux32_elf.zip(...)

[2] L'équipe IMAGE du GREYC :
http://www.greyc.ensicaen.fr/EquipeImage/

[3] Journal, Sortie de CImg 1.1.5 :
http://linuxfr.org/~dtschump/22223.html

[4] Journal, Et vous, avez-vous déjà participé à un LL?
http://linuxfr.org/~windu2b/25097.html

[5] Journal : Un redimensionnement de science-fiction :
http://linuxfr.org/~patrick_g/25149.html
  • # Tu as de la chance

    Posté par  . Évalué à 6.

    Tu as la chance d'avoir un employeur aussi ouvert vers le principe du libre. J'imagine facilement le fou rire de mon directeur si je lui parlais de libérer quelques unes de nos créations (des créations pas très intéressantes en dehors de notre structure cependant).
    Par contre il y a un point dans ton journal qui m'a beaucoup intrigué. Tu as reçu des mails d'insultes ? Pourquoi ? Pour concurrence déloyale ? Pour avoir donné de ton temps, de ta compétence, de ton savoir, aux autres ? Par jalousie ?
    C'est quand même un mystère. Qu'est ce qu'il faut faire dans ce monde pour que personne n'y trouve rien à redire ?
    • [^] # Re: Tu as de la chance

      Posté par  (site web personnel) . Évalué à 10.

      D'un point de vue de mon employeur, je pense que CImg est une assez bonne chose : je passe pas mal de temps dessus en dehors de mon temps de travail, le CNRS et l'INRIA sont référencés sur les pages du projet. Tout le monde est content (pour le moment).

      En ce qui concerne les mails d'insultes, je n'en ai pas recu des tonnes heureusement, mais ça provenait principalement de gens qui n'arrivaient pas à faire tourner le truc comme il voulait alors ça devait les enerver je suppose. Comme je répond pas, j'ai pas trop l'explication en fait ("bizarrement", je crois me rappeller que c'était principalement des Windowsiens, c'est çà de faire des libs multi-plateformes.. :) )

      David.
  • # Un peu HS...

    Posté par  . Évalué à 1.

    Bon, je suis un peu fatigué donc je regarderai tout ça demain histoire de pas dire de connerie, mais je vais (honteusement) détourner ce journal pour poser une question: vous connaissez quelque chose pour faire du image hashing ? Jusque là, je n'ai guère trouvé que quelques thèses dont j'ai pas tout compris et http://users.ece.utexas.edu/~bevans/projects/hashing/index.h(...) qui est une toolbox matlab que je suis en train de très difficilement essayer de faire fonctionner avec octave... (si j'arrive à le faire fonctionner, promis, je vais essayer de porter le tout pour que ça utilise CImg ;))
  • # Tiens, je pensais a CImg quelques minutes avant de voir ce journal !

    Posté par  . Évalué à 2.

    Pour mon travail j'ai écrit un convertisseur d'images sphériques (que le connoisseur dira équirectangulaire) en images cubiques, pour être affichables dans un cube pour le vrai rendu (comme panoglview[1]), le tout écrit en quelques jours, merci CImg, qui m'a permit de me concentrer sur l'algorithmique.

    Et juste avant de voir ce journal, je pensais justement a tout ca, et m'est venu une idée lumineuse : afficher ces pano dans le bureau en cube de compiz !
    Bon vu que nos écran ne sont pas carrés il faudra se passer de la face supérieure et inférieure du cube, mais en limitant les angles de vue verticaux, on peut avoir un affichage impec si on active la vue interne du cube. Par contre panorama de haute qualité impératif en entrée : il faudra compter quatre fois la largeur de votre écran pour la largeur du pano sphérique, c'est le minimum pour un affichage optimal. C'est jouable, on trouve pas mal d'images sphériques en 10000x5000 [2]

    L'idéal serait de créer un GUI autour de tout ca qui transforme l'image (avec une belle barre de progression, car c'est assez lourd) et change les fond d'écrans de chaque bureau virtuel, le top étant de gérer un cache et une gestion de collection d'images.

    Bon reste a libérer le code existant (devrait pas être dur) créer un hébergement pour le projet, deux trois videos kikoo lol 2.0 beta pour rameuter les testeurs.

    Qu'en pensez vous ?

    (pour ceux qui ne connaissent pas les panos, avoir un cube avec les images comme il faut permet de faire disparaitre les arrêtes du cube, tout en corrigeant les aberrations visuelles : quelque soit l'angle - vertical et horizontal - , l'image parait naturelle, comme une photo a part entière)

    [1] http://www.panotools.info/mediawiki/index.php?title=Panoglvi(...)
    [2] http://www.flickr.com/photos/gadl/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.