|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
Je ne comprends pas comment reconstruire le masque complet sur base de ce qui est stocké.
Par exemple, pour Chessboard, on a : 1 1 0 0 0 0 ? 0 1 1 J'essaie de passer cet algorithme en C, mais je ne comprends pas les accès aux valeurs des masques dans l'algo : dx = chamfer[k][0]; dy = chamfer[k][1]; dt = chamfer[k][2]; Quelles valeurs récupère-t-on dans le cas du chessboard ? Et que vaut ce masque ? Merci d'avance, |
|
|
00
|
|
|
#22 | |||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
chessboard[1][0] = 1 // {1,0,1} chessboard[1][1] = 1 // {1,1,1} ce qui nous donne le 1/8 de masque (la partie Est / NordEst): Code :
Code :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||||
|
00
|
|
|
#23 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
J'ai un peu du mal, je comprends pas la logique des indices utilisés.
[1][0] c'est quelle élément de la matrice ? et [1][1] ? Et [2][2] qui représente 'dt' ? et [0][2] qui représente le 'normalizer' ? |
|
|
00
|
|
|
#24 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Bah je vois pas comment expliquer mieux. Exemple avec le masque chamfer5:public final static int[][] chamfer5 = new int[][] { new int[] {1,0,5}, new int[] {1,1,7}, new int[] {2,1,11} }; Ce masque est composé de 3 éléments: chamfer5[0]={1,0,5} // 1er element : position=(1,0) valeur=5 chamfer5[1]={1,1,7} // 2eme element : position=(1,1) valeur=7 chamfer5[2]={2,1,11} // 3eme element : position=(2,1) valeur=11 Ce qui nous donne cela: Code :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#25 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
Ok, maintenant je vois comment on numérote.
La plupart du temps on numérote comme ceci : 0 1 2 3 1 2 3 Si je veux implémenter en C, je peux faire ceci ? : int chessboard[3][3]; chessboard[0][0] = 1; chessboard[0][1] = 1; chessboard[0][2] = 1; chessboard[1][0] = 1; chessboard[1][1] = 0; chessboard[1][2] = 1; chessboard[2][0] = 1; chessboard[2][1] = 1; chessboard[2][2] = 1; Et l'utiliser comme dans ton algo ? normalizer = chessboard[0][2]; ... ? L'autre truc, pour ce masque par exemple, normalizer est bien l'élément chessboard[0][2] = 1; dans mon implémentation ? Et puis, quelque soit la taille du masque, normalizer c'est l'élément [0][2], dt l'élément [k][2], ... ? Tu pourrais m'indiquer ces valeurs dans le cas de chamfer5? Merci beaucoup
|
|
|
00
|
|
|
#26 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Citation:
Les coordonnées de ces cases dans le repere centré en 0 sont donc (-1,0) (0,1) (1,0) (0,-1). Dans ton exemple C ca donnerait l'une des 4 cases: chessboard[0][1], chessboard[1][0], chessboard[2][1], chessboard[1][2], Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#27 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
Je vais y arriver
Dans le cas de Chamfer3 alors, on a : 4 3 4 3 0 3 ? 4 3 4 normalizer = 3 ? toujours ? Pour les pixels N - S - O - E, on ajoute 3? Pour les pixels NO - NE - SE - SO, on ajoute 4 ? |
|
|
00
|
|
|
#28 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
oui.
Citation:
- Les cases N, S, E, O sont à une distance de "1" - Les cases NO, NE, SE, SO sont à une distance de "racine(2)" etc. Les masques sont des approximations calculées en multipliant par un entier (le coefficient de normalisation) et en gardant seulement la partie entière. Le masque "Chamfer3" multiplie par "3" et garde la partie entière. - N, S, E, O -> int(1*3) = 3 - NO, NE, SE, SO -> int(racine(2)*3)= int(4.24264...) = 4 Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#29 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
|
|
|
00
|
|
|
#30 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Y a pas d'explication. Je trouve juste que ca fait joli.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#31 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
Et ton 50, c'est ton petit doigt qui te l'a dit ou y'a une explication
|
|
|
00
|
|
|
#32 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
c'est un facteur de changement d'echelle pour avoir un joli dégradé. Le but c'est d'avoir un dégradé de gris entre 0->255. Donc le facteur doit etre telle que pour la distance de chamfer max (DMAX) la formule nous donne la valeur 255.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#33 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2009 Messages : 13 ![]() |
Et cette valeur maximum, tu sais la trouver comment?
Si j'ai une image de 40 pixels sur 40, ma valeur maximale sera sqrt(2*40²) ? Ou est-ce que cette distance dépend de la méthode utilisée? |
|
|
00
|
|
|
#34 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Ceci dit. La distance max "DMAX" dépend de chaque image. Donc il faut parcourir le tableau retourné par la fonction pour la trouver. Une fois qu'on a cette valeur, il suffit de prendre le facteur tel que "formule(DMAX)=255". 255 * Math.min( 1 , Math.log(1+DMAX/FACTOR) ) = 255 => Math.log(1+DMAX/FACTOR) = 1 => 1+DMAX/FACTOR = exp(1) => FACTOR = (exp(1)-1)/DMAX FACTOR ~= 1.718/DMAX
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#35 |
|
Futur Membre du Club
![]() Inscription : octobre 2007 Messages : 47 ![]() |
bonjour a tous,
comme déjà mentionné dans un autre post, je recherche a implémenter l'algorithme des contours actifs à la 3D. Pour cela je dois aussi modifier ce bout de code pour la 3D. En 2D je conçois aisément qu'un simple "aller-retour" suffit a calculer la carte des distances, mais comment s'y prendre pour travailler en 3D? Etant donne que la distance d'un pixel doit prendre en compte les bords des coupes inférieures et supérieures, je ne peux pas me permettre d'appliquer l'algorithme 2D à toutes mes coupes pour avoir un semblant de carte des distances 3D. Mais je ne vois vraiment pas comment m'y prendre. Merci en tout cas pour ton précieux code ! Galadorn |
|
|
00
|
|
|
#36 | |||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Code :
Code :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||||
|
00
|
|
|
#37 |
|
Futur Membre du Club
![]() Inscription : octobre 2007 Messages : 47 ![]() |
un tout grand merci !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com