Je suis plutôt nouveau à Matlab, mais j'espérais que quelqu'un puisse aider à cette question. J'ai donc une image couleur que je veux convertir en niveaux de gris puis réduire le nombre de niveaux de gris. Donc, j'ai lu dans l'image et j'ai utilisé rgb2gray () pour convertir l'image en niveaux de gris. Cependant, je ne sais pas comment convertir l'image pour n'utiliser que 32 niveaux gris au lieu de 255 niveaux gris. P>
J'essayais d'utiliser Colormap (gris (32)), mais cela ne semblait avoir aucun effet sur l'image tracée elle-même ou la Colorbar sous l'image. Donc, je ne savais pas où regarder d'autre. Des conseils là-bas? Merci. P>
3 Réponses :
Vérifiez si le type de vos données d'image est uint8 code> que je soupçonne. Si tel est le cas, la division de l'image de 8 pour abuser de l'effet de plancher de la division entière, multipliez à nouveau avec 8, et vous êtes défini:
i2 = (i / 8) * 8 code>.
i2 code> n'aura que 32 niveaux gris. P>
Vous pouvez réduire le nombre de valeurs différentes dans une image par simple arrondi: voir Toutefois, si vous souhaitez réduire la taille de l'image, vous pouvez mieux désactiver un programme de traitement d'image tel que Photoshop, GIMP ou IRFANView et enregistrer sous forme de gif de 32 couleurs. De cette façon, vous réduirez réellement la palette du fichier et je pense que c'est quelque chose que Matlab ne peut pas faire. P> p> IMHISH (i) code> et
IMHIST (J) < / Code> Pour l'effet. P>
Soyez prudent avec rond code>. Vous vous retrouverez avec 33 niveaux de gris si
i code> n'est pas de type entier. Si
i code> est de type entier, vous n'avez besoin d'aucun
rond code>. ;-)
@ S.Bandara: Bon point sur l'arrondissement. Il apparaît également que l'OP pourrait réellement rechercher imwrite code>, en utilisant une carte appropriée, mais je n'ai pas le temps de le comprendre maintenant.
@Junuxx êtes-vous au courant de la gravité de l'image qui en résulte potentiellement avec cette procédure? (J'ai commenté cela sur votre réponse simplement parce qu'il est apparu en haut lorsque j'ai visité cette question, mais cela est également valable pour les autres réponses présentes ici.)
@MMGP: Que recommandes-tu? Faire une égalisation d'histogramme en premier?
@Junuxx Une méthode appelée quantification de niveaux de gris améliorée offre généralement de meilleurs résultats, je pourrais inclure une réponse en l'utilisant.
tandis que par exemple, considérez la figure suivante et les quantivisations respectives avec p> Maintenant les mêmes images mais quantifiées en faisant p> Ce n'est pas un exemple pathologique. P> P> résultat = (img / 8) * 8 code> convertit une image en niveaux de gris dans la plage [0, 255] sur un sous-ensemble de cette plage, mais en utilisant seulement 32 valeurs, cela pourrait créer indésirable artefacts. Une méthode qui produit éventuellement des images visuellement meilleures est appelée quantification de niveau grisalcale améliorée (abrégée en tant qu'INGS). Le pseudo-code pour l'exécution peut être donné comme suit:
bits = 5 code>,
bits = 4 code> et
bits = 3 code> à l'aide de la méthode ci-dessus: p>
(IMG / (256 / (2 ^ bits))) * (256 / (2 ^ bits)) code>: P >
Vous ne voulez vraiment pas le quantifier davantage en cueillant simplement les niveaux d'intervalles de 8 couleurs. Envisagez d'utiliser la méthode de quantification en niveaux de gris amélioré.