algo de retouche d'image en C - Programmation
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...
Sayanora
Marsh Posté le 26-04-2001 à 14:21:07
ben la recusrivité est le plus simple mais donne un exemple stp
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)
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.
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.
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;
}
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 ?
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 )
Si quelqu'un veut bien me faire partager sa passion du traitement de l'image, par email aussi, pas de probleme
merci
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...
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 ) |
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.
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.
Marsh Posté le 27-04-2001 à 12:44:54
Traitement de l'image >>> ENST Paris. C à 2h de lyon en TGV
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
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
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
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"