Téléchargé 1 fois
Vote des utilisateurs
0
0
Détails
Licence : Non renseignée
Mise en ligne le 14 avril 2013
Plate-formes :
Linux, Mac, Windows
Langue : Français
Référencé dans
Navigation
Charger et sauvegarder des images 3D
Charger et sauvegarder des images 3D
Voici deux codes MATLAB pour charger et sauvegarder des images 3D
Ces fonctions se basent sur les fonctions imread et imwrite, de la boîte à outils "Image Processing", qu'il vous faudra donc posséder.
La fonction readstack (ou "charge pile") charge un fichier ou une succession de fichiers. La fonction permet d'importer :
La fonction savestack, qui sauve un tableau 3D ou 4D dans une série de fichiers. Pour écrire dans une série de fichier, on passe soit par une chaîne de la forme "img%03d.tif", soit par une succession de caractères "#" ou "?", qui seront remplacés par des chiffres.
Les deux fonctions permettent de travailler avec des images en niveaux de gris (les images sont des tableaux 3D Ny-Nx-Nz), ou des images couleurs (dans ce cas les images sont des tableaux 4D Ny-Nx-3-Nz).
Ces fonctions se basent sur les fonctions imread et imwrite, de la boîte à outils "Image Processing", qu'il vous faudra donc posséder.
La fonction readstack (ou "charge pile") charge un fichier ou une succession de fichiers. La fonction permet d'importer :
- des séries d'images numérotées en ordre croissant (img00.tif, img01.tif...), en général il suffit de donner la première image pour que toute la pile se charge
- des images tif multi-page
- des images stockées en "raw", dans ce cas il faut spécifier le type de données et la taille du résultat
La fonction savestack, qui sauve un tableau 3D ou 4D dans une série de fichiers. Pour écrire dans une série de fichier, on passe soit par une chaîne de la forme "img%03d.tif", soit par une succession de caractères "#" ou "?", qui seront remplacés par des chiffres.
Les deux fonctions permettent de travailler avec des images en niveaux de gris (les images sont des tableaux 3D Ny-Nx-Nz), ou des images couleurs (dans ce cas les images sont des tableaux 4D Ny-Nx-3-Nz).
Quelques remarques...
Les codes que tu présentes ici ne sont pas identiques à ceux présents dans l'archive zip.
Pour readstack :
Ajoute la ligne suivante au tout début de ton code :
TYPE est déjà un nom de fonction MATLAB, change le ici (et par la suite) :
Ligne 115, il y a un FOPEN sans FCLOSE correspondant.
Ensuite :
s'écrit plus proprement :
Le code en commentaire à partir de la ligne 255 ne sert à rien
vu que tu utilises SPRITNF, s'écrit plus logiquement :
devient simplement :
devient
Pour finir, tu devrais récupérer l'extension des fichiers d'entrée avec FILEPARTS pour la passer ensuite dans IMREAD. Ce sera plus rapide.
Pour savestack
Ajoute la ligne suivante au tout début de ton code :
Il faut aussi ajouter un test sur le format d'image demandé en sortie car tous n'ont pas l'argument 'WriteMode' de IMWRITE (gif, tiff et hdf seulement)
s'écrit plus efficacement :
Les codes que tu présentes ici ne sont pas identiques à ceux présents dans l'archive zip.
Pour readstack :
Ajoute la ligne suivante au tout début de ton code :
Code : | Sélectionner tout |
error(nargchk(1,5,nargin)); % Vérifier le 5
Code : | Sélectionner tout |
type = varargin{1};
Ensuite :
Code : | Sélectionner tout |
if length(size(img))==2
Code : | Sélectionner tout |
if ndims(img)==2
Code : | Sélectionner tout |
string = [basename sprintf('%%0%dd', n) endname];
Code : | Sélectionner tout |
string = sprintf('%s%%0%dd%s',basename, n, endname);
Code : | Sélectionner tout |
1 2 3 | len = length(fname); basename = fname(1:index-1); endname = fname(index+n:len); |
Code : | Sélectionner tout |
1 2 | basename = fname(1:index-1); endname = fname(index+n:end); |
Code : | Sélectionner tout |
index = index(length(index));
Code : | Sélectionner tout |
index = index(end);
Pour savestack
Ajoute la ligne suivante au tout début de ton code :
Code : | Sélectionner tout |
error(nargchk(1,4,nargin)); % Vérifier le 4
Code : | Sélectionner tout |
1 2 3 4 5 | pos = strfind(fname, '?'); npos = length(pos); if npos>0 fname = strrep(fname, repmat('?', [1 npos]), ['%0' num2str(npos) 'd']); end |
Code : | Sélectionner tout |
1 2 3 4 5 | pos = strfind(fname, '?'); if ~isempty(pos) npos = length(pos); fname = strrep(fname, repmat('?', [1 npos]), ['%0' num2str(npos) 'd']); end |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.