CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[java] Isn , problème avec les matrices

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 16:32:56

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

chris_27
chris_27
Niveau 10
19 janvier 2013 à 16:36:33

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").

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 16:58:38

Hmm Juste mettre le programme , c'est fait , après je sais aps exactement ce qu'il faut mettre..

chris_27
chris_27
Niveau 10
19 janvier 2013 à 17:04:30

Nous donner le lien pour qu'on puisse lire le programme... :hap:

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 17:05:09

http://pastebin.com/JCm73ksS

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 17:06:06

En fait les profs m'ont dit que c'est juste un stockage qu'il faut, mais je trouve vraiment pas comment ... :/

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 17:14:30

Les rgbDH , rgbDM ... Correspondent aux pixels autour de celui à moridifer , vu que les matrices les prennent en compte .

chris_27
chris_27
Niveau 10
19 janvier 2013 à 17:29:26

ôte moi d'un doute... tu veux faire quoi quand tu écrit "=-" ?

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 17:32:07

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 ..

chris_27
chris_27
Niveau 10
19 janvier 2013 à 17:33:12

Je repose donc ma question : tu veux faire quoi (comme calcul) quand tu écris =- ?

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 17:46:09

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

chris_27
chris_27
Niveau 10
19 janvier 2013 à 18:04:39

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 ? :question:

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 18:10:01

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 ?

chris_27
chris_27
Niveau 10
19 janvier 2013 à 18:12:41

Laisse moi réfléchir.... si.

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 18:24:15

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 ?

chris_27
chris_27
Niveau 10
19 janvier 2013 à 18:42:55

ça veut dire quoi "faire un reset" ?

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 18:43:35

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 ..

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 18:55:02

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..

elmander46170
elmander46170
Niveau 5
19 janvier 2013 à 19:27:26

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 ..

dark_drow
dark_drow
Niveau 15
19 janvier 2013 à 20:03:09

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));

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment