[macro] Reconnaissance de formes
Bonjour à tous,
je dois réaliser un projet sous imageJ qui consiste à reconnaitre automatiquement une maison (une maison basique: un rectangle + un triangle) sur une image.
cette reconnaissance doit se faire par 3 conditions:
-mesure du périmetre de la forme
-mesure de l'aire de la forme
-faire une série de mesures de lignes verticales sur la forme (si les valeurs augmentes puis diminues, alors il est possible que ce soit une maison)
Si ces 3 conditions sont vraies alors la forme est une maison. :ccool:
Encore faut-il sélectionner automatiquement la forme :(
Bref, vous voyez le topo? Le pire est que je n'ai jamais touché a la programation avant et je suis censé écrire cette macro en langage C.
voici mon programme pour les lignes verticales:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| run("Duplicate...", "title=copy3");
h=getHeight();
w=getWidth();
selectWindow("copy3");
for (i=10;i<h;i=i+h/3)
{ ///////////////////////////////////////////////////en gros ici je fais une boucle pour selectionner avec doWand différentes formes.
for (j=10;j<w;j=j+w/3)
{
doWand(i, j);
run("Duplicate...", "title=copy2");
run("Clear");
run("Clear Outside");
run("Draw"); /////////////////////////////////////////////////quelques opérations pour ne garder que la forme en noir et le reste en blanc
run("Fill");
selectWindow("copy2");
h=getHeight();
w=getWidth();
p=0;
for (a=0;a<w;a=a+w/6)
{
//setTool(4);
makeLine(a, h, a, 0);///////////////////////////////////////////////////////////////ici; je trace un trait à chaque 6ème de largeur
run("Measure");
p=p+1;
}
for (n=0;n<p;n=n+6) ////////////////////////////////////j'essaye de regrouper mon tableau en paquets de 6 valeures
{
selectWindow("Results");////////////////////////////////ici je veus comparer les niveaux de noir entre la 2ème, la 3ème et la 5ème valeur du tableau toute les 6 valeures
N1=getResult("Mean", n+1);
N3=getResult("Mean", n+3);
N5=getResult("Mean", n+5);
if (N1<N3 && N3>N5)
print ("house");
else
print ("no house");
print (N1);
print (N3);
print (N5);
}
selectWindow("copy2");
close ();
}
} |
cela ne fonctionne pas, mes valeurs N1, N2 et N3 sont toujours les meme malgré la valeur de 'n' je dois avoir un probleme de boucle au niveau de la récupération des valeurs du tableau mais je ne vois pas ou :cry:
donc voila c'est mon pricipale probleme pour l'instant, c'est toujours le meme probleme avec le programme de mesures d'aires et de périmetres.
Si vous avez des suggestions, je suis preneur :lol:
Merci,