Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes > Traitement d'images
Traitement d'images Forum d'entraide sur le traitement d'images et l'analyse d'images et de vidéos. Avant de poster : Cours de traitement d'images
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/02/2012, 04h10   #1
Membre actif
 
Inscription : avril 2008
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 218
Points : 150
Points : 150
Par défaut Lisser un maillage irrégulier ?

Bonjour

Je cherche quelques documentations sur les maillages irréguliers (polyèdres généraux) et plus particulièrement comprendre les relations qui relient des sommets quelconques à des faces quelconques entre eux.

Car j'aimerai Lisser ("flouter") un tel maillage...

Comme je "flouterai" un maillage carré régulier avec

Code :
1
2
3
4
5
6
d[i,j] = 
    (          
         s[i-1,j-1]*1 + s[i-0,j-1]*2  s[i+1,j-1]*1 
       + s[i-1,j-0]*2 + s[i-0,j-0]*4  s[i+1,j-0]*2 
       + s[i-1,j+1]*1 + s[i-0,j+1]*2  s[i+1,j+1]*1
     ) / 16
Appliquer à l'infini une telle formule sur un tel maillage fermé converge vers une solution stable où toutes les sommets auront la même valeur.

Quelle formule faut il appliquer sur un maillage irrégulier (par exemple Diagramme de Voronoï) pour justement respecter cette convergence ?

Si vous avez des pistes... merci
ijk-ref est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 14h47   #2
Membre actif
 
Inscription : avril 2008
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 218
Points : 150
Points : 150
Plus de cent visualisations et pas une seule réponse ! :o

P'être que je m'exprime mal... si vous comprenez pas ma demande dites les moi
ijk-ref est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 15h17   #3
Modérateur
 
Inscription : août 2007
Messages : 3 584
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 584
Points : 4 416
Points : 4 416
Bonjour,

ce qui n'est pas très clair pour moi :
je ne comprends pas le notion de "flouter un maillage"? Tu veux pas plutôt dire lisser un maillage?
Que représente s(i,j) par rapport à ton maillage?
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 15h38   #4
Membre actif
 
Inscription : avril 2008
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 218
Points : 150
Points : 150
Oui : "lisser" un maillage. Désolé :o

Ca vous donne plus d'idées ?

s(i,j) ? en fait j'ai écrit "s" pour source et "d" pour destination.

Autrement s(i,j) représente chaque sommet du maillage... dans le cas présent carré... c'est à dire qu'il peut se traiter ici comme un bitmap (image) classique en deux dimensions.

Comme je tiens à traiter un maillage complet et fermé... dans le cas présent, la partie droite est reliée à la gauche et celle du haut à celle du bas - un tore quoi

C'est la cas le plus simple et je le donne car tout le monde le connait et comprend parfaitement ce qu'est de "lisser/flouter" un tel maillage/image.

Cependant moi j'aimerai "lisser" des cas plus généraux... et je coince un peu sur la formule à appliquer entre les sommets pour que ce maillage converge vers une solution où tous les sommets ont la même "force".

C'est à dire qu'en lissant ce maillage chaque sommet converge vers "la somme des sommets divisée par la le nombre des sommets"
ijk-ref est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 17h26   #5
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 420
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 420
Points : 14 127
Points : 14 127
Citation:
Envoyé par ijk-ref Voir le message
Oui : "lisser" un maillage. Désolé :o

Ca vous donne plus d'idées ?
Méthode 1 : se ramener au cas connu, en transformant chaque polygone quelconque (= une maille du maillage) en un polygone régulier (carré, ...). Les coordonnées des sommets du polygone quelconque ainsi que celles du point courant sont ainsi converties dans un repère où le lissage est facile.

Méthode 2 : Utiliser un repère local pour chaque maille, dans lequel on peut utiliser directement une formule de lissage. Par exemple les coordonnées barycentriques homogènes. (cf ce document, chapitre 3)
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 14h16   #6
Membre actif
 
Inscription : avril 2008
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 218
Points : 150
Points : 150
Ah ! J'aurai préféré trouvé des solutions directs aux problèmes :o

