IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre les bases du traitement d'image - chapitre 4 : première chaîne complète de segmentation
Un cours de Patrick Bonnin

Le , par patrick.bonnin

12PARTAGES

7  0 
Bonjour,

J'ai le plaisir de vous annoncer la parution de la quatrième partie intitulée « Première Chaîne Complète de Segmentation » de la série « Les Bases du Traitement d'Image et de la Vision Industrielle et Robotique ».

Cette partie présente un certain nombre d'opérateurs simples, rapides, très efficaces dans certains contextes applicatifs, permettant de réaliser une première chaîne complète de segmentation, c'est-à-dire une application complète de vision.

Une application complète est composée généralement des trois étapes suivantes :
  • la sélection des pixels d'intérêts ;
  • le regroupement des pixels voisins en « primitive » ;
  • la conformité de la primitive à la requête.


Ces opérateurs ayant un domaine d'application restreint, nous présentons le contexte applicatif dans lequel ils doivent être utilisés.

Enfin, cette partie comme les deux suivantes sont très pratiques, comme l'est la seconde, déjà publiée.

Amicalement
Patrick

Les meilleurs cours et tutoriels pour apprendre l'algorithmique

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 21/06/2019 à 15:34
Bonjour,
Citation Envoyé par patrick.bonnin Voir le message
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 :

Citation 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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
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
1  0 
Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 23/06/2019 à 11:03
Bonjour,

et merci pour ce retour.
Citation Envoyé par patrick.bonnin Voir le message
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 :
Citation Envoyé par patrick.bonnin Voir le message
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 : Sélectionner tout
1
2
3
4
if (xscale>0.0 && yscale>0.0) {
	newWidth  = (int)(r.width *xscale);
	newHeight = (int)(r.height*yscale);
}
Qu'en conclure ?
1  0 
Avatar de joublie
Membre confirmé https://www.developpez.com
Le 28/05/2016 à 14:01
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.
0  0 
Avatar de Francis Walter
Expert éminent sénior https://www.developpez.com
Le 28/05/2016 à 14:14
Citation Envoyé par joublie Voir le message
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 ?
0  0 
Avatar de patrick.bonnin
Membre éprouvé https://www.developpez.com
Le 28/05/2016 à 19:34
Bonjour,

Je vous remercie pour votre retour.
Pour les images, Francis vous a répondu.
Je pense qu'il en est de même pour les équations.
J'ai préféré faire des copies d'écran des équations sous Latex,
plus "jolies" que sous word / OpenOffice.

Sinon, vous pouvez vous procurer le livre :
"Les Bases du Traitement d'Image et de la Vision
Industrielle et Robotique" sur "lulu.com".
Cordialement
Patrick Bonnin
0  0 
Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 21/06/2019 à 19:23
Citation Envoyé par Jipété Voir le message
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
J'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 : Sélectionner tout
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;
0  0 
Avatar de patrick.bonnin
Membre éprouvé https://www.developpez.com
Le 23/06/2019 à 10:51
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 Bonnin
0  0 
Avatar de Flodelarab
Expert éminent sénior https://www.developpez.com
Le 23/06/2019 à 12:17
Citation Envoyé par patrick.bonnin Voir le message
C'est un petit peu plus complexe qu'une simple multiplication par le nombre de zoom.
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.
0  0 
Avatar de Jipété
Expert éminent sénior https://www.developpez.com
Le 23/06/2019 à 12:52
Citation Envoyé par Flodelarab Voir le message
On demande 512x340, on obtient 511x339. C'est plus compliqué ? Moi, je dirais surtout que la fonction ne fait pas son boulot. Poubelle.
Arrê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.
0  0