IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Coordonnées des pixels de type double


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut Coordonnées des pixels de type double
    bonjours à tous
    comment faire pour représenter des images avec des coordonnées de pixel de type double?
    c'est à dire une image construite à partir des points comme
    java.awt.geom.Point2D a = new Point2D.Double(13.1258,85.36985);
    en effet j'ai deux tableaux de données
    le premier tableau de type int, et contient les valeurs de pixels RGB
    j'ai un autre tableau de type double et contient les coordonnées des pixels de l'image originale après l'application d'une interpolation
    maintenant je dois construire et afficher une image resultat de l'interpolation
    merciiii

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Citation Envoyé par sigga Voir le message
    comment faire pour représenter des images avec des coordonnées de pixel de type double?
    Un pixel sur l'écran est un pixel, il se calcul en entier, et non en double ou autres.
    Pour faire simple, Il faut donc arrondir, ou tronquer tes coordonnées ou interpoler tout les points se trouvant dans le pixel de destination.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut
    je vous remercie wax78 pour votre réponse..
    mais en effet j'ai deux tableaux de données
    le premier tableau de type int, et contient les valeurs de pixels RGB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] pixels = image.getRGB(0,0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
    j'ai un autre tableau de type double et contient les coordonnées des pixels de l'image originale après l'application d'une interpolation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gridValues = new Double[(xNumCells) * (yNumCells)];
     
            for (int i = 0; i < yNumCells; i++) {
                for (int j = 0; j < xNumCells; j++) {
    // les points dp sont les points de l'image originale avec des coordonnées de type int (j,i)
    // getValue() est la fonction d'interpolation
                	Point dp = new Point(j,i);
                	int index = (i * xNumCells) + j;
                	double value =  getValue(dp);
                    gridValues[index] = value;
                }
            }
    maintenant je dois construire et afficher une image resultat de l'interpolation, avec les coordonnées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.awt.geom.Point2D a = new Point2D.Double(j+gridValues[j],i+gridValues[j])
    et le cast peut provoquer une perte de précision
    tableau des pixels: 255 189 200 120
    tab des coordonnées après interpolation: 25.6236 25.856 23.658 21.548

    avec un cast on obtient les valeurs suivants

    tableau des pixels: 255 189 200 120
    tab des coordonnées après interpolation: 25 25 23 21

    la position 25 dans le tab des coordonnées peut avoir deux valeurs 255 et 189
    comment faire pour résoudre ce problème??

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut

    Citation Envoyé par sigga Voir le message
    comment faire pour résoudre ce problème??
    Prendre le problème à l'envers!

    Là, tu as interpolé les pixels de l'image de départ pour tenter de les positionner sur l'image d'arrivée. Pourquoi ne pas plutôt faire l'inverse? Tu prends les pixels de l'image d'arrivée, et tu vas chercher à quel pixel de l'image de départ ça correspond. Et si ça tombe entre deux pixels, tu interpoles... mais sur l'image de départ!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour ta valeur en double 25.6236, tu prends 62% (valeur après virgule) de la case 26 et 38% (1 - valeur_apres_virgule) de la case 25 sur toutes tes composantes RGB.

    Il faut voir la valeur double comme une valeur intermédiaire entre deux cases. Pour 0.5, se sera la moyenne entre les deux cases (la moitié de la première et la moitié de la seconde).
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 12
    Par défaut
    Citation Envoyé par plegat Voir le message
    Salut



    Prendre le problème à l'envers!

    Là, tu as interpolé les pixels de l'image de départ pour tenter de les positionner sur l'image d'arrivée. Pourquoi ne pas plutôt faire l'inverse? Tu prends les pixels de l'image d'arrivée, et tu vas chercher à quel pixel de l'image de départ ça correspond. Et si ça tombe entre deux pixels, tu interpoles... mais sur l'image de départ!
    je vous remercie plegat pour votre réponse mais je n'ai pas bien compris ce que vous vouliez dire, comment inverser le problème?
    peut être mon problème n'été pas bien expliqué au debut
    Voici mon problème complet
    j'ai une image I0, et je doit la déformer avec la méthode d'interpolation thin plate spline (spline plaque mince)
    thin plate spline permet de déformer l'image en définissant un ensemble des points de contrôle et leurs positions de destination, puis les points de contrôle sont déplacés vers les positions souhaitées.
    X = x+dx
    Y = y+dy
    (x,y): les coordonnées de l'image source(I0)
    (X,Y): les coordonnées de l'image resultat(I1) après déformation



    Le gros avantage de cet algorithme est que l'image après transformation semble très naturel, une explication simple sur la méthode thin plate spline peut être vu icithin plate spline

    maintenant le problème
    le résultat de l'interpolation est un tableau de double, il contient les valeurs dx dans le cas d'une interpolation selon l'axe des x ou bien les valeurs dy dans le cas d'une interpolation selon l'axe des y
    alors, les coordonnées de l'image résultat I1(X,Y) seront aussi de type double :
    X = x+dx (int + double = double)
    Y = y+dy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    gridValues = new Double[(xNumCells) * (yNumCells)];
     
            for (int i = 0; i < yNumCells; i++) {
                for (int j = 0; j < xNumCells; j++) {
    // les points dp sont les points de l'image originale avec des coordonnées de type int (j,i)
     
                	Point dp = new Point(j,i);
                	int index = (i * (1 + xNumCells)) + j;
    // getValue() est la fonction d'interpolation
                	double value =  getValue(dp);
    // gridValuesX est le tableau qui contient le résultat de l'interpolation selon l'axe des X
                    gridValuesX[index] = value;
                }
            }
    les coordonnées de l'image résultat sont comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.awt.geom.Point2D a = new Point2D.Double(j+gridValuesX[j],i+gridValuesY[j])
    comment faire pour afficher cette image?
    wax78 me propose de faire un cast de double à int, dans ce cas nous seront confronté à un autre problème,
    dans une image chaque pixel(x,y) doit avoir une seule valeurs RGB comme suite


    mais avec le cast un pixel(x,y) peut avoir plus q'une seule valeur RGB comme le pixel 25 ici



    comment résoudre ce problème?
    j'espère que le problème est bien expliqué maintenant

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Une sorte warping que tu voulais faire, maintenant je comprends mieux, oublie ce que j'ai dit
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/02/2011, 09h02
  2. [Débutant] coordonnées spatiales des pixels de l'image
    Par imagiste dans le forum Images
    Réponses: 4
    Dernier message: 23/01/2010, 12h43
  3. Sortie des valeurs de type double
    Par otspot dans le forum C++
    Réponses: 2
    Dernier message: 29/06/2008, 20h26
  4. Réponses: 14
    Dernier message: 30/05/2008, 17h04
  5. Réponses: 3
    Dernier message: 26/12/2007, 19h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo