algo de retouche d'image en C

algo de retouche d'image en C - Programmation

Marsh Posté le 26-04-2001 à 09:45:33    

j'ai traité une image, et tous les pixels qui m'interraissaient, je les aient mis dans un tableau a 2 dimensions.
 
Maintenant, il faut que j'élimine les formes dont le nombre de pixel est inférieur a celui demandé par l'utilisateur.
( pour moi une forme est une suite de pixel consécutif )
 
Quelqu'un aurait une idée, ou saurait ou je dois me docummenter.
 
merci d'avance    :jap:  :jap:  :jap:  :jap:  
 
Rq: le tableau a deux dimmension est un tableau de char ou -1 signifie que le pixel n'est pas selectionné et 0 signifie le contraire.


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 26-04-2001 à 09:45:33   

Reply

Marsh Posté le 26-04-2001 à 12:47:33    

je vais tenter de faire une procedure reccurente a la oualeguene, mais si je me blaisse ou s'il m'arrive du mal je vous en tiendrez pour responsable... :cry:  
 
Sayanora  :jap:

Reply

Marsh Posté le 26-04-2001 à 14:21:07    

ben la recusrivité est le plus simple mais donne un exemple stp

Reply

Marsh Posté le 26-04-2001 à 14:39:47    

en faite ce que je fais, je balaye de gauche a droite et de bas en haut mon image, des que je tombe sur un caractere 0,je lance ma procedure recurrente.
Celle ci regarde les pixels autour de celui selectionné,si il y en a au moins un de selectionné alors elle se rappelle elle meme puis ajoute un au compteur, sinon elle retourne le compteur.
 
mais ca marche pas mon truc.
 
