Alors voila en ISN on est en plein dans des mini-projets sur les modification d'images et on a décidé d'utiliser des matrices de convolution . J'ai cependant un petit problème de stockage . Voial pour le moment le programme :
void main() {
load("");
//Pause pour voir la photo de départ avant de la modifier
sleep(3000);
int rgb[] = new int [3];
int rgbGH[] = new int [3];
int rgbGB[] = new int [3];
int rgbGM[] = new int [3];
int rgbMH[] = new int [3];
int rgbMB[] = new int [3];
int rgbDH[] = new int [3];
int rgbDM[] = new int [3];
int rgbDB[] = new int [3];
//Recherche des dimensions de l'image
int largeur = getWidth();
int hauteur = getHeight();
for (int x =- largeur + 1; x < largeur; x ++) {
for (int y =- hauteur + 1; y < hauteur; y ++) {
rgb = getPixelColor(x, y);
rgbGH = getPixelColor((x - 1), (y + 1));
rgbGM = getPixelColor((x - 1), y);
rgbGB = getPixelColor((x - 1), (y - 1));
rgbMH = getPixelColor(x, (y + 1));
rgbMB = getPixelColor(x, (y - 1));
rgbDH = getPixelColor((x + 1), (y + 1));
rgbDM = getPixelColor((x + 1), y);
rgbDB = getPixelColor((x + 1), (y - 1));
}
}
//for (int x =- largeur + 1; x < largeur; x ++) {
// for (int y =- hauteur + 1; y < hauteur; y ++) {
//rgb = getPixelColor(x, y);
//rgbGH = getPixelColor((x - 1), (y + 1));
//rgbGM = getPixelColor((x - 1), y);
//rgbGB = getPixelColor((x - 1), (y - 1));
//rgbMH = getPixelColor(x, (y + 1));
// rgbMB = getPixelColor(x, (y - 1));
// rgbDH = getPixelColor((x + 1), (y + 1));
//rgbDM = getPixelColor((x + 1), y);
//rgbDB = getPixelColor((x + 1), (y - 1));
//reset(largeur, hauteur);
int r =- 2 * rgbGH[0] + ( - 1 * rgbGM[0]) + ( - 1 * rgbMH[0]) + rgb[0] + rgbMB[0] + rgb[0] + (2 * rgbDB[0]);
if (r<0){
r=0;
}
if(r>255){
r=255;
}
int v =- 2 * rgbGH[1] + ( - 1 * rgbGM[1]) + ( - 1 * rgbMH[1]) + rgb[1] + rgbMB[1] + rgb[1] + (2 * rgbDB[1]);
if (v<0){
v=0;
}
if(v>255){
v=255;
}
int b =- 2 * rgbGH[2] + ( - 1 * rgbGM[2]) + ( - 1 * rgbMH[2]) + rgb[2] + rgbMB[2] + rgb[2] + (2 * rgbDB[2]);
if (b<0){
b=0;
}
if(b>255){
b=255;
}
setPixel(x, y,r,v,b);
}
}
}
Le problème qu'il y a c'est que pour le premier pixel c'est bon, mais ensuite dans les calculs ça prend en compte le pixel qui a été modifié et non pas sa valeur avant les modification . J'aimerais savoir comment stocker les valeurs de départ , mais je ne trouve pas ...
En espérant que quelqu'un réponde
Merci
Bonjour,
On lira quand tu auras déposé otn code sur ce site : http://pastebin.com/ (n'oublie pas de choisir ton langage de programmation dans le menu "syntax hilighting").
Hmm Juste mettre le programme , c'est fait , après je sais aps exactement ce qu'il faut mettre..
Nous donner le lien pour qu'on puisse lire le programme... ![]()
http://pastebin.com/JCm73ksS
En fait les profs m'ont dit que c'est juste un stockage qu'il faut, mais je trouve vraiment pas comment ... :/
Les rgbDH , rgbDM ... Correspondent aux pixels autour de celui à moridifer , vu que les matrices les prennent en compte .
ôte moi d'un doute... tu veux faire quoi quand tu écrit "=-" ?
on peut rajouter des parenthèses si besoin après le = , c'est pour faire l'effet dessin, en prenant les valeurs des pixels d'autour il faut faire celui d'en haut a gauche x(-2) , + celui de gauche x(-1) , etc ..
Je repose donc ma question : tu veux faire quoi (comme calcul) quand tu écris =- ?
Bah : par exemple : = (-2) * rgbGH[2] + ( (- 1) * rgbGM[2]) + ( (- 1) * rgbMH[2]) + rgb[2] + rgbMB[2] + rgb[2] + (2 * rgbDB[2]);
avec des parenthèses c'est peut-etre plus clair
Et ca correspond à ce qu'il y a tout en bas ici =< http://docs.gimp.org/fr/plug-in-convmatrix.html
le repoussage
Tu n'as toujours pas répondu à ma question hein. ![]()
Enfin bon, au moins on est d'accord sur le fait que le = et le - n'ont rien à voir, et donc que tu devrais les séparer par un espace.
Revenons à la question initiale. Ne penses-tu pas que ce serait une bonne idée de créer une nouvelle image ? ![]()
Pourquoi pas , mais les professeurs m'avaient qu'on pouvait juste modifier l'image de départ.
Enfin ça ne règlerait pas les problèmes qui font qu'on utilise un pixel déjà modifié par le calcul précédent si ?
Laisse moi réfléchir.... si.
Et donc en faisant un reset ça marcherait , et ça prendrait les valeurs des pixels pour l'image de départ et pas celle modifiée ?
ça veut dire quoi "faire un reset" ?
Apres ça serait de savoir ou mettre la nouvelle image , parce que avant le "For" , il trouvera plus l'image et après il refera une image à chaque fois ..
euuh bahh avec ce qu'on utilise pour créer une nouvelle image c'est : reset(width,height);
de l'ISN quoi ^^ , c'est pas des trucs très complets..
Avec notre Java's cool 4 on va pas très loin, mais faut utiliser des trucs qu'on a à peu près vu en cours quand même ..
déja en supposant que ta méthode getPixelColor() renvoit un int[], faut que tu soit conscient que ta double boucle ne marche pas.
tu fais une double boucle et ta premiere ligne c'est :
rgbGH = getPixelColor((x - 1), (y + 1));
le problème c'est que rgbGH est du type int[] donc ton code est équivalent à faire car tu ne stock nulle par tes valeurs, les nouveaux calcul écrasant les anciens donnant un résultat final égal à ça :
rgbGH = getPixelColor((largeur - 1), (hauteur + 1));