6
votes

Changer le nombre de niveaux gris dans une image en niveaux de gris dans matlab

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.

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.


1 commentaires

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é.


3 Réponses :


0
votes

Vérifiez si le type de vos données d'image est uint8 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 . i2 n'aura que 32 niveaux gris.


0 commentaires

2
votes

Vous pouvez réduire le nombre de valeurs différentes dans une image par simple arrondi: xxx

voir IMHISH (i) et IMHIST (J) < / Code> Pour l'effet.

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.


5 commentaires

Soyez prudent avec rond . Vous vous retrouverez avec 33 niveaux de gris si i n'est pas de type entier. Si i est de type entier, vous n'avez besoin d'aucun rond . ;-)


@ S.Bandara: Bon point sur l'arrondissement. Il apparaît également que l'OP pourrait réellement rechercher imwrite , 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.



3
votes

tandis que résultat = (img / 8) * 8 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: xxx

par exemple, considérez la figure suivante et les quantivisations respectives avec bits = 5 , bits = 4 et bits = 3 à l'aide de la méthode ci-dessus:

 Entrez la description de l'image ici  Entrez la description de l'image ici  Entrez la description de l'image ici  Entrez la description de l'image ici

Maintenant les mêmes images mais quantifiées en faisant (IMG / (256 / (2 ^ bits))) * (256 / (2 ^ bits)) :

Entrez la description de l'image ici  Entrez la description de l'image ici  Entrez la description de l'image ici  Entrez imag e Description ici

Ce n'est pas un exemple pathologique.


0 commentaires