Edit : en fait, ça fonctionne déjà très bien... il ne faut pas négliger le "poids/valence" de chaque sommet... chose que l'on néglige complètement dans le cas "carré" car les sommets comme les faces ont naturellement le même "poids".
ijk-ref est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 22h38   #7
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
Moi je suis toujours pas sur d'avoir compris ce qu'il faut "lisser". La position des noeuds ? Une fonction s définie pour chaque sommet du maillage ?

Dans tous les cas, je te conseilles de regarder du côté des techniques de lissages sur graphe.

le principe de base c'est que tu as un ensemble de sommet dont certains sont reliés par des arêtes. On dispose d'une fonction réelle f définie sur l'ensemble des sommet (une valeur associée à chaque sommet). peut donc se mettre sous la forme d'un vecteur avec chaque composante correspondant à un sommet.

Tu veux minimiser la fonction suivante:
E = || f - f0 ||^2 + c * f^T L f

le premier terme et "l'attache au données" le deuxième termie fait intervenir le Laplacien du graphe: L = D - W. *W est la matrice d'adjacence pondérée: W[i,j] représente le poids de l'arrête entre les sommets i et j. D est la matrice diagonale dont chaque élément est la somme des éléments de la ligne correspondante de W (D[i,i] = sum_j W[i,j]).

le terme f^t L f mesure la "rugosité" de la fonction f. Et correspond à la notation matricielle de \sum_i \sum_j W[i,j] (f_i - f_j)^2. ce qui correspond à la somme pondéré des différence (quadratiques) de la fonction entre les sommets adjacents. Si cette différence est petite, la fonction est lisse.

Le coefficient mesure c l'importance de l'attache aux données.

L'avantage de tout ça c'est qu'il existe une solution analytique:

f = (I + c*L)^(-1) f0

I est la matrice identité.

Ceci est la version de base mais il existe des versions qui utilisent des p-Laplacien avec une résolution itérative.

Dans ton cas pour construire la matrice d'adjacence, tu peux simplement mettre 1 quand il existe une arrête entre deux sommets et 0 sinon ou alors une valeurs qui dépend de la distance entre les noeuds (exp(-a*d_ij^2). La matrice D aura alors pour chaque sommet le nombre de sommets voisins.

La fonction f peut-être la composante x ou y des positions ou n'importe qu'elle autre fonction.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h47   #8
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 8 740
Détails du profil
Informations personnelles :
Âge : 54

Informations forums :
Inscription : janvier 2007
Messages : 8 740
Points : 9 974
Points : 9 974
Citation:
Envoyé par Alexis.M Voir le message
Moi je suis toujours pas sur d'avoir compris ce qu'il faut "lisser". La position des noeuds ? Une fonction s définie pour chaque sommet du maillage ?
.


Parce qu'on peut aussi utiliser par exemple Delaunay, puis interpoler/lisser..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java

Je ne réponds pas aux MP techniques
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 16h20   #9
Membre actif
 
Inscription : avril 2008
Messages : 218
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 218
Points : 150
Points : 150
Citation:
Envoyé par Alexis.M Voir le message
Moi je suis toujours pas sur d'avoir compris ce qu'il faut "lisser". La position des noeuds ? Une fonction s définie pour chaque sommet du maillage ?
Ce n'est pas forcement une position, cela peut être un simple scalaire. Par exemple une image en noir et blanc... sauf au lieu d'être définie classiquement par un maillage "carré" et avec la "fonction" de flou "classique" montrée plus haut, je tiens à comprendre comment flouter un maillage quelconque.


Autrement merci pour tes précisions ça l'air très bien ce que tu as écrit
ijk-ref est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h59   #10
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
Dans ce cas le formalisme que j'ai donné s'applique très bien mais est un peu différent de ce que tu fais dans ton exemple.

Toi ce que tu fais c'est:
f[i](t+1) = (f[i](t) + \sum_j W[i,j] f[j](t))/(1+sum_j W[i,j])

Remplaces tes coefficients par c/16. est tu verras que ça correspond.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h49.


 
 
 
 
Partenaires

Hébergement Web