Apprendre les bases du traitement d'image - chapitre 6 : l'environnement EdEnviTI et son utilisation
Un cours de Patrick Bonnin
Le 2016-07-03 21:10:34, par patrick.bonnin, Membre éprouvé
Bonjour,
J'ai le plaisir de vous annoncer la parution de la Sixième et dernière partie intitulée « l'Environnement EdEnviTI et son utilisation » de la série « Les Bases du Traitement d'Image et de la Vision Industrielle et Robotique ».
Dans cette dernière partie, nous présentons l'environnement logiciel de traitement d'image EdEnviTI dans lequel sont implantés TOUS les opérateurs des parties précédentes, constituant la bibliothèque EdVision. Nous détaillons ensuite la façon de l'utiliser :
Puis, nous donnerons quelques conseils dans le cadre de l'approfondissement de ce cours. Des liens vers les archives .zip des bibliothèques EdEnviTI (environnement) et EdVision (opérateurs) sont donnés dans cette dernière partie.
Enfin, le lien est vers la page de l'article est : Partie 6 : L'Environnement EdEnviTI et son utilisation
Amicalement
Patrick Bonnin
Les meilleurs cours et tutoriels pour apprendre l'algorithmique
J'ai le plaisir de vous annoncer la parution de la Sixième et dernière partie intitulée « l'Environnement EdEnviTI et son utilisation » de la série « Les Bases du Traitement d'Image et de la Vision Industrielle et Robotique ».
Dans cette dernière partie, nous présentons l'environnement logiciel de traitement d'image EdEnviTI dans lequel sont implantés TOUS les opérateurs des parties précédentes, constituant la bibliothèque EdVision. Nous détaillons ensuite la façon de l'utiliser :
- comment compiler et exécuter un opérateur (fichiers nécessaires)*;
- comprendre les codes des différentes parties*;
- comment programmer un nouvel opérateur, en recopiant puis modifiant les fichiers constituant l'opérateur fourni en exemple dans l'environnement.
Puis, nous donnerons quelques conseils dans le cadre de l'approfondissement de ce cours. Des liens vers les archives .zip des bibliothèques EdEnviTI (environnement) et EdVision (opérateurs) sont donnés dans cette dernière partie.
Enfin, le lien est vers la page de l'article est : Partie 6 : L'Environnement EdEnviTI et son utilisation
Amicalement
Patrick Bonnin
-
JipétéExpert éminent séniorBonjour,
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
Code : 1
2
3
4
5
6
7
8EdHistogram.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'
) mais ça ne suffit pas, il me reste ça sur les bras :
Code : 1
2
3
4
5
6
7EdLibHistogram.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'
Code : gcc -o Histogram EdHistogram.o EdLibHistogram.o EdUtilities.o -lm // "-lm", le flag qui sauve !
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 titrele 21/06/2019 à 15:34 -
JipétéExpert éminent séniorBonjour,
et merci pour ce retour.
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 :
Ç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ésultantesont biens'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
4if (xscale>0.0 && yscale>0.0) { newWidth = (int)(r.width *xscale); newHeight = (int)(r.height*yscale); }
le 23/06/2019 à 11:03 -
JipétéExpert éminent séniorJ'ai fait ça, pour le zoom en haut (dans EdZoom.c) et pour la réduction en bas (EdReduction.c), ça me donne des valeurs correctes :
Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* --- Zoom image --- */ // jipété : pourquoi cette construction tordue ? //ncolZoom = (ncol - 1) * scale + 1; //nligZoom = (nlig - 1) * scale + 1; // pourquoi pas plutôt et plus simplement comme ça : ncolZoom = ncol * scale; nligZoom = nlig * scale; /* --- Reduced image --- */ // jipété : pourquoi cette construction tordue ? //ncolred = (ncol - 1) / scale + 1; //nligred = (nlig - 1) / scale + 1; // pourquoi pas plutôt et plus simplement comme ça : ncolred = ncol / scale; nligred = nlig / scale;
le 21/06/2019 à 19:23 -
patrick.bonninMembre éprouvéBonjour,
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.
Celle ci est présentée soit dans l'article 2 du site developpez.com, soit dans mon livre.
Cordialement
Patrick Bonninle 23/06/2019 à 10:51 -
FlodelarabExpert éminent sénior
Quel raisonnement !
On demande un café et on nous sert un chocolat. "Ben oui, Monsieur, la fourniture de boisson chaude c'est un peu plus complexe que ça".
On demande une grande blonde svelte et on nous propose une petite brune potelée. "Ben oui, Monsieur, rencontrer l'amour, c'est un peu plus complexe que ça."
On demande 512x340, on obtient 511x339. C'est plus compliqué ? Moi, je dirais surtout que la fonction ne fait pas son boulot.Poubelle. le 23/06/2019 à 12:17 -
JipétéExpert éminent séniorArrête, tu vas nous fâcher l'auteur, alors que j'ai besoin d'autres précisions, et plein de choses me semblent intéressantes dans son tuto (surtout avec ma vision limitée de ce domaine).
Mais par exemple, malgré une 3e lecture du chapitre 6, je n'ai toujours pas compris la différence entre EdEnviTI et EdVision.
D'après le texte, on pourrait s'attendre à ce que le premier facilite le travail (la compilation en l'espèce) du second, mais que nenni : à la limite, le premier n'existerait pas que ça ne changerait rien à la vie de ceux qui vont mettre leurs grosses mains velues dans le cambouis du second, au bout du compte on va se retrouver avec des binaires.
Regardons l'arborescence des deux dossiers :
strictement identique (c'est moi qui ai créé "bin" et "mes_results", juste que EdVision/src contient toutes les sources quand EdEnviTI/src ne contient que ce qu'il faut pour créer le binaire comme expliqué au chapitre 6, mais les explications qu'on y trouve s'appliquent tout autant aux autres .c de EdVision.
Donc à part embrouiller pour compliquer, je n'ai pas vu l'intérêt de cette double arborescence.
Parce qu'au bout du compte, c'est quoi, l'idée ? Prendre les .c et les .h de EdVision/src et les mettre dans EdenviTI/src ? Pour quoi faire ? Qu'est-ce que ça apporte ?
Merci des retours.le 23/06/2019 à 12:52