[Maths] Interpolation dans l'espace

Interpolation dans l'espace [Maths] - Programmation

Marsh Posté le 30-05-2001 à 15:03:24    

J'ai un ensemble de voxels, c'est a dire de betes volumes de forme quelconque et une valeur est associee a chacun de ces volumes. Elle est donc uniforme dans chaque voxel.
Basiquement on peut attribuer cette valeur au centre de chaque voxel.  
 
Mon probleme est d'associer une valeur a n'importe quel point de l'espace. Donc je prends un point au hasard, je regarde dans quel voxel il est, je lui attribue la valeur du voxel.
Oui, mais a l'affichage final c'est pas bo :), vu que les voxels sont representes comme des gros blocs uniformes.
 
Alors j'ai decide d'interpoler tout ca.
Je prends un point, je trouve le voxel auquel il appartient, et je determine la liste des voisins immediats. Donc j'ai mon voxel central, de centre P, de valeur v. J'ai tous les voisins, de centres Pi, de valeurs vi.
 
La question est : quelle est la formule la mieux adaptee pour determiner la valeur de mon point en "lissant" l'ensemble, sans lisser trop bien sur, car je veux garder de l'information.
 
Pour l'instant j'ai essaye de barycentriser tout ca, avec l'inverse des distances, l'inverse des distances au carre, mais c'est pas tres convaincant, c'est un peu plus lisse, mais je pers beaucoup d'information (j'ai besoin de garder un certain contraste entre les cellules).
Je suis preneur de toutes les idees. :hello:

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 30-05-2001 à 15:03:24   

Reply

Marsh Posté le 30-05-2001 à 15:12:23    

y sont comment tes voxels, cubiques ?

Reply

Marsh Posté le 30-05-2001 à 15:13:45    

Nan pas franchement. On peut les definir comme des hexaedres, en gros ce sont des cubes etires et deformes.

Reply

Marsh Posté le 30-05-2001 à 15:14:22    

Si tes voxels sont repartis aletoirements je ne te propose pas grand chose sinon prendre en compte le volume comme le coeff pour le barycentre (pour plus de realisme ?)
eventuellemnt de prendre des carres (ou des cubes :D) des distances pour accroitre le contraste...
 
Par contre si tes voxels sont organises il faut voir leur organisation...

Reply

Marsh Posté le 30-05-2001 à 15:16:38    

attends, attends....  
 
