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

Algorithmes et structures de données Discussion :

Rotation d'image (matrice)


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Rotation d'image (matrice)
    Bonsoir,

    Voila, je suis sur un project de modification d'image, le but est de charger dans un tableau 2 dimensions les différent niveaux de gris d'une image .RAW (format binnaire) de dimension 128 pixel sur 128

    bref, pour finir j'obtient un tableau de 128x128 contenant les différents nivaux de gris

    j'ai donc concocté un ptit algo faissant la rotation du tableau d'un angle donné

    le voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    debut procedure en entree le X le Y et l ANGLE DE ROTATION en sortie XPRIME et YPRIME
          -- Il faut faire une rotation depuis le CENTRE de l image
          -- si non l image va hors du cadre...
          -- Il faut changer les coordonees
     
          -- Centre de la Matrice
          XCentre  = (Dim-(Dim-(Dim-1))+2)/2;
     
          YCentre  : (Dim-(Dim-(Dim-1))+2)/2;
     
          XRot     = X - XCentre;
          YRot     = Y - YCentre;
     
     
     
     
          -- Pour signaler si un point est HORS de la matrice
          ToutEstOk = True;
     
          -- La formule pour trouve les coordonne de la rotation.
          -- Ici on fait la matrice inverse (=> inverse de l angle alpha)
          -- Pour eviter les petits points blancs!!!!!
          XPrime = cos(Radian) * XRot - sin(Radian) * YRot + XCentre;
     
          YPrime = Sin(Radian) * XRot + Cos(Radian) * YRot + YCentre;
     
    je Test si le point appartien a l image Si oui j en vois les resulat si non rien..
       fin Procedure
     
    et j'appele cette procedure comme ceci
     
    pour I de 1 a Dim faire
    	Pour J de 1 a DIm faire
     
    		AppeleProcRotation(I,J,-30,XPRIME,YPRIME);
    		TabResultat(I,J) = Image(XPRIME,YPRIME);
    	fin 
    fin

    DOnc avec cette methode quand je fait la rotation l image final ne sera pas bombarder de point blanc (car je fait la matrice inverse (moin l'angle)....)

    mais le probleme c'est par example si je fait une rotation de 45° avec ma méthode les coin de l'image seron coupé..., car apres la rotation l'image devrai etre plus grande

    mais si j'agrandit le TabResltat le programme plante, car les tab ne sont plus de la meme taille...

    Quelqu'un saurait comment regler ce probleme?

    d'avance merci[/code]

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    1- "agrandir" de sqrt(2) les cotés du tableau resultant (si c'est un carré) afin de pouvoir accepter sur X et Y la diagonale. Si l'original n'est pas carré, prendre une zône resultat carrée de coté la diagonale de l'originale.
    eventuellement agrandir de 2 pour assurer la totalité de l'image tournée ( du aux arrondis qui vont necessairemment arriver
    2- tourner autour du centre du carré
    3- prendre les pixels i,j du tableau de resultat tourner de -Theta autour du centre du carré pour trouver i', j'.
    4- SI i',j' est dans le tableau original,alors mettre Pixel(i,j,resultat) = pixel(i',j',original) si non mettre une couleur de fond à définir car autel cas le point (i,j) n'a pas d'antécédant dans l'original.
    5- En fait le calcul de i', j' donne des réels non entiers à prioris. => prendre le point le plus proche ou une pondération des couleurs en fonction des distances. On peut aussi prendre les pixels où le gradient d'intensité est le + grand si on ne veut pas "casser" des lignes et ou frontières

Discussions similaires

  1. rotation d'images
    Par philippe du web dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/05/2007, 16h01
  2. Rotation d'image dans un état
    Par Papapetch dans le forum IHM
    Réponses: 3
    Dernier message: 10/06/2006, 18h02
  3. Faire une rotation d'image
    Par sozie9372 dans le forum 2D
    Réponses: 6
    Dernier message: 30/11/2005, 22h40
  4. [Image]Rotation d'image
    Par psychomatt dans le forum 2D
    Réponses: 6
    Dernier message: 16/12/2004, 20h18
  5. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44

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