Developpez.com - Applications

Le Club des Développeurs et IT Pro

Apprendre les bases du traitement d'image - Chapitre 1 : introduction

Un cours de Patrick Bonnin

Le 2016-04-25 19:01:30, par patrick.bonnin, Membre éprouvé
Bonjour,

J'ai le plaisir de vous annoncer la parution du premier article, d'une série de six composant un cours intitulé :

« Les Bases du Traitement d'Image et de la Vision Industrielle et Robotique ».

Adapté à un large public, grâce à une pédagogie novatrice pour la discipline, ce cours présente un certain nombre d'opérateurs dits de bas niveau :
  • histogrammes, opérateurs de visualisation,
  • opérateurs de seuillage,
  • opérateurs linéaires agissant sur un voisinage 3x3 centré,
  • opérateurs de lissage d'image,
  • opérateurs de morphologie mathématique,
  • opérateurs de calcul de gradients, et d'affinage des contours.

Enfin, le dernier article traite de l'implémentation en Langage C des opérateurs présentés dans l'Environnement Logiciel de Traitement d'Image EdEnviTI.

Les codes source de l'environnement EdEnviTI, ainsi que de l'ensemble des opérateurs présentés dans la série d'articles constituant la bibliothèque EdVision sont également disponibles sur le site.

Partie 2 : Visualisation des Images et Opérateurs Simples
Partie 3 : Introduction aux Différents Types de Segmentation
Partie 4 : Première Chaîne Complète de Segmentation
Partie 5 : Segmentation en Contours
Partie 6 : L'Environnement EdEnviTI et son utilisation

Cordialement
Patrick Bonnin

Tous les meilleurs cours et tutoriels pour apprendre les algorithmes
Les meilleurs cours et tutoriels pour apprendre la programmation
  Discussion forum
