modifier le nombre de niveaux de gris dans une image en niveaux de gris dans matlab
Je suis plutôt nouvelle pour matlab, mais j'espérais que quelqu'un pouvait m'aider avec cette question. Donc, j'ai une couleur de l'image que je veux convertir en niveaux de gris puis de réduire le nombre de niveaux de gris. J'ai donc lu dans l'image et j'ai utilisé rgb2gray() pour convertir l'image en niveaux de gris. Cependant, je ne suis pas sûr de la façon de convertir l'image à utiliser seulement 32 niveaux de gris au lieu de 255 niveaux de gris.
J'ai essayé d'utiliser colormap(gray(32)), mais cela ne semble avoir aucun effet sur le tracé de l'image elle-même ou la barre de couleur sous l'image. Donc je n'étais pas sûr de l'endroit où d'autre à regarder. Des conseils là-bas? Merci.
OriginalL'auteur krishnab | 2013-01-21
Vous devez vous connecter pour publier un commentaire.
Tout
result = (img/8)*8
ne convertir une image en niveaux de gris dans l'intervalle [0, 255] à un sous-ensemble de cette gamme mais maintenant, à l'aide de seulement 32 valeurs, il peut créer des artefacts indésirables. Une méthode qui, éventuellement, produit mieux visuellement des images est appelé à l'Amélioration des niveaux de Gris de Quantification (en abrégé IGS). Le pseudo-code pour l'exécution peut être donnée sous la forme:Par exemple, considérons la figure suivante et les quantifications avec
bits = 5
,bits = 4
, etbits = 3
à l'aide de la méthode ci-dessus:Maintenant, les mêmes images, mais quantifiée en faisant
(img/(256/(2^bits)))*(256/(2^bits))
:Ce n'est pas pathologique exemple.
OriginalL'auteur mmgp
Vous pouvez réduire le nombre de valeurs différentes dans une image par un simple arrondi:
Voir
imhist(I)
etimhist(J)
pour l'effet.Cependant, si vous souhaitez réduire la taille de l'image, vous feriez mieux d'utiliser un programme de traitement d'image comme Photoshop, Gimp ou IrfanView et enregistrer en tant que de 32 couleurs gif. De cette façon, vous aurez fait réduire le fichier de la palette, et je pense que c'est quelque chose de Matlab ne peut pas faire.
round
. Vous allez vous retrouver avec 33 niveaux de gris siI
n'est pas de type entier. SiI
est de type entier, vous n'avez pas besoin de toutround
. 😉Bon point sur l'arrondissement. Aussi, il apparaît que l'OP peut-être à la recherche pour
imwrite
, à l'aide d'une bonne carte, mais je n'ai pas le temps d'y réfléchir maintenant.êtes-vous conscient de la gravité de l'image résultante sera potentiellement look avec cette procédure ? (J'ai commenté ce votre réponse à la question tout simplement parce qu'il est apparu au début quand j'ai visité cette question, mais c'est également valable pour les autres réponses ici présents.)
Que recommandez-vous? Faire une égalisation d'histogramme en premier?
une méthode d'amélioration de la quantification des niveaux de gris couramment fournit de meilleurs résultats, je pourrais inclure une réponse de l'utiliser.
OriginalL'auteur Junuxx
Vérifier si le type de données d'image est
uint8
qui, je le soupçonne. Si c'est le cas de la division de l'image en 8 à abuser du revêtement de sol effet de la division entière, multipliez par 8 encore une fois, et vous êtes fixés:I2=(I/8)*8
.I2
aura que 32 niveaux de gris.OriginalL'auteur s.bandara