Bonjour
Comment je peux calculer la distance entre chaque voxel de IRM et la surface du cerveau?
Bonjour
Comment je peux calculer la distance entre chaque voxel de IRM et la surface du cerveau?
Le problème se pose sur le calcul de la carte, ou sur la segmentation de l'IRM ?
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
le problème est sur la carte.
Si tu as des voxels, un moyen rapide est d'utiliser les masques de Chamfer. Il y a un exemple dans la rubrique "contribuez" pour le cas 2D. Le principe peut être étendu au cas 3D.
http://pageperso.lif.univ-mrs.fr/~ed...001/index.html
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Re-bonjour
Bon j'ai fini une version d'un modele deformable(juste une forme dont les points se deplace en fonction de la valeur minimal de leur voisins(d'apres une carte des distance 2D) )...ça marche pas trop mal! Merci a pseudocode pour ses precision de la derniere fois elles m'ont été bien utile!!
Mais la j'aurai besoin de passer en 3D pour la carte des distance .
Je suis en train d'adapter le code qu'il avais presenté sur le forum:
http://www.developpez.net/forums/d47...ances-chamfer/
mais j'ai un soucis sur le chamfer 3D. La version de thiel presenté plus haut est certes bien mieux mais plus complexe a coder...ou a utiliser!
j'utilise un masque de chamfrein 3D tel que:
chamfrein[3][3][3]={{{3,2,3},{2,1,2},{3,2,3}},{{2,1,2},{1,0,1},{2,1,2}},{{3,2,3},{2,1,2},{3,2,3}},};
je ne comprend pas comment il adapte son :
for (int k = 0; k < 2; k++) {
int dx = chamfer3[k][0];
int dy = chamfer3[k][1];
int dt = chamfer3[k][2];
testAndSet(output, x + dx, y + dy, width, height, v + dt);
if (dy != 0)
testAndSet(output, x - dx, y + dy, width, height, v + dt);
if (dx != dy) {
testAndSet(output, x + dy, y + dx, width, height, v + dt);
if (dy != 0)
testAndSet(output, x - dy, y + dx, width, height, v
+ dt);
}
on choisis quoi comme variables en plus de dx dy dz?
for (int f = 0; f < 2; f++) {
for (int k = 0; k < 2; k++) {
int dx = chamfer3[f][k][0];
int dy = chamfer3[f][k][1];
int dt = chamfer3[f][k][2];
....
Merci d'avance....
Cordialement Hugox
Les masques que j'utilise sont de la forme {1,0,5}, {1,1,7}, {2,1,11}
Ce qui signifie que, pour un pixel de référence (x,y) on a :
- le pixel (x+1, y+0) qui est à une distance 5
- le pixel (x+1, y+1) qui est à une distance 7
- le pixel (x+2, y+1) qui est à une distance 11
(il faut au final normaliser - diviser par 5 dans ce cas - pour avoir une approximation de la distance euclidienne)
Par symétrie axiale (verticale et oblique), on obtient les autres possibilités:
- le pixel (x+0, y+1) qui est à une distance 5
- le pixel (x+1, y+2) qui est à une distance 11
- le pixel (x-1, y+2) qui est à une distance 11
- le pixel (x-1, y+1) qui est à une distance 7
...
Pour passer en 3D il faut utiliser des masques de la meme forme avec une composante en plus (cf lien cité ci-avant).
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Partager