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

Traitement d'images Discussion :

Algorithme déformation d'image


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Points : 40
    Points
    40
    Par défaut Algorithme déformation d'image
    Salut tout le monde,

    Voila mon problème.



    Tous les codes C++ que l'on peut trouver sont en openGL et utilise la "technique " des surface de bézier. Mais j'aimerais coder cette technique en C++ sans utiliser openGL.


    Donc je voudrais reproduire cela en C++ (algo ou code ).

    Merci

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Je ne connais pas assez les algos utilisés dans openGL pour répondre. Est-ce une déformation basée sur une grille ? Auquel cas c'est "assez" simple de comprendre le principe.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Points : 40
    Points
    40
    Par défaut
    Qu'est ce que tu appelle "déformation basée sur une grille" ??

  4. #4
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Je pense plutôt à des carreaux de Béziers, des splines ou des trucs dans le genre.

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par ArkAng3 Voir le message
    Qu'est ce que tu appelle "déformation basée sur une grille" ??
    Quelque chose comme cela. On crée une grille 2D régulière et on déplace chaque noeud de la grille (dans ton exemple suivant des courbes de bezier). Les pixels contenus dans chaque case initiale sont projeté dans la nouvelle "case" suivant une interpolation (bilinéaire ou autre).

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Points : 40
    Points
    40
    Par défaut
    ok
    Est ce qui serait possible d'avoir pseudo algo, pour pouvoir codé ca apr la suite??

    merci

  7. #7
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    bezier). Les pixels contenus dans chaque case initiale sont projeté dans la nouvelle "case" suivant une interpolation (bilinéaire ou autre).
    Excusez mon intrusion ; il y a un aspect que je n'arrive pas à cerner concernant l'interpolation lors d'une transformation géométrique d'une Image.
    En supposant que :
    - input est l'image à transformer.
    - T est la transformation à appliquer.
    - output est l'image résultante de l'application de la transformation T sur l'image input.

    Chaque pixel (x,y) de input sera projeté dans une nouvelle position (x',y') = T (x,y) dans output.
    L'intensité du pixel (x',y') est logiquement égal à celle de (x,y)?, cependant le pixels (x',y') à des coordonnées réelles (dus à l'application de la transformation),je ne comprend pas comment alors calculer output ?

  8. #8
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Salut,

    en fait c'est l'inverse : on part du pixel en coordonnées entières de l'image de destination pour calculer le pixel en coordonnées réelles de l'image source.

    Ensuite pour récupérer le niveau de gris associé à ce pixel en coordonnées réelles de l'image source tu as plusieurs méthodes :

    • niveau de gris du plus proche voisin
    • interpolation bilinéaire via les 4 pixels les plus proches
    • interpolation bicubique ...
    • etc


    Flo.

  9. #9
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    en fait c'est l'inverse : on part du pixel en coordonnées entières de l'image de destination pour calculer le pixel en coordonnées réelles de l'image source.
    Merci Flo pour ces précisions.
    C'est ce que j'avais pensé au départ, cependant il faudrait dans ce cas connaitre la transformation inverse de T, afin de faire un mapping entre l'image destination et l'image source?

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Merci Flo pour ces précisions.
    C'est ce que j'avais pensé au départ, cependant il faudrait dans ce cas connaitre la transformation inverse de T, afin de faire un mapping entre l'image destination et l'image source?
    Tout a fait. C'est pour cela qu'on aime beaucoup les transformations linéaires en infographie : c'est facile à inverser.

  11. #11
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Tout a fait. C'est pour cela qu'on aime beaucoup les transformations linéaires en infographie : c'est facile à inverser.
    J'utilise actuellement Elastix c'est un outil de recalage rigide et non-rigide d'images.
    En donnant en entrée deux image (fixe et mobile), elastix fourni un ensemble de paramètres qui correspond à la "meilleur" transformation (selon le critère de similarité choisi) permettant l'alignement des images en entrée.

    Dans le cas d'un recalage rigide(transformation affine) elastix fourni 6 paramètres représentant les éléments de la matrice de transformation affine.


    Dans le cas d'un recalage non-rigide, elastix fourni un nombre très important de paramètre représentant les paramètres bspline de la grille.

    Je voudrai donc exploiter ces résultats, afin d'appliquer la transformation obtenue sur l'image mobile. Cependant je ne vois pas comment je pourrait calculer la transformation inverse dans les deux cas (rigide et non-rigide)

  12. #12
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Salut,

    je ne connais pas l'outil dont tu parles.

    Cependant, dans le cas de ton recalage rigide, s'il s'agit d'une du produit d'un matrice carrée par un vecteur source, alors tu peux calculer la matrice inverse afin d'obtenir le vecteur source à partir du vecteur destination.

    Dans le cas non rigide, si tu utilises des bsplines, il doit y avoir moyen de calculer une transformation inverse à partir de la définition matricielle des bsplines. Les bsplines sont des outils facilement manipulables tu devrais arriver à faire quelque chose.

    Avec plus d'informations on pourrait peut-être plus facilement t'aider.

    Flo.

  13. #13
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Citation Envoyé par Flo. Voir le message
    Salut,

    je ne connais pas l'outil dont tu parles.

    Cependant, dans le cas de ton recalage rigide, s'il s'agit d'une du produit d'un matrice carrée par un vecteur source, alors tu peux calculer la matrice inverse afin d'obtenir le vecteur source à partir du vecteur destination.

    Dans le cas non rigide, si tu utilises des bsplines, il doit y avoir moyen de calculer une transformation inverse à partir de la définition matricielle des bsplines. Les bsplines sont des outils facilement manipulables tu devrais arriver à faire quelque chose.

    Avec plus d'informations on pourrait peut-être plus facilement t'aider.

    Flo.
    Merci Flo. Mon problème étant un peu différent du problème traité sur ce sujet, je pense qu'il serait préférable d'en créer un nouveau.

Discussions similaires

  1. Déformation d'image : cartésien -> polaire
    Par jyjeanphi dans le forum Images
    Réponses: 11
    Dernier message: 09/04/2008, 16h18
  2. Algorithme lecture d'image au format SVG
    Par soft0613 dans le forum 2D
    Réponses: 2
    Dernier message: 15/02/2008, 17h39
  3. Outil graphique de déformation d'images
    Par SpaceFrog dans le forum Imagerie
    Réponses: 2
    Dernier message: 21/01/2007, 18h24
  4. Algorithme contraste d'image
    Par uranium-design dans le forum Traitement d'images
    Réponses: 17
    Dernier message: 23/10/2006, 16h43
  5. Algorithme pour rotation image en C
    Par guigui01 dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 22/04/2006, 14h41

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