2013-04-12 4 views
0

J'utilise Matlab. J'ai un histogramme 3d rgb qui stocke le nombre de pixels par valeur (r, g, b). La matrice 3d est extrêmement clairsemée. Existe-t-il un moyen de gérer une matrice 3D éparse dans Matlab? Je serai obligé.Matrices 3D Sparse dans Matlab

+0

Pourriez-vous expliquer ce qui est 'histogramme 3d rgb'? Peut-être, voulez-vous dire histogramme avec une barre par couleur? – tashuhka

+0

L'histogramme RGB comporte des axes rouge, vert et bleu (chacun compris entre 0 et 255) représentés par des axes x, y et z. J'ai une image. Le nombre de pixels pour chaque valeur (r, g, b) est tracé dans l'espace. Pensez-y comme un cube qui contient des points. Mais une grande partie du cube est vide. Je veux savoir s'il existe un moyen de réduire le cube sans perdre de données utiles. – parth

+0

Pourriez-vous inclure votre code? – tashuhka

Répondre

0

Votre question initiale n'était pas très claire, donc je l'ai reformulée pour la rendre plus compréhensible, consultable et utile. Je réponds maintenant à votre question pour l'enlever de la liste sans réponse. Comme on le sait, Matlab ne s'occupe pas directement des matrices 3D. Une solution de contournement utilise des tableaux de cellules de matrices creuses.

Supposons que vous voulez créer une matrice creuse contenant uniquement les éléments (1, 1, 1) et (1, 3, 50) et supposons que A(1, 1, 1) = 1 et A(1, 3, 10) = 54. Vous pouvez effectuer les opérations suivantes:

mySp{1} = sparse(3, 3); 
mySp{10} = sparse(3, 3); 

mySp{1}(1, 1) = 3; 
mySp{10}(1, 3) = 54; 

De cette façon,

>> mySp 

mySp = 

    [3x3 double] [] [] [] [] [] [] [] [] [3x3 double] 

Comme on peut le voir, mySp est un tableau de 10 éléments. Les premier et dixième éléments sont des matrices éparses, tandis que les autres sont vides. La première et la dixième matrices creuses non vides peuvent être récupérés comme

temp1 = mySp{1}; 
temp2 = mySp{10}; 

retour

>> temp1 

temp1 = 

    (1,1)  3 

et

temp2 = 

    (1,3)  54