Histogram
Histogram(直方圖),表示灰階圖像(Gray scale image)中,表示灰階值(Gray scale value) i 的像素
在圖像中有多少個。一般常用灰階範圍為0 ~ 255,0為黑,255為白,0 ~ 255之間的值是從黑到白
的各種灰階。簡言之,Histogram即是將每個灰階值在圖像中的個數統計起來。
程式的範例:
void Histogram(unsigned char *image,
int xsize, int ysize,
long hist[])
{
int x,
y, level;
for (y =
0 ; y < ysize ; y++) {
for (x = 0 ; x < xsize ; x++) {
level = *(image + y*xsize + x);
hist[level]++;
}
}
}
將統計出來的結果做以下的處理
max = hist[0];
for (n = 1 ; n < 256 ; n++) {
if (hist[n] > max)
max = hist[n];
}
for (n = 0 ; n < 256 ; n++) {
hist[n] = (long)((hist[n]
* 100) / max);
}
正規化成數值0 ~ 100,接著以【灰階值:***.*】的格式存至檔案,得到的結果如下:
得到的結果其起伏劇烈,不易觀察。為了便於觀察,可以針對直方圖進行鄰近點平均化的動作。
程式的範例:
void Smooth_Histogram(long hist_in[],
long hist_out[])
{
int m,
n, i;
long
sum;
for (n =
0 ; n < 256 ; n++) {
sum = 0;
for (m = -2 ; m <= 2 ; m++) {
i = n + m;
if (i < 0)
i = 0;
if (i > 255)
i = 255;
sum = sum + hist_in[i];
}
hist_out[n] =
(long)((float)sum / 5.0 + 0.5);
}
}
因為將鄰近的點做平均化的動作,所以結果比較平順。以下是結果:
參考文獻
.Visual C++實用圖像處理專業教程 - 北京現代富博科技有限公司編著
Written By James Liang - 2005/06/27