as tu compris ? (parce que moi des fois j'ai du mal a me comprendre)

Reply

Marsh Posté le 26-04-2001 à 15:15:54    

Salut
Bossant actuellement pas mal dans le traitement d'image et le reconnaissance de forme, une chose que je peux te conseiller, c'est le filtre médian. Je l'emploie personnellement dans la forme 1 x n (supprime le n-1 pixels isolés) mais tu peux l'employer sous une forme m x n.
L'avantage, c'est que tu as une réponse impulsionnelle nulle mais sa réponse indicielle est un saut unité. Cela veut dire que tu supprimes les pics isolés sans déplacer ou modifier les bords (contrairement à un filtre de moyennage qui va rendre "flou" ton image).
Si tu travailles sous Matlab, tu peux l'essayer très facilement. Je bosse perso en C++
Si tu as d'autres questions, tu peux m'envoyer un mail.

Reply

Marsh Posté le 26-04-2001 à 15:26:05    

en faite le but de ma procedure n'est pas de distinguer la forme, mais de compter combien la forme contient de pixel.
 
et ca c'est trop chaud.

Reply

Marsh Posté le 26-04-2001 à 21:44:58    

Salut à tous,
 
J'avais fait quelque chose de similaire dans un précédant post.
Voici un copier/coller/adapter du petit programme C++ en espérant que j'ai bien compris le problème.
 
Salutations
--------------------------------------
#define MINPIX  10 // Nombre minimum de pixels de la forme
 
#define NBX     25 // Taille X du tableau
#define NBY     25 // Taille Y du tableau
 
char Tab[NBX][NBY];
 
// Compte (dans somme) le nombre de pixels (=valeur) de la forme à partir
// de la case de coordonnées x,y et la marque avec (marque)
void Recherche(const int x, const int y, const int &valeur, const int &marque, int &somme)
{
   if (x<0 || x>=NBX || y<0 || y>=NBY)
      return; // si les coordonnées de la case à tester ne sont pas valides
   else if (Tab[x][y]!=valeur)
      return; // si la case a déjà été marquée ou n'appartient pas à la forme
   else
   {
      Tab[x][y]=marque; // on marque la case
      somme++;  // on ajourte 1 au nombre de pixels de la forme
      Recherche(x-1,y,valeur,marque,somme); // on teste les 4 directions récursivement
      Recherche(x+1,y,valeur,marque,somme);
      Recherche(x,y-1,valeur,marque,somme);
      Recherche(x,y+1,valeur,marque,somme);
   }
}
 
main()
{
   int i,j,nbpix;
 
   // initailisation de Tab uniquement avec des 0 ou -1
 
   for (j=0;j<NBY;j++)
      for (i=0;i<NBX;i++)
         if (Tab[i][j]==0) // si pixel selectionné
         {
            nbpix=0;
            Recherche(i,j,0,1,nbpix); // recherche pixels consécutifs et marque avec 1
            if (nbpix<=MINPIX) // si le nombre de pixels < au minumum
                Recherche(i,j,1,-1,nbpix); // marquage (efface) avec -1 des pixels précédemment marqués avec 1
         }
 
   for (j=0;j<NBY;j++)
      for (i=0;i<NBX;i++)
         if (Tab[i][j]==1)
            Tab[i][j]=0; // tous les pixels que l'on garde sont marqués à 1, on les remet à 0.
 
   return 0;
}

Reply

Marsh Posté le 27-04-2001 à 08:46:57    

j'en reviens pas c'est exactement le meme raisonnement que j'ai fait (sauf que moi mon prog y panique un peu) je vais tester tout de suite.
 
juste un truc encore, y marche pas que pour les formes creuses ton algorithme ?

Reply

Marsh Posté le 27-04-2001 à 08:58:24    

dans tous ceux qui m'ont répondu, et tout ceux qui lisent en ce moment, j'aurais aimé savoir les différents domaines du traitement de l'image, et quelle formation y fallait faire et ou ?
 
je fini mon DUT info, et je sais pas ou m'orienter (ecole d'ingénieur, l'armée, le trottoire  :crazy: )
 
Si quelqu'un veut bien me faire partager sa passion du traitement de l'image, par email aussi, pas de probleme
 
merci :jap:

Reply

Marsh Posté le 27-04-2001 à 09:20:47    

en tout cas merci tfj57, j'ai trouvé l'erreur dans mon algorithme, en faite ma fonction était bcp complixée, et tellement moins efficace. J'ai souvent tendance a me compliquer la vie...  :sweat:

Reply

Marsh Posté le 27-04-2001 à 09:20:47   

Reply

Marsh Posté le 27-04-2001 à 11:05:33    

un petit up avant de manger   :bounce:

Reply

Marsh Posté le 27-04-2001 à 11:54:10    

juldjin a écrit a écrit :

je fini mon DUT info, et je sais pas ou m'orienter (ecole d'ingénieur, l'armée, le trottoire  :crazy: )



 
ben tu peux aller dans une ecole d'ingenieur specialisée en informatique avec une branche multimedia/traitement d'image par exemple, mais par contre je n'ai pas de nom a te donner.

Reply

Marsh Posté le 27-04-2001 à 12:42:01    

ouaye C'est ce que je cherche en ce moment.. mais je trouve rien pres de lyon.  :??:

Reply

Marsh Posté le 27-04-2001 à 12:44:54    

Traitement de l'image >>> ENST Paris. C à 2h de lyon en TGV  :D


---------------
Ce qui vaut la peine d'être fait vaut la peine d'être bien fait
Reply

Marsh Posté le 27-04-2001 à 12:58:18    

le probleme avec ENST de paris c'est qu'il prennent des DUT pas.
 
je crois que y'a 8place sur toutes la france et l'etranger
 
c'est cool pas

Reply

Marsh Posté le 27-04-2001 à 15:49:15    

un petit up avant le week end

Reply

Marsh Posté le 28-04-2001 à 19:12:05    

juldjin a écrit a écrit :

j'en reviens pas c'est exactement le meme raisonnement que j'ai fait (sauf que moi mon prog y panique un peu) je vais tester tout de suite.
 
juste un truc encore, y marche pas que pour les formes creuses ton algorithme ?




 
Cet algorithme fonctionne pour toutes les formes de formes.
 
Il faut juste faire attention à la taille de la pile, car les appels récursifs sont très friands d'espace mémoire dans la pile. Pour tester si tout se passe bien, il suffit de réaliser le cas le plus extrême en remplissant le tableau avec des 0.
 
En ce qui concerne mes études, j'ai aussi fait un DUT informatique. J'ai trouvé cela très bien car on nous enseigne de bonnes bases dans pleins de domaines et cela ne dure que 2 ans, si on en a marre en peut aller bosser avec un diplôme en main.
 
Pour la suite j'ai choisi la solution de facilité en faisant une licence et maîtrise, car on avait déjà vu pas mal de matières à l'IUT et en plus certains profs d'infos étaient les mêmes et faisaient le même programme qu'à l'IUT …
 
Salutations

Reply

Sujets relatifs:

Leave a Replay

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