2013-05-15 34 views
0

我有一個48位(每像素16位)我已經加載FreeImage的圖像。我試圖從該圖像生成直方圖,而不必將其轉換爲24位圖像。計算一個48位圖像直方圖

這就是我所理解的直方圖計算..

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

哪裏pixel.red可以在0到255之間的等有從0到255對我的直方圖範圍。但是,如果每像素有16位,則它可能介於0和65535之間,這太大而無法顯示在直方圖上。

有沒有一種標準的方法來計算48位(或更高)圖像的直方圖?

回答

0

您必須決定直方圖中需要多少個分檔。例如。 Matlab的直方圖函數採用這些形式

imhist(I) imhist(I,N) imhist(X,地圖)

在第一種情況,段的數目是通過默認用作256.所以,如果你有16位輸入,這些將被縮小到8位並分成256個bin的直方圖。

在第二個,你可以指定箱數'n'。假設你爲你的16位數據指定n = 2。然後,這基本上將直方圖拆分爲[0-2^15,2^15-2^16-1]。

第三種情況是指定每個垃圾箱的地圖。即你必須指定每個bin的像素值的範圍。

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

你怎麼想選擇倉的數量取決於你的需求。

0

如果這是爲了顯示你可以縮減像素保持範圍爲0-255,例如:

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

這將允許16位像素的區間上限在255進來並且在16位像素的較低範圍內進入0.