Bonjour à tous.

Je vous expose ma situation. sur MATLAB, j'ai un ensemble d'images sous forme de matrice 5D (temps, x, y, z, canal) (le canal représente les 3 composantes RGB). Après avoir fait les opérations voulues sur ces images, je souhaite les exporter et j'ai donc choisit le format HDF5. J'ai réussi à exporter un truc mais mes images sont en noir et blanc (les composantes RGB ne sont donc pas prises en compte) et les 5 couches selon z gérèrent en fait 5 bases de données.
Ce que je souhaiterais, c'est avoir une seule base d'images en couleurs et pouvoir naviguer aisément selon l'axe z et selon le temps.
Visiblement, il est préférable d'utiliser les Low-Level Functions que les High-Level Functions. Cependant, je suis grand débutant en exportation au format HDF5 et la documentation MATLAB à ce sujet n'est vraiment pas facile à comprendre. Quelqu'un aurait des conseils/informations sur la marche à suivre svp ? Merci d'avance

EDIT: J'ai fait une tentative avec les High Level Functions. Non seulement mes images sont encore en noir et blanc mais en plus, sur chaque image apparaît l'ensemble de la séquence d'image (sous forme de grille et avec un résolution fortement diminuée. cf capture d'écran en pièce jointe)
EDIT2: Problème d'affichage sous forme de grille résolu. Pour ce que ça intéresse, l'erreur venait de la ligne suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
space_id = H5S.create_simple(5,size(D(:,:,:,1,:)),size(D(:,:,:,1,:)));
Il semblerait que les dimenssions sont à écrire en sens inverse pour écrire un fichier HDF5. J'ai donc utilisé la fonction fliplr:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
space_id = H5S.create_simple(4,fliplr([3 number_of_frame y_lenght x_lenght]),[]);
J'essaie maintenant de m'occuper de l'affichage de la couleur...


Ci dessous, mon code pour avoir un aperçu de ce que je fait. J'ai bien conscience qu'il est loin d'être optimal mais c'est du prototypage.

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
clear all;
close all;
clc;
disp('ETAPE CLEAR: OK')
 
 
number_of_frame = 10;
number_of_slices = 5;
A = cell(1,number_of_frame);
Base = cell(number_of_slices, number_of_frame);
x_lenght = 300;
y_lenght = 300;
scale = 30;
B=zeros(number_of_slices, x_lenght, y_lenght,3);   % B(z,x,y,channel)
D=zeros(3, number_of_slices, number_of_frame, y_lenght, x_lenght);   % D(channel,z,t,y,x)
 
for z=1:number_of_slices    % With cats, z is the slice number 
    image_name{z} = ['chat' num2str(z) '.jpg'];
    for t=1:10
        var_name{z}{t} = imread(char(image_name{z}));
    end
 
    for t = 1:9
        var_name{z}{t+1}(:,1:30*t) = 0;  %ici, on ajoute une bande noire qui évolue au fil du temps
    end
end
 
for t=1:number_of_frame
    A{t} = cell(1);
    for z=1:number_of_slices
    	B(z,:,:,:) = var_name{z}{t}; 
    end
    A{t}{1} = B;   
end
disp('ETAPE 1: OK')
 
%%
for t=1:number_of_frame
    C(:,t,:,:,:) = A{t}{1} ;  %C(z,t,x,y,chan)
end
disp('ETAPE 2: OK')
 
%%
for t=1:number_of_frame
    for z=1:number_of_slices
        for chan=1:3
            D=permute(C, [4 3 2 1 5]); 
        end
    end
end
disp('ETAPE 3: OK')
 
%%
 
fid = H5F.create('myfilewithcats.h5','H5F_ACC_TRUNC','H5P_DEFAULT','H5P_DEFAULT');
space_id = H5S.create_simple(5,size(D(:,:,:,1,:)),size(D(:,:,:,1,:)));
type_id = H5T.copy('H5T_NATIVE_DOUBLE');
%dataset_id = H5D.create(fid, '/mydataset', type_id, space_id,'H5P_DEFAULT','H5P_DEFAULT','H5P_DEFAULT');
 
for z=1:number_of_slices
    datasetname{z} = ['/chat' num2str(z)];
    dataset_id = H5D.create(fid, datasetname{z}, type_id, space_id,'H5P_DEFAULT','H5P_DEFAULT','H5P_DEFAULT');
    dataset = D(:,:,:,z,:);
    H5D.write(dataset_id,'H5ML_DEFAULT','H5S_ALL','H5S_ALL','H5P_DEFAULT',dataset);
    H5D.close(dataset_id);
end
 
 
H5S.close(space_id);
H5F.close(fid);
 
disp('ETAPE 5: OK');
disp('TERMINÉ');