 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
PdB
Inscrit le: 04 Nov 2008 Messages: 5
|
Posté le: 05 Nov 2008 14:07 Sujet du message: représenter des valeurs de gris sur un damier |
|
|
Bonjour, j'ai deux problèmes connexes:
1. A partir d'une matrice Mij de valeurs numériques entre 0 et 256, la représenter en nuances de gris sur un damier i x j (en fait c'est pour représenter des caractères pour une application d'OCR). J'ai fait quelques essais avec densityplot(), sans succès jusqu'à présent.
2. Lire des fichiers bmp en nuances de gris (encore des caractères, en 28 x 28 par exemple) et les représenter: est-ce que preview() (avec scale() pour grossir l'affichage) est le bon choix ?
Merci d'éclairer le néophyte que je suis. C'est, comme toujours hélas, pour hier... ) |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 06 Nov 2008 12:37 Sujet du message: |
|
|
Bonjour, pour la première question il faut bien utiliser densityplot. Je propose l'ex suivant sur une matrice 10x10 aléatoire triangulaire inférieure:
Code: |
> with(LinearAlgebra);
> M := RandomMatrix(10, 10, generator = 0 .. 256, outputoptions = [shape = triangular[lower]]);
> with(plots);
>densityplot( (x, y) -> M[x, y] , 1 .. 10, 1 .. 10, grid = [11, 11]);
|
Pour la seconde question, je pense que ce sont ces bons outils du package imageTools que vous utiliserez.
A bientôt. |
|
Revenir en haut de page |
|
 |
PdB
Inscrit le: 04 Nov 2008 Messages: 5
|
Posté le: 06 Nov 2008 13:06 Sujet du message: |
|
|
Merci, mais ce code ne donne pas le résultat escompté, car le gradient de gris varie au sein d'une même case du damier. J'ignore s'il y a une option de densityplot() pour rectifier ce comportement, ou si ce comportement lui est intrinsèque.
J'obtiens des résultats avec listdensityplot(), il faut que j'affine... |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 06 Nov 2008 16:55 Sujet du message: Re: représenter des valeurs de gris sur un damier |
|
|
Oui effectivement, le code suivant semble fonctionner selon vos souhaits:
Code: |
> with(LinearAlgebra):
> M := RandomMatrix(10, 10, generator = 0 .. 256, outputoptions = [shape = triangular[lower]]);
> with(plots):
> pts:=[seq([seq(M[x,y],y=1..10)],x=1..10)];
> listdensityplot(pts);
|
|
|
Revenir en haut de page |
|
 |
PdB
Inscrit le: 04 Nov 2008 Messages: 5
|
Posté le: 06 Nov 2008 22:47 Sujet du message: |
|
|
On peut même écrire plus simplement:
> listdensityplot(M, range = 0 .. 255, axes = none);
Mais dans les deux cas, l'image est basculée sur la gauche car l'origine des graphiques (0,0) est le coin inférieur gauche. Et :
> listdensityplot(Transpose(M), range = 0 .. 255, axes = none);
affiche l'image renversée... Je n'arrive pas à m'en sortir avec CircularShift() non plus. Y a-t-il un moyen élégant d'obtenir le miroir d'une matrice pour redresser l'image ? A moins de modifier le point d'origine des graphes ? (j'aime moins).
Merci |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 07 Nov 2008 12:03 Sujet du message: |
|
|
Bonjour, je veux bien vous aider en écrivant une procédure miroir(M::matrix) si vous me dites clairement sur un exemple de matrice M en petite dimension la forme de la matrice miroir(M) que vous voulez obtenir.
ALS |
|
Revenir en haut de page |
|
 |
PdB
Inscrit le: 04 Nov 2008 Messages: 5
|
Posté le: 07 Nov 2008 13:45 Sujet du message: |
|
|
C'est très simple:
a b c d
e f g h
i j k l
m n o p
deviendrait:
m n o p
i j k l
e f g h
a b c d
On peut bien sûr recopier les élèments dans l'ordre souhaité dans une autre matrice; simplement, je me demande s'il n'y a pas d'opérateurs sous Maple qui font cela sans avoir besoin de créer une autre matrice. |
|
Revenir en haut de page |
|
 |
PdB
Inscrit le: 04 Nov 2008 Messages: 5
|
Posté le: 07 Nov 2008 16:18 Sujet du message: |
|
|
Ouf, j'ai réussi à redresser le graphique de la matrice en modifiant votre code en:
> pts := [seq([seq(M[6-y, x], y = 1 .. 5)], x = 1 .. 5)]
> listdensityplot(pts)
Mais si vous avez mieux (par ex en transformant la matrice elle-même plutôt qu'en utilisant une séquence), je suis preneur !
Merci en tout cas de votre aide. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 08 Nov 2008 9:57 Sujet du message: |
|
|
Voici une procédure qui devrait faire le nécessaire:
Code: |
> M:=matrix([[a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p]]);
[a b c d]
[ ]
[e f g h]
M := [ ]
[i j k l]
[ ]
[m n o p]
> miroir:=proc(M::matrix)
> local L,k,s;
> L:=convert(M,listlist):
> s:=NULL:
> for k in L do
> s:=k,s
> end do:
> matrix([s])
> end proc:
> miroir(M);
[m n o p]
[ ]
[i j k l]
[ ]
[e f g h]
[ ]
[a b c d]
|
Si ça peut vous convenir... |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|