algorithme pour retouche d'image - Programmation
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.
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 ?
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é
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)
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.
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 ?
Marsh Posté le 12-04-2001 à 19:27:00
juldjin> ben il te plait mon algo de flou
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...
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.
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
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];
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.
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
thanks
Marsh Posté le 17-04-2001 à 13:41:29
Jules tu sait bien que tu maitrise pas
Alors arrête de te faire du mal et dis moi si elle a des gros tété
Marsh Posté le 17-04-2001 à 14:41:53
re voici des liens :
http://www.astrosurf.com/legault/ip_fr.htm
http://www.campus.ecp.fr/astro/exp [...] ement.html
http://raphaello.univ-fcomte.fr/IG [...] Images.htm tres bien fait
[edit]--Message édité par darkoli--[/edit]
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)
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
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