2013-05-15 4 views
0

J'ai une image de 48 bits (16 bits par pixel) que j'ai chargée avec FreeImage. J'essaie de générer un histogramme à partir de cette image sans avoir à le convertir en image 24 bits.Calcul d'un histogramme d'image 48 bits

Voilà comment je comprends .. sont calculés histogrammes

for (pixel in pixels) 
{ 
    red_histo[pixel.red]++; 
} 

pixel.red peut être compris entre 0 et 255. Donc il y a une plage de 0 à 255 sur mon histogramme. Mais s'il y a 16 bits par pixel, cela pourrait être entre 0 et 65535, ce qui est trop grand pour être affiché sur un histogramme.

Existe-t-il un moyen standard de calculer des histogrammes avec des images de 48 bits (ou plus)?

Répondre

0

Vous devez décider du nombre de cases dont vous avez besoin dans l'histogramme. Par exemple. la fonction de l'histogramme Matlab prend ces formes

imhist (I) imhist (I, n) imhist (X, la carte)

Dans le premier cas, le nombre de casiers est par défaut utilisé en tant que 256. Ainsi , si vous avez une entrée 16 bits, ceux-ci seront réduits à 8 bits et divisés en 256 histogrammes.

Dans la seconde, vous pouvez spécifier le nombre de classes 'n'. Disons que vous spécifiez n = 2 pour vos données 16 bits. Ensuite, cela divisera essentiellement l'histogramme en [0-2^15, 2^15-2^16-1].

Le troisième cas est l'endroit où vous spécifiez la carte pour chaque casier. c'est-à-dire que vous devez spécifier les plages des valeurs de pixel pour chaque bin.

http://www.mathworks.com/help/images/ref/imhist.html

Comment vous voulez choisir le nombre de bacs dépend de vos besoins.

0

Si cela est à des fins d'affichage, vous pouvez ramenons les pixels pour maintenir la plage 0-255 par exemple:

double scalingFactor = 255/65535; 
for (pixel in pixels) 
{ 
    red_histo[(int)(scalingFactor * pixel.red)]++; 
} 

Cela permettra à la gamme supérieure du pixel de 16 bits à venir dans 255 et la plage inférieure du pixel de 16 bits pour entrer à 0.