2013-05-15 2 views
0

FreeImage로로드 한 48 비트 (픽셀 당 16 비트) 이미지가 있습니다. 24 비트 이미지로 변환하지 않고이 이미지에서 히스토그램을 생성하려고합니다.48 비트 이미지 히스토그램 계산

이것은 내가 히스토그램 계산을 이해하는 방법입니다 .. 그래서 0에서 내 히스토그램에서 255의 범위가 0 ~ 255 사이의 숫자 pixel.red이 될 수

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

. 그러나 픽셀 당 16 비트가 있으면 0과 65535 사이가 될 수 있습니다.이 값은 막대 그래프에 표시하기에는 너무 큽니다.

48 비트 (또는 그 이상) 이미지로 히스토그램을 계산하는 표준 방법이 있습니까?

답변

0

히스토그램에 필요한 빈 수를 결정해야합니다. 예를 들면. Matlab의 히스토그램 기능은 이러한 형태를 취

(I) (I, n)의 imhist (X, MAP) 첫 번째 경우

가 빈들의 수는 디폴트로 imhist 그래서 256로 사용

imhist , 만약 당신이 16 비트 입력을 가지고 있다면, 이들은 8 비트로 축소되고 256 빈 히스토그램으로 분리 될 것입니다.

두 번째 경우에는 'n'빈 수를 지정할 수 있습니다. 16 비트 데이터에 대해 n = 2를 지정한다고 가정 해 보겠습니다. 그런 다음 본질적으로 히스토그램을 [0-2^15, 2^15-2^16-1]로 나눕니다.

세 번째 경우는 각 저장소에 대한 맵을 지정하는 경우입니다. 즉, 각 bin에 대한 픽셀 값의 범위를 지정해야합니다. 당신이 쓰레기통의 수를 선택하려면 어떻게

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

귀하의 요구 사항에 따라 달라집니다.

0

Stack Overflow Question 당신이 찾고있는 답변이있을 수 있습니다.

"표준"방법이 있는지 나는 모른다.

0

이것은 당신이 예를 들어 0 ~ 255의 범위를 유지하기 위해 픽셀을 다시 확장 할 수 있습니다 표시 목적으로하는 경우 :

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

이 16 비트 픽셀의 상위 범위가 255에서 올 수 있습니다 그리고 16 비트 픽셀의 더 낮은 범위는 0에옵니다.