# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Image indexe et quantification

## lisco

Bonjour,
Y a des confusions dans ma tte: est ce quelqu'un peut m'expliquer c'est quoi la difference entre une image indexe et une image en niveau de gris??
Ma deuxieme question est :est ce possible d'avoir une image avec des valeurs floats??si ou est ce qu'on doit quantifier cette image avant de l'afficher??

----------


## pseudocode

> Bonjour,
> Y a des confusions dans ma tte: est ce quelqu'un peut m'expliquer c'est quoi la difference entre une image indexe et une image en niveau de gris??


index : le valeur du pixel est un "numero" de couleur (=un index). Pour connaitre la couleur correspondante, il faut aller voir l'entre correspondant a ce numero dans la palette.

niveau de gris: le valeur du pixel est une intensit lumineuse. En 8 bits, 0=noir ... 255=blanc.




> Ma deuxieme question est :est ce possible d'avoir une image avec des valeurs floats??si ou est ce qu'on doit quantifier cette image avant de l'afficher??


Les modeles de couleurs pour les images "affichables" utilisent gnralement des entiers (n bits par composante). Donc tu devras surement faire la conversion float->entier avant de l'afficher.

----------


## lisco

> index : le valeur du pixel est un "numero" de couleur (=un index). Pour connaitre la couleur correspondante, il faut aller voir l'entre correspondant a ce numero dans la palette.



Donc si j'ai bien compris une image indexe est une image en couleur?




> niveau de gris: le valeur du pixel est une intensit lumineuse. En 8 bits, 0=noir ... 255=blanc..


Mais j'ai une image en float cod sur 32 bits, l donc 0=noir .....2^32 = blanc??






> Les modeles de couleurs pour les images "affichables" utilisent gnralement des entiers (n bits par composante). Donc tu devras surement faire la conversion float->entier avant de l'afficher.


Et je voudrais afficher cette image en Qt mais l'affichage est en couleur,bizarre alors que l'image est en niveau de gris!!

Et juste si tu peux m'expliquer qu'est ce que tu entends par les modles de couleurs afichables???

Merci d'avance.

----------


## pseudocode

> Donc si j'ai bien compris une image indexe est une image en couleur?


Ca depend de la palette. Si la palette ne contient que des nuances de gris, on ne peux pas vraiement dire que ca soit une image en couleur.  ::D: 




> Mais j'ai une image en float cod sur 32 bits, l donc 0=noir .....2^32 = blanc??


"float" 32 bits ?  ::koi:: 

C'est quoi le format du fichier image (extension, info, ...).




> Et juste si tu peux m'expliquer qu'est ce que tu entends par les modles de couleurs afichables???


Ce sont les modles que supporte ta librairie graphique, gnralement il y a au moins:
- niveau de gris: 8 bits (=256 valeurs de gris)
- couleur indexe: 8 bits (=256 entres dans la palette)
- couleur RGB: 24 bits (=8 bits par composante rouge, verte et bleue)

----------


## lisco

> "float" 32 bits ? 
> 
> C'est quoi le format du fichier image (extension, info, ...).


En fait je voulais dire que chaque pixel est cod sur 32 bits et le fichier est de format fxd.

Donc si j'ai bien compris le type des pixels c'est a dire qu'il soient des int ou float ou long n'ont rien a voir avec le nombre de bits qu'ils occupent en mmoire???

----------


## pseudocode

> Donc si j'ai bien compris le type des pixels c'est a dire qu'il soient des int ou float ou long n'ont rien a voir avec le nombre de bits qu'ils occupent en mmoire???


Si. La valeur d'un pixel peut etre cod sur 8,16,32,... bits. C'est la manire d'interprter ces bits qui change suivant le format de l'image.

une valeur de pixel code sur 32 bits c'est gnralement:
- un niveau de gris = un entier (long) entre 0 et 2^32 reprsentant l'intensit
ou
- une couleur = 4 entiers (byte) entre 0 et 256 pour chaque composante: alpha, rouge, vert, bleu.

----------


## lisco

> Si. La valeur d'un pixel peut etre cod sur 8,16,32,... bits. C'est la manire d'interprter ces bits qui change suivant le format de l'image.
> 
> une valeur de pixel code sur 32 bits c'est gnralement:
> - un niveau de gris = un entier (long) entre 0 et 2^32 reprsentant l'intensit
> ou
> - une couleur = 4 entiers (byte) entre 0 et 256 pour chaque composante: alpha, rouge, vert, bleu.


