2009-12-13 4 views
2

Je suis particulièrement coincé dans ce casComment puis-je écrire une image dans un fichier

I = imread('liftingbody.png'); 
S = qtdecomp(I,.27); 
blocks = repmat(uint8(0),size(S)); 
for dim = [512 256 128 64 32 16 8 4 2 1]; 
    numblocks = length(find(S==dim)); 
    if (numblocks > 0) 
     values = repmat(uint8(1),[dim dim numblocks]); 
     values(2:dim,2:dim,:) = 0; 
     blocks = qtsetblk(blocks,S,dim,values); 
    end 
end 
blocks(end,1:end) = 1; 
blocks(1:end,end) = 1; 
imshow(I), figure, imshow(blocks,[]) 

(L'exemple ci-dessus est de l'aide Matlab)

Si je tente d'écrire l'image-à-dire des blocs en utilisant imwrite(blocks) alors l'image entière semble être noire. Cela arrive pour toutes les images d'entrée. Mais je veux écrire exactement la sortie qu'imshow montre ici. Quelqu'un peut-il aider?

Répondre

7

Vous avez créé des blocs en tant que matrice uint8. Par convention, MATLAB et Image Processing Toolbox traitent une échelle de gris uint8 comme ayant une plage de valeurs allant de 0 à 255. Autrement dit, 0 est noir et 255 est blanc. Ainsi, votre matrice de blocs, qui ne contient que des 0 et des 1, sera normalement affichée en noir et presque en noir.

Lorsque vous avez affiché des blocs en utilisant:

imshow(blocks,[]) 

Vous avez utilisé le « sélection automatique » syntaxe de imshow, qui affiche la valeur minimale des blocs en noir et la valeur maximale des blocs en blanc. Mais ensuite, lorsque vous avez sauvegardé des blocs en utilisant imwrite, l'hypothèse normale de 0 est noire et 255 de blanc.

Essayez d'initialiser des blocs comme une matrice logique au lieu, comme ceci:

blocks = logical(size(S)); 

Matlab et Image Processing Toolbox traitent une matrice logique comme une image binaire et affichera 0 en noir et 1 et blanc. Si vous passez une matrice logique à imwrite, cela créera un fichier image binaire de 1 bit de profondeur.

0

une réponse générique est de normaliser l'image pour être dans la gamme pour imwrite(blocks):

imwrite((blocks-min(blocks))/(max(blocks)-min(blocks))) 
Questions connexes