algorithme pour retouche d'image

algorithme pour retouche d'image - Programmation

Marsh Posté le 12-04-2001 à 15:38:33    

bonjour, je cherche de la doc sur internet si possible, qui m'expliquerait comment traiter les images :
 agrandir,retrecir,faire du flou etc...
 
merci d'avance   :lol:

Reply

Marsh Posté le 12-04-2001 à 15:38:33   

Reply

Marsh Posté le 12-04-2001 à 15:46:44    

dans la plus part des cas le traitement d'une image se resume a appliquer une matrice pour chaque point de l'image. La taille de la matrice et les valeurs des éléments de la matrice sont tres importants.
 
Il existe des matrices pour faire du "flou" (directionnel, ...) ou de la detection de contour par exemple.

Reply

Marsh Posté le 12-04-2001 à 15:53:54    

ouais C bien ce que je pensait, mais moi les maths c'est pas le top...
 
Si qq'un connait un site pour les nuls en maths, SVP ? :hap:

Reply

Marsh Posté le 12-04-2001 à 16:01:43    

voici quelque liens mais ce n'est pas trié et parfois c'est un peu compliqué.
 
http://www.inria.fr/rapportsactivi [...] tat-2.html
 
 
http://pczenith.univ-mlv.fr/~jf/Tr [...] _imag.html
 
je suis sur qu'il y a mieux que ca mais ben c'est ce qu j'ai trouvé

Reply

Marsh Posté le 12-04-2001 à 16:03:00    

oki merci je vais buché dessus avant de me rentrer chez moi (pouh dure journée)  :sol:

Reply

Marsh Posté le 12-04-2001 à 16:10:16    

voici un exemple tout bete pour faire du flou tout bete.
 
matrice de flou 3x3 avec des 1 dans chaque case.
ton image est considerée aussi comme une matrice lxh (largeur et hauteur)
 
1° attention, avec cette méthode, les pixels du bord de l'image sont ignorés.
2° je considere une image noir et blanc : 0..255
3° il faut une image intermediaire pour les resultat.
 
unsigned char isrc[l][h];
unsigned int  idst[l][h]; // à 0
unsignet char mat[3][3];
int           som;  // somme des elements de la matrice
 
for (int i=1;i<(l-1);i++) {
  for (int j=1;j<(k-1);j++) {
    for (int k=-1;k<2;k++) {
      for (int l=-1;l<2;l++) {
        idst[i][j]=idst[i][j]+(isrc[i+k][j+l]*mat[k][l]);
        }
      }
    idst[i][j]=idst[i][j]/som;
    }
  }
 
voila, normalement ca marche mais ce n'est pas du tout optimisé.
Avec ca tu as au moins le principe de fonctionnement. Il suffit ensuite de modifier les valeur de la matrice mat et tu pourras faire de belles choses.

Reply

Marsh Posté le 12-04-2001 à 17:32:41    

alors juldjin c'est comment ton projet, moi c'est de la bd ca me plait pas trop mais j'apprend pas mal de truc sur asp, vb et c# alors ca compense, et toi ?

Reply

Marsh Posté le 12-04-2001 à 19:27:00    

juldjin> ben il te plait mon algo de flou ;)


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 13-04-2001 à 08:34:37    

Kick -> Mon stage est trop fort pour l'instant, je programme en Win 32, ca a été dure mais je commence a maitriser.
maintenant je passe aux algo pour traiter les images, mais C pas avec les maths qu'on a eu a l'iut que je vais faire grand chose (El Hor...).
 
Roswell_ -> je vais peux etre me servir d'un de tes algos pour faire les contours, mais y faudrait que j'optimise, en faite je dois chercher sur une image des galleries creusé par des lombrics.... donc y faut que je détour que les parties sombres...
 