Donc en rsum , les pixels de mon image cods sur 32 bits prennent les valeurs entre 0 et 2^32!!Je comprends pas pourquoi tu tait tonn quand j'ai dit une image en float?? car les pixels peuvent bien avoir des valeurs entires comprises entre 0 et 2^32??

Une autre question si vraiment a existe une image en float serait cod sur combien de bits??
Merci d'avance.

----------


## pseudocode

> Je comprends pas pourquoi tu tait tonn quand j'ai dit une image en float?? car les pixels peuvent bien avoir des valeurs entires comprises entre 0 et 2^32??


C'est assez rare de stocker des valeurs non entires pour un format d'image.

J'ai du mal a voir l'utilit de stocker des valeurs allant de 10^-38  10^38 avec un pas non constant. C'est de la mega super haute definition.  ::D: 




> Une autre question si vraiment a existe une image en float serait cod sur combien de bits??


habituellement 32 bits (en reprsentation IEEE).

----------


## lisco

Ok , je commence  voir un peu plus clair.Mais ya encore des confusions qui restent dans ma tte et je compte les enlever tous: ::D: 
Le problme est que je vois pas trop la liaison entre la valeur d'un pixel et le nombre de bits sur lequel il est cod??
Ce que j'ai compris c'est que chaque pixel a une valeur precise qui est compris entre 0 et 255!!
et que chaque valeur occupe un certain nombre d'octet en memoire suivant le processeur de la machine!!ou cela depend tu type de declaration des pixels? ::(:

----------


## pseudocode

> Le problme est que je vois pas trop la liaison entre la valeur d'un pixel et le nombre de bits sur lequel il est cod?? Ce que j'ai compris c'est que chaque pixel a une valeur precise qui est compris entre 0 et 255!! et que chaque valeur occupe un certain nombre d'octet en memoire suivant le processeur de la machine!!ou cela depend tu type de declaration des pixels?


1. Valeur d'un pixel dans l'image relle : une infinit


2. Valeur d'un pixel dans le fichier image (dpend du format du fichier) : 

- mode index: N valeurs diffrentes dcrites dans une palette (habituellement: N=2, 16 ou 256)

- mode non-index: N bits par pixels (habituellement: N = 24 ou 32)


3.Valeur d'un pixel affichable : X bits par pixels (dpend des possibilits de la couche graphique: 16, 24 ou 32)

----------


## lisco

Merci pseudocode pour toutes ces precisions.
Mais comment je peux savoir le format de mon fichier c'est a dire savoir si le fichier image a un mode index ou non.
Et aussi c'est quoi un pixel affichable car pour moi tous les images sont affichables et ya pas de differences entre une image reelle et une image dans un fichier on peut tous les affciher?? ::(:

----------


## pseudocode

> Merci pseudocode pour toutes ces precisions.
> Mais comment je peux savoir le format de mon fichier c'est a dire savoir si le fichier image a un mode index ou non.


Ca dpend uniquement du format du fichier. Il faut lire la specification du format que tu utilises (en esperant que la specification existe et soit publique).




> Et aussi c'est quoi un pixel affichable car pour moi tous les images sont affichables et ya pas de differences entre une image reelle et une image dans un fichier on peut tous les affciher??


Bah, c'est assez dur d'afficher une image en 16 millions de couleur sur un cran noir et blanc, ou en mode vga 256 couleurs.

----------


## lisco

Ok, c'est compris merci!

Pour mon image cod sur 32 bits, dans la specification ya niveau max du signal = 1 et niveau min du signal = 0,???assez bizarre bien que c'est une image en niveau de gris normalement niveau max c'est 2^32?

----------


## pseudocode

> Ok, c'est compris merci!
> 
> Pour mon image cod sur 32 bits, dans la specification ya niveau max du signal = 1 et niveau min du signal = 0,???assez bizarre bien que c'est une image en niveau de gris normalement niveau max c'est 2^32?


Ils ont sans doute multipli la valeur de dpart dans [0,1] par 2^32 et pris l'entier le plus proche. Pour retrouver la valeur de dpart, essaye de diviser ton entier par (2^32).

----------


## lisco

