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 :

projection d'une image orthogonalement a sa direction


Sujet :

Images

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut projection d'une image orthogonalement a sa direction
    salut tt le monde, voila jaimerai savoir comment on fai pour faire varier la rotation d'une image de trais selon sa direction, c'est à dire si je coupe mon image en blocs pour estimer la direction de chaque bloc, et en suite faire varier cette direction en la ramenant à 90° pour calculer ses coordonnées (x,y), maisq mon probleme comme je susi debutant en MATLAB comment je peu faire changer cette direction??
    jai trouver un code en java sur le forum mais je me suis casser la figure
    si qq1 pourai m'aider a comprendre ce code ou bien sil y a une autre solution plus simple je suis preneur.
    voici le code
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    /**
     * 
     */
    package millie.operator.geometric;
     
    import millie.image.Image;
    import millie.operator.commons.ImageOperator;
     
    /**
     * @author florent
     *
     */
    public class RotationOperator implements ImageOperator {
    	private double degree;
     
    	/**
    	 * @param degree l'angle en degré pour la rotation
    	 */
    	public RotationOperator(double degree) {
    		this.degree = degree;
    	}
     
    	  /**
    	   *réalise une rotation de l'image
    	   *
    	   * @param out l'image de sortie
    	   * @param in l'image d'entrée
    	   *
    	   * @throw IllegalArgumentException si le nombre de composantes de dest et de
    	   *  in ne sont pas égales
    	   *
    	   * A noter que l'image de sortie sera plus grand que celle d'entrée
    	   * afin de tout contenir. Le fond sera rempli par du noir
    	   */
    	@Override
    	public void compute(Image out, Image in) throws Exception {
    		 if(out.getNumComponents() != in.getNumComponents())
    			    throw new IllegalArgumentException("rotationOperator");
     
    			  /* détermine la valeur en radian de l'angle*/
    			  double angle_radian = -degree * Math.PI / 180.0;
     
    			  /*pour éviter pleins d'appel, on stocke les valeurs*/
    			  double tcos = Math.cos(angle_radian);
    			  double tsin = Math.sin(angle_radian);
     
    			  /*calcul de la taille de l'image de destination*/
    			  int largeurdest= (int)  Math.ceil(in.getWidth() * Math.abs(tcos) + in.getHeight()* Math.abs(tsin));
    			  int hauteurdest= (int)  Math.ceil(in.getWidth()* Math.abs(tsin) + in.getHeight() * Math.abs(tcos));
     
    			  /*on redimensionne l'image*/
    			  out.resize(largeurdest, hauteurdest);
     
    			  /*calcul du centre des images*/
    			  int mxdest = out.getWidth()/2;
    			  int mydest = out.getHeight()/2;
    			  int mx = in.getWidth()/2;
    			  int my = in.getHeight()/2;
     
    			  for(int canal=0; canal<in.getNumComponents(); canal++)
    			    for(int j=0;j< out.getHeight();j++)
    			      for(int i=0;i< out.getWidth();i++)
    			      {
    			        /* on détermine la valeur de pixel qui correspond le mieux pour la position
    			         * i,j de la surface de destination */
     
    			        /* on détermine la meilleure position sur la surface d'origine en appliquant
    			         * une matrice de rotation inverse
    			         */
     
    			        int bx = (int) (Math.ceil(tcos * (i-mxdest) + tsin * (j-mydest) + mx));
    			        int by = (int) (Math.ceil (-tsin * (i-mxdest) + tcos * (j-mydest) + my));
    			        /* on vérifie que l'on ne sort pas des bords*/
    			        if (bx>=0 && bx< in.getWidth() && by>=0 && by< in.getHeight())
    			        {
    			          out.setPixel(i,j, canal, in.getPixel(bx, by, canal));
    			        }
    			      }
    	}
     
    }
    merci d'avance.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Ce code ne sert qu'à effectuer une rotation d'une image (sans couper les bords).

    le corps du code est :

    Code java : 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
      /* détermine la valeur en radian de l'angle*/
      double angle_radian = -degree * Math.PI / 180.0;
     
      /*pour éviter pleins d'appel, on stocke les valeurs*/
      double tcos = Math.cos(angle_radian);
      double tsin = Math.sin(angle_radian);
     
      /*calcul de la taille de l'image de destination*/
      int largeurdest= (int)  Math.ceil(in.getWidth() * Math.abs(tcos) + in.getHeight()* Math.abs(tsin));
      int hauteurdest= (int)  Math.ceil(in.getWidth()* Math.abs(tsin) + in.getHeight() * Math.abs(tcos));
     
      /*on redimensionne l'image*/
      out.resize(largeurdest, hauteurdest);
     
      /*calcul du centre des images*/
      int mxdest = out.getWidth()/2;
      int mydest = out.getHeight()/2;
      int mx = in.getWidth()/2;
      int my = in.getHeight()/2;
     
      for(int canal=0; canal<in.getNumComponents(); canal++)
        for(int j=0;j< out.getHeight();j++)
    	  for(int i=0;i< out.getWidth();i++)
    	  {
    		/* on détermine la valeur de pixel qui correspond le mieux pour la position
    		 * i,j de la surface de destination */
     
    					        /* on détermine la meilleure position sur la surface d'origine en appliquant
    		 * une matrice de rotation inverse
    		 */
     
    		int bx = (int) (Math.ceil(tcos * (i-mxdest) + tsin * (j-mydest) + mx));
    		int by = (int) (Math.ceil (-tsin * (i-mxdest) + tcos * (j-mydest) + my));
    		/* on vérifie que l'on ne sort pas des bords*/
    		if (bx>=0 && bx< in.getWidth() && by>=0 && by< in.getHeight())
    		{
    		  out.setPixel(i,j, canal, in.getPixel(bx, by, canal));
    		}
    	  }

    Je ne suis pas sûr que c'est ce que tu souhaites ? Et il doit y avoir une fonction Matlab qui fait des rotations. Je t'avoue ne pas avoir compris ce que tu souhaites
    Je ne répondrai à aucune question technique en privé

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    bonjour, merci millie de m'avoir repondu, voila jaimerai faire des rotations a mon images qui contien des trai d'angle quelconque, je voudrai faire cette rotation pour rendre ces angles verticales a l'axe des (x) pet ensuite faire la projection de ces trai suivant (x) et (y) pour evaluer la distance moyenne entre les trai.
    voila j'espere avoir de laide sur ce travail en programme MATALB.
    si qq1 a une idée je suis prenneur.
    merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Regarde la fonction IMROTATE (si tu as l'Image Processing Toolbox)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci Dut, c ce que je chercher t vraiment géniale chapeau
    encore une drniere chose svp
    comment je fai pour la projection sur les axes (x) et (y) svp, c'est à dire que je vai projeter mes droites sur les axes pour estimer les extremums.
    merci a vous .

Discussions similaires

  1. [m] Envoi d'un email contenant une image qui sera affichée directement à la réception
    Par Contact2012 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 03/06/2009, 13h46
  2. projection de points sur une structure utilisant une image
    Par speedy_g dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 17/09/2007, 10h33
  3. Créer une image et l'intégrer direct avec un echo
    Par Romalafrite dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2007, 13h41
  4. Réponses: 13
    Dernier message: 23/12/2004, 18h01

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