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

Hosted by www.Geocities.ws

1