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

Images Discussion :

translation d'image boucle for


Sujet :

Images

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut translation d'image boucle for
    Bonjour,

    j'ai un petit problème je veux translater une image.
    J'ai une image sur un fond et en fait je veux me débarasser du fond.
    Mon image est un rectangle donc j'ai commencé par détecter les points des extrémités et je pensais faire ça pour décaler mon image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=sommethautgauche(2):sommethautdroit(2)
        for j=sommethautgauche(1):sommetbasgauche(1)
            image(i,j)=image(i-sommethautgauche(2)+1,j-sommethautdroit(1)+1);
        end
    end
    Quand je code ça, ça ne marche pas, ça n'a pas l'effet escompté
    Comment je peux faire ?
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Pas besoin de boucle ici si tu considère ton image comme une matrice.

    Si les variables ligne1 et ligne2 correspondent respectivement aux indices de la première et de la dernière ligne de la zone à conserver dans ton image, tu peux directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img([1:(ligne1-1) (ligne2+1):end],:) = [];
    Idem pour les colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img(:,[1:(colonne1-1) (colonne2+1):end]) = [];

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Bien entendu, on peut aussi faire l'opération inverse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img = img(ligne1:ligne2,colonne1:colonne2);

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    coucou,donc en fait pour superposer deux images quasi identiques en niveaux de gris, j'utilise la méthode 'normalized cross correlation' dans les demos de matlab
    comme ça je prends un symbole commun aux deux images et je calcule la position xbegin, xend ybegin....pour les 2images
    en soustrayant les deux Xbegin et y begin je trouve de combien je dois déplacer une de mes images pour qu'elle se superpose parfaitement à l'autre
    pour la déplacer j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    image=[];
    for i=1:(size(imageadéplacer,1)-2)
    for j=1:size(imageadéplacer,2)
    image(i+2,j)=imageadéplacer(i,j);
    end
    end
    Ca marchait quand mes images étaient en noir et blanc mais ça ne marche plus du tout quand je suis en niveau de gris
    Vous savez pourquoi?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    pourrais-tu expliquer plus précisément ton problème qu'avec un simple "ça ne marche plus"??

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    et bien en fait quand j'applique ce code à une image en niveaux de gris et que j'affiche l'image, j'obtiens rien (un rectangle tout blanc) et pas l'image en question.
    je ne comprends pas ce qui foire

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Si ton image contient des niveaux de gris de 0 à 255 et que le type de données est double et que tu l'affiche avec imshow ou image, alors c'est normal, le type double impose que les données soient entre 0 et 1 :
    If your grayscale image is single or double, the default display range is
    [0 1].
    donc si dans ton image, tout tes pixels ont des valeurs supérieures à 1, l'image sera blanche...

    Pour avoir un bon affichage, fait un cast de tes données en uint8 :
    si ce n'est pas ça, donne nous le type de tes données, l'intervalle dans lequel elles varient et la fonction que tu utilise pour l'affichage.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    merci, ça marche comme ça

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Hello Alors voila avec ma boucle for, j'arrive à translater mon image et à enlever le fond, mais j'aimerai maintenant pouvoir la translater avec plus de précision, je m'explique
    j'aimerai bouger mon image de 0.7 vers le haut et de 0.3 vers la droite mais comme ce ne sont pas des entiers je ne sais pas si c'est possible?
    Parce que forcément avec ma boucle for il faut que ce soient des entiers
    thank you

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    pour effectuer une translation avec des facteurs non entier, la seule solution je crois, c'est d'augmenter la résolution de ton image en faisant une interpolation sur ton image. Par exemple si tu doubles le nombre de pixels de ton image, tu pourras faire des translations avec une précision de 0,5 par rapport à ton image de départ.

    Avec matlab, tu peux utiliser la fonction interp2.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    thank you very much
    Je vais essayer ça tout de suite

Discussions similaires

  1. Réponses: 20
    Dernier message: 23/11/2013, 18h53
  2. ouverture d'un groupe d'image boucle for
    Par milka123 dans le forum Images
    Réponses: 2
    Dernier message: 16/01/2013, 18h54
  3. boucle for - affichage image
    Par Delvauxo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/10/2012, 20h33
  4. Nom de fichier image incrémenté dans une boucle for
    Par franck31 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/10/2011, 16h49
  5. [Débutant] Sauvgarde d'images, boucle for
    Par gaelepely dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/06/2009, 10h09

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