20 commentaires
  • Flodelarab
    Expert éminent sénior
    Bonjour

    Ne manque-t-il pas un lien ?
  • Jipété
    Expert éminent sénior
    Bonjour,
    Envoyé par patrick.bonnin
    J'ai le plaisir de vous informer de la parution du second article de la série intitulé : Visualisation des Images et Opérateurs Simples.
    Tout cela a l'air passionnant, cependant, dans la partie 2 on trouve, au chapitre IV-A-3, des instructions pour générer le binaire Histogram qui m'ont semblées incomplètes :

    Envoyé par patrick_bonnin
    La réalisation de l'histogramme est obtenue grâce à la commande EdHistogramme Histogram qui nécessite le code des parties :

    interface utilisateur, contenu dans le fichier EdHistogram.c ;
    opérateur, contenu dans le fichier EdLibHistogram.c.
    ainsi que l'utilitaire EdUtilities.c pour s'affranchir des erreurs
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    EdHistogram.o: In function `main':
    EdHistogram.c:(.text+0x236): undefined reference to `Reading_ImageHeader'
    EdHistogram.c:(.text+0x3a1): undefined reference to `Creation_Image'
    EdHistogram.c:(.text+0x4b7): undefined reference to `Creation_Image'
    EdHistogram.c:(.text+0x51f): undefined reference to `Reading_ImageData'
    EdHistogram.c:(.text+0x6c3): undefined reference to `Writing_ImageData'
    EdHistogram.c:(.text+0x720): undefined reference to `Free_Image'
    EdHistogram.c:(.text+0x765): undefined reference to `Free_Image'
    (oui, j'ai renommé EdHistgram.c enEdHistogram.c, ) mais ça ne suffit pas, il me reste ça sur les bras :
    Code :
    1
    2
    3
    4
    5
    6
    7
    EdLibHistogram.o: In function `HistogramPGM':
    EdLibHistogram.c:(.text+0x32c): undefined reference to `log'
    EdLibHistogram.c:(.text+0x34b): undefined reference to `log'
    EdLibHistogram.o: In function `HistogramPPM':
    EdLibHistogram.c:(.text+0x70e): undefined reference to `log'
    EdLibHistogram.c:(.text+0x72d): undefined reference to `log'
    EdLibHistogram.c:(.text+0x9f5): undefined reference to `log'
    La solution se cache là :
    Code :
    gcc -o Histogram EdHistogram.o EdLibHistogram.o EdUtilities.o -lm // "-lm", le flag qui sauve !
    Lecture pour la piste.

    Sinon, un microscopique souci avec la fonction de zoom, qui perd un pixel en générant le résultat, et pourtant j'ai demandé un rapport simple, "x 2", et ce quel que soit la méthode :



    Devant l'original, derrière l'image agrandie, regardez les tailles dans les barres de titre
  • Jipété
    Expert éminent sénior
    Bonjour,

    et merci pour ce retour.
    Envoyé par patrick.bonnin
    Si vous voulez comprendre les formules, il faut comprendre la manière de réaliser les pixels intermédiaires.
    C'est un petit peu plus complexe qu'une simple multiplication par le nombre de zoom.
    Peut-être, mais en voyant ça après avoir demandé un facteur 2 (la source en vert en bas, le résultat zoomé en gris en haut),

    je me suis simplement dit que quelque chose clochait.

    Car in fine je dois avoir un résultat de 512x340.
    Et pour avoir 512 colonnes en largeur, il va bien falloir que j'aie 512 pixels par ligne.

    Après, s'il faut faire des bidouilles pour y arriver, je vais donc étudier ça :
    Envoyé par patrick.bonnin
    Celle-ci est présentée soit dans l'article 2 du site developpez.com, soit dans mon livre.
    Ça tombe bien, je suis dessus en ce moment.

    Ceci dit, quand j'ouvre un fichier avec ImageJ, que je demande Image/Scale... et que je spécifie XScale et YScale à 2, la largeur et la hauteur de l'image résultante sont bien s'affichent comme multipliées par 2.

    Les deux champs Width et Height ont été automagiquement remplis en saisissant les valeurs en X et en Y, et en cliquant sur [OK] on obtient ça (résultat tronqué pour ne pas alourdir) :



    Noter les tailles sous les barres de titre.
    Pas de raison que EdZoom ne fasse pas pareil.

    Bon dimanche,

    EDIT :
    Et quand on regarde le code source du plugin Scaler.java, on ne peut que constater qu'il utilise la même simplicité que celle que j'ai proposée :
    Code :
    1
    2
    3
    4
    if (xscale>0.0 && yscale>0.0) {
    	newWidth  = (int)(r.width *xscale);
    	newHeight = (int)(r.height*yscale);
    }
    Qu'en conclure ?
  • Francis Walter
    Expert éminent sénior
    Flodelarab, le lien est maintenant ajouté
  • GeoffreyOnRails
    Membre confirmé
    Bonjour,

    Tout d'abord un grand bravo et un grand merci pour ce contenu de grande qualité, ça me permet de découvrir un nouveau domaine extrêmement intéressant
    Il est indiqué que l'environnement EdEnviTI est disponible sur le site developpez.com, mais je n'ai pas réussi à le trouver, serait-il possible de fournir un lien? Ou bien est-il prévu de les diffuser uniquement pour le dernier article de la série?
  • patrick.bonnin
    Membre éprouvé
    Bonjour,

    Tout d'abord, merci pour ton retour. c'est sympa.

    EdEnviTI, l'environnement (uniquement 6 fichiers dont 3 .c et 3 .h) ainsi que l'ensemble
    des opérateurs présentés dans les 5 premiers articles constituant la bibliothèque EdVision
    seront fournis sur le site : Francis m'a expliqué comment faire.

    Le sixième et dernier article, en relecture orthographique, présente EdEnviTI, et surtout comment
    l'utiliser simplement. Le filtre lisseur moyen, donné en exemple est expliqué, puis je montre comment créer
    le filtre lisseur gaussien, en modifiant les codes source du moyen, opération à réaliser en moins de 10 minutes.
    Il contiendra également les deux liens.

    Cordialement
    Patrick Bonnin
  • laurentbargada
    Nouveau Candidat au Club
    Excellente série d'articles... on attend la suite avec impatience !
    A+
  • patrick.bonnin
    Membre éprouvé
    Bonjour,

    Je vous remercie pour votre retour.
    Les trois suivants arrivent.
    Cordialement
    Patrick Bonnin
  • joublie
    Membre confirmé
    Bonjour.

    N'est-il pas paradoxal qu'un tel cours comporte des images trop compressées (ou trop petites aussi) ou encore utilise une compression JPEG au lieu d'une compression GIF ou bien PNG pour des équations, textes, etc. ? C'est dommage, tout le monde n'a pas une très bonne vue et la lisibilité y gagnerait.
  • Francis Walter
    Expert éminent sénior
    Envoyé par joublie
    N'est-il pas paradoxal qu'un tel cours comporte des images trop compressées (ou trop petites aussi)
    Avez-vous cliqué sur les images pour les apercevoir aux bonnes dimensions ?