
Envoyé par
superfunk
Un petit point aussi : quand la résolution d'une image est donnée comme 320*240, il me semble que l'on aura une matrice 240 lignes, 320 colonnes (dans mon cas, j'ai affiché les valeurs cols et rows pour être sur).
J'ai toujours vu et utilisé l'inverse... mais bon il suffit juste de savoir de quoi on parle quand on est en train de manipuler l'image 
Sinon pour ton problème... la fonction FREAD fonctionne ainsi :
Pour lire 50 données codées en uint16 et les stocker dans un vecteur 50x1 :
X = fread(fid,50,'uint16');
Pour lire 50 données codées en uint16 et les stocker dans un vecteur 1x50 :
X = fread(fid,[1,50],'uint16');
Pour lire 50 données codées en uint16 et les stocker dans un tableau 5x10 :
X = fread(fid,[5,10],'uint16');
Il arrive généralement que lorsqu'on lit des données par paquets, pmar exemple ici par paquets de 5, on ne sache pas le nombre de paquet à lire. On ne peut donc pas déterminer à l'avance la seconde dimension du tableau X. On fait donc :
X = fread(fid,[5,inf],'uint16');
Et on obtient bien un tableau avec 5 lignes et un nombre de colonne fixé par le nombre d'élément lu. Et donc si au final on désirait non pas 5 lignes mais 5 colonnes, il faut transposer le résultat de la lecture :
X = fread(fid,[5,inf],'uint16').';
Donc pour revenir à ton problème, si l'image contient 320 lignes et 240 colonnes et que les données sont stockées colonne par colonne, soit par paquet de 320 données :
X = fread(fid,[320,240],'uint16');
Si l'image contient 320 lignes et 240 colonnes et que les données sont stockées ligne par ligne, soit par paquet de 240 données :
X = fread(fid,[240,320],'uint16').';
Encore une dernière chose, si tu procèdes comme ceci, la classe du tableau X sera Double (soit 64bits) alors que les données de départ sont en uint16 (soit 16bits).
Si tu veux conserver la classe d'origine :
X = fread(fif,[...],'uint16=>uint16');
ou
X = fread(fif,[...],'*uint16');
Voila j'espère que je ne suis pas trompé dans mes explications
Partager