Ton truc c'est que tu as un volume (fini ou pas) découpé en voxels, c'est ça ? Dans ce cas, à un maillage donné (cubique, hexa, etc...) correspond une forme de voxel (de la même manière qu'on peut imaginer utiliser des pixels hexagonaux)

Reply

Marsh Posté le 30-05-2001 à 15:16:41    

attends, attends....  
 
Ton truc c'est que tu as un volume (fini ou pas) découpé en voxels, c'est ça ? Dans ce cas, à un maillage donné (cubique, hexa, etc...) correspond une forme de voxel (de la même manière qu'on peut imaginer utiliser des pixels hexagonaux)

Reply

Marsh Posté le 30-05-2001 à 15:58:41    

Mes voxels sont organises en une grille rectilineaire deformee.
Un exemple ci dessous :
 
** NAPU D'EXEMPLE **
 
Dans l'absolu mes voxels sont cubiques et la grille et cartesienne. Il sont juste deformes (enroules dans le cas present) pour avoir une forme de cylindre.

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 30-05-2001 à 16:01:18    

Cette image est peut etre plus explicite...
http://prekipik.free.fr/grid2.gif

Reply

Marsh Posté le 30-05-2001 à 16:14:32    

Dans ce cas tu peut faire une interpolation trilineaire ou qqchose du genre
 
f(x,y,z)= ax+by+cz+dxy+exz+fyz+gxyz+h
ou
f(x,y,z) = ax2+bx+cy2+dy...
 
sous forme plus simple x,y,z est entre les points  
 
 3 - 4
1 - 2|  
|7 -|8    <--- ceci est une maille
5 - 6    
 tu calcules un point entre 1&2, 3&4, 7&8, 5&6 en supossant que la fonction est une droite (ou une x3 avec des points 1' et 2' etc)
ensuite tu calcule un point au milieux des carres 1243 et 5687
toujours sous les memes principes
et tu fini par le point dans le cube a partir des points dans les carres...
 
Je pense que c'est pas clair a la premiere lecture, mais bon...

Reply

Marsh Posté le 30-05-2001 à 16:17:17    

ok, maillage cylindrique... Ben y'a des softs qui font ça... Data Explorer par exemple...

Reply

Marsh Posté le 30-05-2001 à 16:17:17   

Reply

Marsh Posté le 30-05-2001 à 16:30:36    

La methode que je donne est tres utilisee (images notemant) mais elle ne te donnera pas le contraste voulu je pense...
essaye des barycentre d'ordre 2 ou 3, mais tu risque de faire apparaitre des etoiles due a la discontinuite au centre de tes voxels (qd d->0)

Reply

Marsh Posté le 30-05-2001 à 16:34:26    

benb> ok pour une interpolation trilineaire, mais il faut que je definisse les 8 points en question.
 
A priori ce sont les 8 sommets de mon voxel, mais mon probleme est d'affecter une valeur a ces huit sommets, car si tu regardes bien, chaque sommet appartient a au plus 4 voxels, et donc il faut trouver une valeur moyenne (et a priori je ne vois pas pourquoi la moyenne des 4 valeurs serait une bonne approximation)
Et en fait ca revient a deplacer mon probleme.
 
Euh attends j'ai un doute la... je verifie... :??:
 
minusplus> oui, mais je dois le faire a la main (c'est en plein milieu de mon prog), et la grille ici est cylindrique mais c'est un exemple. Le cas general c'est grille rectilineaire deformee.

Reply

Marsh Posté le 30-05-2001 à 16:36:04    

BENB> oui effectivement j'ai plein d'endroit trop lumineux avec 1/d^2

Reply

Marsh Posté le 30-05-2001 à 16:39:10    

et d'ailleurs l'interpolation trilineaire c'est chaud car je n'ai pas un cube, mais un cube deforme/etire.... il va falloir que je le remette droit avec de faire quoi que ce soit.

Reply

Marsh Posté le 30-05-2001 à 17:05:12    

UP du soir !

Reply

Marsh Posté le 30-05-2001 à 17:12:01    

tgrx a écrit a écrit :

et d'ailleurs l'interpolation trilineaire c'est chaud car je n'ai pas un cube, mais un cube deforme/etire.... il va falloir que je le remette droit avec de faire quoi que ce soit.




En coordonnes cylindriques se sont des paralepipedes retangles...
 
Et les points tu les prends au centre, comme tu le disais dans ton premier post...

Reply

Marsh Posté le 30-05-2001 à 17:14:35    

tgrx a écrit a écrit :

BENB> oui effectivement j'ai plein d'endroit trop lumineux avec 1/d^2




 
Tu dois les avoir aussi en 1/d mais moins marques...
 
essais de faire une fonction de saturation pour eviter que d de deviennent plus petit que 1/10 env de la taille de tes vortex...

Reply

Marsh Posté le 30-05-2001 à 17:41:46    

Bon j'ai pas retrouve ma fct saturation...
 
le principe : fonction continue derivable valant y=x pour x<sat et y->max pour x> +inf
double saturationMax(double x, double saturation, double max);
{
  double result = x;
  if(x>sat)
  {
   double saturationWidth = (saturation-max);
   double k = (max-1)/saturationWidth ;
   double a = saturationWidth /(-exp(-k*saturation));
   result = max - a*exp(-k*x);
  }
 
  return result;
}
 
dans ton cas tu utilises  
 D = -saturationMax(-d,-ro/10,-eps); ou eps = 1e-10 env...
 
les - servent a faire des mini a partir d'un maxi...
 
Par contre pour le temps de calcul c'est pas top...
 
pour eviter les points trop lumineuxtu regles le ro/10 qui n'est qu'une indication...

Reply

Marsh Posté le 31-05-2001 à 11:10:37    

Merci BENB.
Mais moi pas comprendre pourquoi k= (max-1)/saturationWidth.
 
La fonction definie ci dessus est continue et prend les bonnes valeurs. Mais quand je teste la derivabilite en 1, ca me donne :
k= -1/saturationWidth
 
:??: me trompe-je ? :??:
 
Peut-etre :crazy: ... ou pas :sweat:

Reply

Marsh Posté le 31-05-2001 à 12:23:30    

Interpolation trilineaire : j'ai deux pistes.
* Je suppose que je peux definir une fonction multilineaire
f(x,y,z)= Axyz+Bxy+Cxz+Dyz+Ex+Fy+Gz+H,
 
et en ecrivant les conditions aux limites (a savoir les 8 sommets du voxel), ca me fait une matrice 8x8 a inverser pour trouver A,B,C...H. Mais apres coup, je peux definir la valeur de n'importe quel point a l'interieur.
Pb: il faut que je prie pour que la valeur au centre soit egale a la valeur du voxel :(
 
* Deformation d'un cube.
Tout le monde sait faire une interpolation trilineaire dans un cube, donc il faut trouver une transformation affine entre un cube et mon voxel.
C'est faisable, mais pour trouver chaque coordonnee "cubique" d'un point, ca me fait une equation de degre 3 a resoudre. Pas top non plus, surtout qu'il faut refaire la manip pour chaque point.
 
Bref... UP du midi ! :hello:

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 31-05-2001 à 14:10:52    

tgrx a écrit a écrit :

Merci BENB.
Mais moi pas comprendre pourquoi k= (max-1)/saturationWidth.
 
La fonction definie ci dessus est continue et prend les bonnes valeurs. Mais quand je teste la derivabilite en 1, ca me donne :
k= -1/saturationWidth
 
:??: me trompe-je ? :??:
 
Peut-etre :crazy: ... ou pas :sweat:




 
Il est possible que je me soit trompee j'ai fait ca sur un coin de table... je vais verifier...

Reply

Marsh Posté le 31-05-2001 à 14:17:13    

tgrx a écrit a écrit :

Interpolation trilineaire : j'ai deux pistes.
* Je suppose que je peux definir une fonction multilineaire
f(x,y,z)= Axyz+Bxy+Cxz+Dyz+Ex+Fy+Gz+H,
 
et en ecrivant les conditions aux limites (a savoir les 8 points du vortex), ca me fait une matrice 8x8 a inverser pour trouver A,B,C...H. Mais apres coup, je peux definir la valeur de n'importe quel point a l'interieur.
Pb: il faut que je prie pour que la valeur au centre soit egale a la valeur du voxel :(
 
* Deformation d'un cube.
Tout le monde sait faire une interpolation trilineaire dans un cube, donc il faut trouver une transformation affine entre un cube et mon vortex.
C'est faisable, mais pour trouver chaque coordonnee "cubique" d'un point, ca me fait une equation de degre 3 a resoudre. Pas top non plus, surtout qu'il faut refaire la manip pour chaque point.
 
Bref... UP du midi ! :hello:




utilise plutot la methode de la triple interpolation lineraire dans un maillage en coordonnes cylindriques, car tes voxels (pas vortex) y sont rectangles... a moins que je ne me trompe...
coordonnes cylindriques : distance a l'axe dans un plan horizontal, angle, altitude... enfin quand l'axe est vertical...
sinon un systeme de 8eq a 8 inconnues laisse tomber
 
sinon prends tes noeuds au centre des voxels pas sur les coins...

Reply

Marsh Posté le 31-05-2001 à 14:28:30    

BENB> oui mais... effectivement si mes voxels sont a composantes cylindriques dans l'exemple du dessus (en fait j'aurais pas du le montrer), ce n'est pas le cas general, et je peux avoir a traiter des voxels qui ne respectent pas un systeme de coordonnees connu.
 
Donc bof bof... c'est pour ca que j'ai un quadrinome du 3e degre a resoudre a chaque fois :cry:

Reply

Marsh Posté le 31-05-2001 à 14:35:17    

Pour la fct saturation :
f = x pour x<saturation trivial
ensuite on utilise une exp pour avoir l'asymptote en y = max pour x vers +inf
donc f = max-a.exp(-k.x) reste a trouver a et k.
f continue donc f(sat-)=f(sat+) (1)
f derivable f'(sat-)=f'(sat+) (2) car notre fonction est constituee de deux arc continus derivables, le Pb ne peut donc venir que du raccordement...
 
(1) -> max-a.exp(-k.sat) = sat
(2) -> a.k.exp(-k.sat) = 1 car (x)'=1
 
(1) -> sat-max = -a.exp(-k.sat)
(2) -> 1= -k(sat-max)
 
d'ou k = 1/(max-sat)... je retombe sur le meme resultat.. que toi
je suis desolee, ne se trompent que ceux qui ne font rien !
 
Cette erreur remet en cause la derivabilite de la fct. Dans ton cas rien de dramatique je suppose...

Reply

Marsh Posté le 31-05-2001 à 14:39:32    

Non ca ne remet rien en cause, mais c'est juste que je me suis arrache les cheveux pour savoir d'ou tu sortais cette fonction, j'essayais de donner un sens physique aux differents coefficients, et je voyais pas ce que 1 venait faire avec max, car a priori les ordres de grandeurs peuvent varier.
 
En tout cas merci, ca doit etre la premiere fois en 6 mois que je derive une fonction :).
Ca fait tout drole... :benetton:

Reply

Marsh Posté le 31-05-2001 à 14:47:18    

c'est joli les quadrigone du 3eme...
 
je suis desolee pour toi dans ce cas continue avec les barycentres + saturation...

Reply

Marsh Posté le 31-05-2001 à 14:49:39    

Merci pour tout quand meme, tu m'as donne un sacre coup de http://forum.hardware.fr/sqlforum/icones/icon14.gif... :hello:

Reply

Marsh Posté le 31-05-2001 à 14:50:20    

tgrx a écrit a écrit :

Non ca ne remet rien en cause, mais c'est juste que je me suis arrache les cheveux pour savoir d'ou tu sortais cette fonction, j'essayais de donner un sens physique aux differents coefficients, et je voyais pas ce que 1 venait faire avec max, car a priori les ordres de grandeurs peuvent varier.
 
En tout cas merci, ca doit etre la premiere fois en 6 mois que je derive une fonction :).
Ca fait tout drole... :benetton:




 
Ben moi aussi alors je me trompe...
pas de consequences dans ton cas car max est prochge de 0...
 
Sinon beau sens physique pour la question et honte a moi :D

Reply

Marsh Posté le 31-05-2001 à 14:53:10    

BENB a écrit a écrit :

 
et honte a moi :D




 
Ce que tu ne sais pas (:p), c'est le temps qu'il m'a fallu pour reussir a la deriver et etre sur de mon resultat... :sarcastic:... je suis bien rouille moi aussi... :sweat:

Reply

Marsh Posté le 31-05-2001 à 14:53:38    

tgrx a écrit a écrit :

Merci pour tout quand meme, tu m'as donne un sacre coup de http://forum.hardware.fr/sqlforum/icones/icon14.gif... :hello:




il faut dire que les maths me manquent un peu de puis 6 mois que j'ai arrete la simulation (oui avant je simulais :D)
et franchement les Bases de donnees.. bof si encore il y avait un traitement mathematique... meme petit...
 
Bon courage pour la suite...
 
PS :  a propos elle est chauffee, ou sous contraintes mecanique ta piece ?

Reply

Marsh Posté le 31-05-2001 à 14:59:05    

BENB a écrit a écrit :

 
PS :  a propos elle est chauffee, ou sous contraintes mecanique ta piece ?




 
Ni l'une ni l'autre, c'est un fluide qui se balade la dedans, sous forme liquide en bas du cylindre, et du gaz en haut.
Le cylindre est decoupe en petits voxels pour pouvoir resoudre localement les equations de meca flu (Navier-Stokes entre autres) dans chaque voxel...
 
Et donc mon boulot c'est d'afficher tout ca, parce qu'evidemment leur simulateur ne balance que des tableaux de chiffres, et donc a moi le volume rendering, OpenGL, texture 3d tout ca
 
-> donc matrice 2^n*2^n*2^n pour ce cher OpenGL, et j'ai besoin de tout projeter la dedans, et je me dis qu'une chtite interpolation ne ferait pas de mal pour ameliorer la qualite visuelle (actuellement on voit les gros blocs), et voila le merdier :D
 
PS : et leur simulateur est lent, donc il ne peuvent pas augmenter le nombre de voxels (et il y en a pas beaucoup...)... c'est pour ca que je suis oblige d'interpoler...

Reply

Marsh Posté le 31-05-2001 à 15:18:35    

Tu m'etonne que ce soit lent...
resoudre Navier et Stokes en Gas/Liquide et dans un systeme pareil...
 
Dis c'est pas du petrole ton liquide ?
Ils ne cherchent personne pour la partie simulation ?
 non je dis ca comme ca, moi... :D

 

[edit]--Message édité par BENB--[/edit]

Reply

Marsh Posté le 31-05-2001 à 15:25:09    

BENB> je suis tenu au secret sur ce projet :benetton:, d'ailleurs j'aurais pas du donner les formes des grilles.
 
Pour la partie simulation, ils programment en Fortran ...:D... mais c'est vrai qu'ils recherchent actuellement des ingenieurs.
Bon le truc c'est que c'est en Norvege (eh oui, moi je suis qu'un petit etudiant en stage...), et je pense pas que ca va coller avec ta vie de famille...
 
Et puis faudrait changer ta 650 SV pour une R1 ou une GSXR 1000, parce qu'ici ils ont que des grosses motos... :hello:

Reply

Marsh Posté le 31-05-2001 à 15:47:29    

tgrx a écrit a écrit :

BENB> je suis tenu au secret sur ce projet :benetton:, d'ailleurs j'aurais pas du donner les formes des grilles.
 
Pour la partie simulation, ils programment en Fortran ...:D... mais c'est vrai qu'ils recherchent actuellement des ingenieurs.
Bon le truc c'est que c'est en Norvege (eh oui, moi je suis qu'un petit etudiant en stage...), et je pense pas que ca va coller avec ta vie de famille...
 
Et puis faudrait changer ta 650 SV pour une R1 ou une GSXR 1000, parce qu'ici ils ont que des grosses motos... :hello:




 
Je crois qu'en ne me disant rien tu m'en dis un peu plus encore... :D
 
La Norvege...

 

[edit]--Message édité par BENB--[/edit]

Reply

Marsh Posté le 31-05-2001 à 15:53:35    

UP du soir....

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 31-05-2001 à 17:24:08    

espoir !

Reply

Marsh Posté le 01-06-2001 à 10:12:12    

Up du matin... chagrin (en plus il pleut :cry: )

Reply

Marsh Posté le 01-06-2001 à 10:33:13    

tgrx a écrit a écrit :

Up du matin... chagrin (en plus il pleut :cry: )




Desolee ici grand ciel bleu...

Reply

Marsh Posté le 01-06-2001 à 14:01:29    

Le soleil est revenu.
 
Up de l'apres-midi... oh oui ! ;)

Reply

Marsh Posté le 01-06-2001 à 18:10:29    

Up du soir

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed