verification code erosion

verification code erosion - C - Programmation

Marsh Posté le 28-03-2013 à 11:55:49    

bonjour,
je voudrais savoir si pour vous ce code fait bien une érosion

Code :
  1. for(i=1;i<bmp.width-1;i++) //deplacement sur le pixel en largeur
  2. {
  3.  for(j=1;j<bmp.height-1;j++)// deplacement sur les pixel en hauteur
  4.  {
  5.   if(bmp.data[j][i].moy==255 && bmp.data[j-1][i].moy==255 && bmp.data[j][i-1].moy==255 && bmp.data[j+1][i].moy==255 && bmp.data[j][i+1].moy==255)
  6.   {
  7.     bmp1.data[j][i].moy=255;bmp1.data[j][i].r=255;bmp1.data[j][i].g=255;bmp1.data[j][i].b=255;
  8.   }
  9.   else if(bmp.data[j][i].moy==0 || bmp.data[j-1][i].moy==0 || bmp.data[j][i-1].moy==0 || bmp.data[j+1][i].moy==0 || bmp.data[j][i+1].moy==0)
  10.   {
  11.    bmp1.data[j][i].moy=0;bmp1.data[j][i].r=0;bmp1.data[j][i].g=0;bmp1.data[j][i].b=0;
  12.   }
  13.  }
  14. }

Reply

Marsh Posté le 28-03-2013 à 11:55:49   

Reply

Marsh Posté le 28-03-2013 à 13:47:36    

Je ne sais pas ce que tu appelles une érosion, mais je trouve surprenant que tu ne modifies tes données que dans des conditions aussi strictes.
 
C'est probablement assez peu important dans ton cas ... Mais tu devrais prendre l'habitude d'avoir ta boucle intérieure sur width et ta boucle extérieure sur height. Sauf cas particulier, c'est ce qui te donnera les meilleures performances et ca ne change rien à ton algo.


---------------
last.fm
Reply

Marsh Posté le 28-03-2013 à 15:39:10    

une érosion est un "calcul" morphologique sur image binaire
qui diminue le contour de tout objet à 1 de 1 pixel expliqué brièvement c'est sa
j'ai oublier de précisé pour ceux qui connaisse j'utilise un élément structurant carré en 4 connexité
 
et pourquoi le fait d'avoir la boucle width à l'intérieur augmenterai les performance ?

Message cité 1 fois
Message édité par icemake le 28-03-2013 à 16:07:11
Reply

Marsh Posté le 28-03-2013 à 16:34:48    

icemake a écrit :

une érosion est un "calcul" morphologique sur image binaire
qui diminue le contour de tout objet à 1 de 1 pixel expliqué brièvement c'est sa
j'ai oublier de précisé pour ceux qui connaisse j'utilise un élément structurant carré en 4 connexité


 
C'est toujours génial ce jargon pour dire que tes pixels sont carrés ( [:orly2] ) et que tu ne t'occupes pas des diagonales.
Pour ce qui est de te donner une réponse quand à la qualité de ton algo, j'imagine que ca va dépendre comment tu remplis ton .moy dans ta structure de données, vu qu'au final, c'est ce moy qui sert de marqueur pour savoir si tu dois mettre en blanc, en noir, ou laisser tel quel.
Accessoirement, vu ce que tu décris, tu voudras sans doute aussi un seuil plus large que 1, mais j'imagine que pour l'exemple ca importe peu.
 

icemake a écrit :

et pourquoi le fait d'avoir la boucle width à l'intérieur augmenterai les performance ?


C'est plus sympa pour le cache de ton processeur de traiter ligne par ligne que colonne par colonne parce qu'apparamment, tes pixels sont organisés par ligne. Ca évite à ton processeur de faire trop d'allers et retours en mémoire.


---------------
last.fm
Reply

Marsh Posté le 28-03-2013 à 16:54:35    

ok d'accord
oui je le reduit pour la ragrandir apres ce qui normalement me permettra de separer les objet collés

Citation :

C'est plus sympa pour le cache de ton processeur de traiter ligne par ligne que colonne par colonne parce qu'apparamment, tes pixels sont organisés par ligne. Ca évite à ton processeur de faire trop d'allers et retours en mémoire.


a ok je me coucherai mais bete ce soir ^.^

Reply

Marsh Posté le 28-03-2013 à 17:27:34    

Aussi, tu feras attention : ta méthode ne gère pas les bordures de ce qu'on en voit. Après, tu as peut-être pré-élargi ton image de deux pixels pour gérer ca de manière transparente pour l'algo.

 


Edit : au passage, c'est typiquement le genre d'algo que tu dois pouvoir tester facilement sur tous tes cas critiques, c'est probablement mieux que de ne reposer que sur une relecture de code :)


Message édité par theshockwave le 28-03-2013 à 17:28:32

---------------
last.fm
Reply

Marsh Posté le 29-03-2013 à 08:54:45    

oui j'ai déjà quelque chose une autre fonction qui traite les bordure avant de faire sa

Reply

Sujets relatifs:

Leave a Replay

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