Bonjour, j'ai une image unsigned short c'est a dire cod sur 16 bits: chaque pixel est cod sur 16 bits est-ce  partir de l je peux dduire que mes pixels sont dans l'espace 0  2^16?? et que aussi a doit etre des entiers? Et aussi quelle est l'importance de dire que l'image est de type unsigned char , unsigned short ou unsigned int ???a sert a quoi exactement?? ::(: 
Merci d'avance

----------


## pseudocode

> Bonjour, j'ai une image unsigned short c'est a dire cod sur 16 bits: chaque pixel est cod sur 16 bits est-ce  partir de l je peux dduire que mes pixels sont dans l'espace 0  2^16??


Non, on ne peut pas le "dduire". C'est pour cela qu'on crit des specs pour dcrire les formats de fichiers.  ::D:

----------


## lisco

Ben donc quelle est l'importance de prciser que l'image est de type unsigned short ou unsigned char??C'est uniquement pour pouvoir calculer l'espace mmoire occupe par l'image alors??

Et les valeurs que peuvent prendre les pixels a depend de quoi exactement?C'est au moment de l'acquisition qu'il faut choisir a??

----------


## pseudocode

> Ben donc quelle est l'importance de prciser que l'image est de type unsigned short ou unsigned char??C'est uniquement pour pouvoir calculer l'espace mmoire occupe par l'image alors??


J'ai jamais entendu parler d'une "image de type unsigned short".  ::koi:: 

A la rigueur, j'ai entendu que la valeur d'un pixel tait stockes sur un "unsigned short", ce qui me permet de savoir qu'il faut 2 octets par pixel, et que les valeurs min/max sont 0/65535.




> Et les valeurs que peuvent prendre les pixels a depend de quoi exactement?C'est au moment de l'acquisition qu'il faut choisir a??


C'est au moment de choisir le format de sauvegarde de l'image. Par exemple, sous XP tu lances Paint.exe, tu fais "enregistrer sous..." et dans le dialogue de sauvegarde, en bas, tu as les formats d'image.

----------


## lisco

> A la rigueur, j'ai entendu que la valeur d'un pixel tait stockes sur un "unsigned short", ce qui me permet de savoir qu'il faut 2 octets par pixel, et que les valeurs min/max sont 0/65535.


Ok donc cela sous entend que chaque pixel est cod sous forme binaire avec 2 octets??Et que les valeurs des pixels peuvent varier de 0  65535!! ::(:

----------


## pseudocode

> Ok donc cela sous entend que chaque pixel est cod sous forme binaire avec 2 octets??Et que les valeurs des pixels peuvent varier de 0  65535!!


oui, c'est ce que sous-entend le ''unsigned short".

----------


## lisco

Ok, pour montrer que j'ai compris donc si j'ai un pixel qui a comme valeur A5 en hexadecimal en binaire il donne 00001010 00000101 c'est  dire qu'il est manipul sous cette forme en mmoire??Si j'ai faux j'ai besoin d'un exemple concret stp ::):

----------


## pseudocode

> Ok, pour montrer que j'ai compris donc si j'ai un pixel qui a comme valeur A5 en hexadecimal en binaire il donne 00001010 00000101 c'est  dire qu'il est manipul sous cette forme en mmoire??Si j'ai faux j'ai besoin d'un exemple concret stp


Dans ce sens (00001010.00000101) ou dans l'autre (00000101.00001010) suivant l'endianness utilise.

----------


## lisco

Bonjour, j'ai une image dont chaque pixel est cod sur 32 bits, et pour l'afficher en niveau de gris il faut convertir les pixels entre 0 et 255.Est ce quelqu'un peut m'expliquer pourquoi?
D'apres ce que j'ai compris une image affichable en niveaux de gris est donc code sur 8bits??je sais pas si je me trompe!!!

----------


## pseudocode

> Bonjour, j'ai une image dont chaque pixel est cod sur 32 bits, et pour l'afficher en niveau de gris il faut convertir les pixels entre 0 et 255.Est ce quelqu'un peut m'expliquer pourquoi?
> D'apres ce que j'ai compris une image affichable en niveaux de gris est donc code sur 8bits??je sais pas si je me trompe!!!


La plupart des cartes graphiques ne peuvent pas afficher plus de 256 niveaux de luminosit, donc seulement 256 valeurs de gris.  ::?:

----------