darkoli -> merci de ton aide si précieuse, la je travaille sur un algo pour redimensionner une image (l'agrandir ou la rétrecir) je regarde comment photoshop et paint shop pro le font
apparemment c'est pareil avec des matrices...

Reply

Marsh Posté le 13-04-2001 à 10:18:17    

d'ailleurs a propos de photoshop, dans le menu filtre, va tout en bas, et tu verras tu peux toi meme remplir une matrice pour faire une filtre. Donc pour faire des testes pour trouver une matrice efficace tu peux essayer.
 
Pour le contour ca se fait en 4 fois, d'abord de gauche a droite, puis de droite a gauche puis de haut en bas et enfin de bas en haut avec 4 matrices differentes, et en,suite, il faut ajouter les 4 images obtenus. Mais il y a d'autres méthodes.

Reply

Marsh Posté le 13-04-2001 à 10:18:17   

Reply

Marsh Posté le 13-04-2001 à 10:40:32    

gracias darkoli

Reply

Marsh Posté le 13-04-2001 à 12:01:25    

Ca donne quoi ta galerie avec la matrice du laplacien?
 
 0 -1  0
-1  4 -1
 0 -1  0


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 13-04-2001 à 12:11:43    

si ca peut t'aider j'ai fait une fonction pour resizer une image:
cette fonction filtre l'image pour que ce ne soit pas trop pourrit.
 
AVEC tailleX et tailleY sont les nouvelles dimentions de l'image
AVEC oldx et oldy sont les anciennes dimentions de l'image
 
    int buffer[]=new int[tailleX*tailleY];
 
    int sx=oldx, sy=oldy;
    // calcul du coeficient d'interpolation des point entre l'img source et l'img de destination
    int ix=sx*256/tailleX;
    int iy=sy*256/tailleY;
 
    int x,y,a,b,xx,yy,yyy;
    int c0,c1,c2,c3,c;
    int o0,o1,o2,o3;
 
    // on utilise une virgule fixe pour x et y (24bits pour les valeur entiere de x et y)
    // et 8bits pour les valeur derriere la virgule pour x->b et y->a
    // parcourt de la nouvelle image
    y=0;
    for (int j=0;j<tailleY;j++)
        {
        // y est la coordonnée dans l'ancienne image
        // a est la la valeur apres la virgule
        // (distance entre le plus proche pixel de la source vers la coordonnée de y)
        a=y&0xff;
        x=0;
        yy=y>>8;
        yyy=yy*sx;
        for (int i=0;i<tailleX;i++)
            {
            // x est la coordonnée dans l'ancienne image
            // b est la la valeur apres la virgule
            // (distance entre le plus proche pixel de la source vers la coordonnée de x)
            b=x&0xff;
            xx=x>>8;
            c=0;
           // test si le projeter est contenu dans l'image
            if ((xx+yyy)>=0 && (xx+1+yyy+sx)<(sy*sx-1)) {
 
              o0=f.get(xx+yyy); o1=f.get((xx+1)+yyy);
              o2=f.get(xx+yyy+sx); o3=f.get(xx+1+yyy+sx);
              // bilinear interpolation
              c=0xff000000;
              c0=(o0&0xFF0000)>>16; c1=(o1&0xFF0000)>>16;
              c2=(o2&0xFF0000)>>16; c3=(o3&0xFF0000)>>16;
              c0=(c0<<8)+b*(c1-c0);
              c2=(c2<<8)+b*(c3-c2);
              c+=((c0<<8)+a*(c2-c0))&0xff0000;
 
              c0=(o0&0xFF00)>>8; c1=(o1&0xFF00)>>8;
              c2=(o2&0xFF00)>>8; c3=(o3&0xFF00)>>8;
              c0=(c0<<8)+b*(c1-c0);
              c2=(c2<<8)+b*(c3-c2);
              c+=(((c0<<8)+a*(c2-c0))>>8)&0xff00;
 
              c0=o0&0xFF; c1=o1&0xFF;
              c2=o2&0xFF; c3=o3&0xFF;
              c0=(c0<<8)+b*(c1-c0);
              c2=(c2<<8)+b*(c3-c2);
              c+=(((c0<<8)+a*(c2-c0))>>16)&0xff;
 
              buffer[i+j*tailleX]=c;
//              buffer[i+j*tailleX]=f.get(xx+yyy);
              }
            x+=ix;
            }
        y+=iy;
        }
    // recopie du buffer
    f.buffer=new int[tailleX*tailleY];
 
    for(int i=0;i<tailleX*tailleY;i++)
      f.buffer[i]=buffer[i];

Reply

Marsh Posté le 13-04-2001 à 12:57:20    

merci a tous pour tout vos trucs, je reviens lundi, car la je suis en week END   !!!!
 
mais je pense que ces algos vont me trotter comme meme dans l'esprit.

Reply

Marsh Posté le 17-04-2001 à 08:59:35    

tsr --> euh.. moi je maitrise pas les opérations avec les hexas..
si tu peux m'expliquer comment tourne ton algorithme  :sol:  
 
thanks

Reply

Marsh Posté le 17-04-2001 à 13:41:29    

Jules tu sait bien que tu maitrise pas  :D  
 
Alors arrête de te faire du mal et dis moi si elle a des gros tété  :eek2:


---------------
touf
Reply

Marsh Posté le 17-04-2001 à 14:41:53    

Reply

Marsh Posté le 17-04-2001 à 15:09:26    

merci encore darkoli.
g reussi a faire un retrecissement de n'importe quelle image, et ceux en gardant l'aspect ratio.
je suis fier de moi...
 
touf--> Cette fille c'est la femme de ma vie, et je m'en fout de ces tété etc...
(immenses)

Reply

Marsh Posté le 17-04-2001 à 15:27:22    

revoici une autre url pour l'utilisation des matrices avec photoshop
 
http://www.multimania.fr/webmaster [...] tml?page=5

Reply

Sujets relatifs:

Leave a Replay

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